リネーム機能
This commit is contained in:
parent
370ae97177
commit
203892791e
@ -1,71 +1,71 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using AsmdefHelper.CustomCreate.Editor;
|
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UIElements;
|
using UnityEngine.UIElements;
|
||||||
using UnityEditor.UIElements;
|
|
||||||
|
|
||||||
|
namespace AsmdefHelper.CustomCreate.Editor {
|
||||||
// original: https://github.com/baba-s/UniAssemblyDefinitionCreator
|
// original: https://github.com/baba-s/UniAssemblyDefinitionCreator
|
||||||
public class AsmdefCustomCreateView : EditorWindow {
|
public class AsmdefCustomCreateView : EditorWindow {
|
||||||
[MenuItem("Assets/AsmdefHelper/Create custom asmdef")]
|
[MenuItem("Assets/AsmdefHelper/Create custom asmdef")]
|
||||||
public static void ShowWindow() {
|
public static void ShowWindow() {
|
||||||
var window = GetWindow<AsmdefCustomCreateView>();
|
var window = GetWindow<AsmdefCustomCreateView>();
|
||||||
window.titleContent = new GUIContent("AsmdefCustomCreateView");
|
window.titleContent = new GUIContent("AsmdefCustomCreateView");
|
||||||
window.minSize = new Vector2(200,180);
|
window.minSize = new Vector2(200, 180);
|
||||||
window.maxSize = new Vector2(2000,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");
|
|
||||||
}
|
}
|
||||||
VisualElement labelFromUXML = visualTree.Instantiate();
|
|
||||||
root.Add(labelFromUXML);
|
|
||||||
|
|
||||||
// UI取得
|
public void OnEnable() {
|
||||||
var PathTextField = root.Q<TextField>(className: "PathTextField");
|
// Each editor window contains a root VisualElement object
|
||||||
var NameTextField = root.Q<TextField>(className: "NameTextField");
|
VisualElement root = rootVisualElement;
|
||||||
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の初期値
|
// Import UXML
|
||||||
var asset = Selection.activeObject;
|
var visualTree =
|
||||||
var assetPath = AssetDatabase.GetAssetPath(asset);
|
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
|
||||||
var directory = string.IsNullOrWhiteSpace(assetPath) ? "Assets/" : assetPath;
|
"Assets/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
|
||||||
PathTextField.value = directory;
|
if (visualTree == null) {
|
||||||
NameTextField.value = directory.Replace("Assets/", "").Replace('/', '.');
|
visualTree =
|
||||||
|
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
|
||||||
|
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
|
||||||
|
}
|
||||||
|
|
||||||
// .asmdefを作成して閉じる
|
VisualElement labelFromUXML = visualTree.Instantiate();
|
||||||
CreateButton.clickable.clicked += () => {
|
root.Add(labelFromUXML);
|
||||||
var asmdefName = NameTextField.value;
|
|
||||||
var asmdef = new AssemblyDefinitionJson {
|
// UI取得
|
||||||
name = asmdefName,
|
var PathTextField = root.Q<TextField>(className: "PathTextField");
|
||||||
allowUnsafeCode = AllowUnsafeToggle.value,
|
var NameTextField = root.Q<TextField>(className: "NameTextField");
|
||||||
autoReferenced = AutoReferencedToggle.value,
|
var AllowUnsafeToggle = root.Q<Toggle>(className: "AllowUnsafeToggle");
|
||||||
overrideReferences = OverrideReferencesToggle.value,
|
var AutoReferencedToggle = root.Q<Toggle>(className: "AutoReferencedToggle");
|
||||||
noEngineReferences = NoEngineReferencesToggle.value,
|
var OverrideReferencesToggle = root.Q<Toggle>(className: "OverrideReferencesToggle");
|
||||||
includePlatforms = IsEditorToggle.value ? new[] { "Editor" } : new string[0]
|
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();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
75
Assets/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.cs
Normal file
75
Assets/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.cs
Normal 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();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9cc99bb7ae3447c29afa7daef6d72347
|
||||||
|
timeCreated: 1603812149
|
@ -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>
|
@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 72a349d5d05ba6c4db6d137a4bc54b01
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
Loading…
x
Reference in New Issue
Block a user