リネーム機能
This commit is contained in:
parent
370ae97177
commit
203892791e
@ -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();
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
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