リネーム機能

This commit is contained in:
naninunenoy 2020-10-28 01:04:46 +09:00
parent 370ae97177
commit 203892791e
5 changed files with 160 additions and 58 deletions

View File

@ -1,71 +1,71 @@
using System.IO;
using System.Text;
using AsmdefHelper.CustomCreate.Editor;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor.UIElements;
// original: https://github.com/baba-s/UniAssemblyDefinitionCreator
public class AsmdefCustomCreateView : EditorWindow {
[MenuItem("Assets/AsmdefHelper/Create custom asmdef")]
public static void ShowWindow() {
var window = GetWindow<AsmdefCustomCreateView>();
window.titleContent = new GUIContent("AsmdefCustomCreateView");
window.minSize = new Vector2(200,180);
window.maxSize = new Vector2(2000,180);
}
public void OnEnable() {
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// Import UXML
var visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Assets/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
if (visualTree == null) {
visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
namespace AsmdefHelper.CustomCreate.Editor {
// original: https://github.com/baba-s/UniAssemblyDefinitionCreator
public class AsmdefCustomCreateView : EditorWindow {
[MenuItem("Assets/AsmdefHelper/Create custom asmdef")]
public static void ShowWindow() {
var window = GetWindow<AsmdefCustomCreateView>();
window.titleContent = new GUIContent("AsmdefCustomCreateView");
window.minSize = new Vector2(200, 180);
window.maxSize = new Vector2(2000, 180);
}
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
// UI取得
var PathTextField = root.Q<TextField>(className: "PathTextField");
var NameTextField = root.Q<TextField>(className: "NameTextField");
var AllowUnsafeToggle = root.Q<Toggle>(className: "AllowUnsafeToggle");
var AutoReferencedToggle = root.Q<Toggle>(className: "AutoReferencedToggle");
var OverrideReferencesToggle = root.Q<Toggle>(className: "OverrideReferencesToggle");
var NoEngineReferencesToggle = root.Q<Toggle>(className: "NoEngineReferencesToggle");
var IsEditorToggle = root.Q<Toggle>(className: "IsEditorToggle");
var CreateButton = root.Q<Button>(className: "CreateButton");
public void OnEnable() {
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// PathとNameの初期値
var asset = Selection.activeObject;
var assetPath = AssetDatabase.GetAssetPath(asset);
var directory = string.IsNullOrWhiteSpace(assetPath) ? "Assets/" : assetPath;
PathTextField.value = directory;
NameTextField.value = directory.Replace("Assets/", "").Replace('/', '.');
// Import UXML
var visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Assets/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
if (visualTree == null) {
visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
}
// .asmdefを作成して閉じる
CreateButton.clickable.clicked += () => {
var asmdefName = NameTextField.value;
var asmdef = new AssemblyDefinitionJson {
name = asmdefName,
allowUnsafeCode = AllowUnsafeToggle.value,
autoReferenced = AutoReferencedToggle.value,
overrideReferences = OverrideReferencesToggle.value,
noEngineReferences = NoEngineReferencesToggle.value,
includePlatforms = IsEditorToggle.value ? new[] { "Editor" } : new string[0]
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
// UI取得
var PathTextField = root.Q<TextField>(className: "PathTextField");
var NameTextField = root.Q<TextField>(className: "NameTextField");
var AllowUnsafeToggle = root.Q<Toggle>(className: "AllowUnsafeToggle");
var AutoReferencedToggle = root.Q<Toggle>(className: "AutoReferencedToggle");
var OverrideReferencesToggle = root.Q<Toggle>(className: "OverrideReferencesToggle");
var NoEngineReferencesToggle = root.Q<Toggle>(className: "NoEngineReferencesToggle");
var IsEditorToggle = root.Q<Toggle>(className: "IsEditorToggle");
var CreateButton = root.Q<Button>(className: "CreateButton");
// PathとNameの初期値
var asset = Selection.activeObject;
var assetPath = AssetDatabase.GetAssetPath(asset);
var directory = string.IsNullOrWhiteSpace(assetPath) ? "Assets/" : assetPath;
PathTextField.value = directory;
NameTextField.value = directory.Replace("Assets/", "").Replace('/', '.');
// .asmdefを作成して閉じる
CreateButton.clickable.clicked += () => {
var asmdefName = NameTextField.value;
var asmdef = new AssemblyDefinitionJson {
name = asmdefName,
allowUnsafeCode = AllowUnsafeToggle.value,
autoReferenced = AutoReferencedToggle.value,
overrideReferences = OverrideReferencesToggle.value,
noEngineReferences = NoEngineReferencesToggle.value,
includePlatforms = IsEditorToggle.value ? new[] { "Editor" } : new string[0]
};
var asmdefJson = JsonUtility.ToJson(asmdef, true);
var asmdefPath = $"{directory}/{asmdefName}.asmdef";
File.WriteAllText(asmdefPath, asmdefJson, Encoding.UTF8);
AssetDatabase.Refresh();
Close();
};
var asmdefJson = JsonUtility.ToJson(asmdef, true);
var asmdefPath = $"{directory}/{asmdefName}.asmdef";
File.WriteAllText(asmdefPath, asmdefJson, Encoding.UTF8);
AssetDatabase.Refresh();
Close();
};
}
}
}

View File

@ -0,0 +1,75 @@
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace AsmdefHelper.CustomCreate.Editor {
public class AsmdefRenameView : EditorWindow {
static string renameAsmdefPath = "";
static string asmdefDirectory = "";
[MenuItem("Assets/AsmdefHelper/Rename asmdef")]
public static void ShowWindow() {
// PathとNameの初期値
var asset = Selection.activeObject;
renameAsmdefPath = AssetDatabase.GetAssetPath(asset);
asmdefDirectory = Path.GetDirectoryName(renameAsmdefPath);
// asmdefが選択されている時のみ開く
var extension = renameAsmdefPath.Split('.').LastOrDefault();
if (extension == "asmdef") {
var window = GetWindow<AsmdefRenameView>();
window.titleContent = new GUIContent("AsmdefRenameView");
window.minSize = new Vector2(200, 80);
window.maxSize = new Vector2(2000, 80);
}
}
public void OnEnable() {
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// Import UXML
var visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Assets/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.uxml");
if (visualTree == null) {
visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.uxml");
}
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
// UI取得
var PathTextField = root.Q<TextField>(className: "PathTextField");
var NameTextField = root.Q<TextField>(className: "NameTextField");
var CreateButton = root.Q<Button>(className: "RenameButton");
// 既存のasmdef読み込み
var orgText = File.ReadAllText(renameAsmdefPath);
var asmdef = JsonUtility.FromJson<AssemblyDefinitionJson>(orgText);
// 既存パラメータの反映
PathTextField.value = asmdefDirectory;
NameTextField.value = asmdef.name;
// .asmdefのnameとファイル名を更新して閉じる
CreateButton.clickable.clicked += () => {
// nameのみ更新
var asmdefName = NameTextField.value;
asmdef.name = asmdefName;
var asmdefJson = JsonUtility.ToJson(asmdef, true);
var newAsmdefPath = $"{asmdefDirectory}/{asmdefName}.asmdef";
// 新asmdef作成
File.WriteAllText(newAsmdefPath, asmdefJson, Encoding.UTF8);
// 旧asmdef削除
File.Delete(renameAsmdefPath);
AssetDatabase.Refresh();
Close();
};
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9cc99bb7ae3447c29afa7daef6d72347
timeCreated: 1603812149

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:engine="UnityEngine.UIElements"
xmlns:editor="UnityEditor.UIElements"
xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
>
<engine:Label class="AsmdefInfo" text="Input your asmdef info"/>
<engine:Box>
<engine:TextField class="PathTextField" label="Path" text="ASMDEF_PATH_HERE" readonly="true"/>
<engine:TextField class="NameTextField" label="Name" text="ASMDEF_NAME_HERE"/>
<engine:Button class="RenameButton" text="Rename" />
</engine:Box>
</engine:UXML>

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 72a349d5d05ba6c4db6d137a4bc54b01
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}