Compare commits

...

44 Commits
0.3 ... master

Author SHA1 Message Date
63e57636c0 removed demo scene 2025-01-28 18:26:16 +00:00
Nakano Yosuke
d0a17c5bbd
Merge pull request #18 from naninunenoy/develop
move sample scene
2022-08-24 00:15:11 +09:00
naninunenoy
553b327d4d v0.5.3 2022-08-24 00:13:37 +09:00
naninunenoy
c8f308c41a move scene file 2022-08-24 00:12:37 +09:00
Nakano Yosuke
29e21dbbe2
Merge pull request #17 from basstal/master
compatible with unity 2019
2022-08-24 00:07:11 +09:00
basstal
4cfe8c73a0 compatible with unity 2019 2022-08-23 15:35:13 +08:00
Nakano Yosuke
fb2b3228c0
Merge pull request #16 from naninunenoy/develop
Fix custom create window size
2022-01-19 17:56:53 +09:00
naninunenoy
2246d8f136 update REDME 2022-01-19 17:54:18 +09:00
naninunenoy
1dafd474c2 version up 2022-01-19 17:53:34 +09:00
naninunenoy
62598385de fix editor windows size 2022-01-19 17:52:47 +09:00
naninunenoy
a414349cda unity 2021.2.8 2022-01-19 17:51:13 +09:00
Nakano Yosuke
ab03e64ec3
Merge pull request #15 from naninunenoy/rootnamespace
add root namespace textfield at rename view
2021-10-13 02:10:51 +09:00
naninunenoy
b4824a5490 fix package.json 2021-10-13 01:51:55 +09:00
naninunenoy
ccf420747b fix README.md 2021-10-13 01:50:37 +09:00
naninunenoy
7f311b9000 root namespaceしか変わってない場合はファイルを消さない 2021-10-13 01:41:33 +09:00
naninunenoy
7669aa0212 fix var name 2021-10-13 01:27:03 +09:00
naninunenoy
1bfa4d5b41 rename時にRootnamespaceも変更できるように 2021-10-13 01:24:51 +09:00
naninunenoy
6e87411074 unity 2021.1.16 2021-10-13 01:11:35 +09:00
Nakano Yosuke
c9a893fdde
Update package.json 2021-05-22 17:30:50 +09:00
Nakano Yosuke
db82661e78
Merge pull request #12 from naninunenoy/unity2021
support Unity2021
2021-05-22 17:20:50 +09:00
naninunenoy
40b208a7c5 update package.json 2021-05-22 17:20:35 +09:00
naninunenoy
2d46806ca2 fix README 2021-05-22 17:17:29 +09:00
naninunenoy
e2ea2241e5 remove SyncSolution 2021-05-22 17:15:20 +09:00
naninunenoy
455f64f72c update to 2021.1.7f1 2021-05-22 17:01:54 +09:00
Nakano Yosuke
95fa00c675
Merge pull request #8 from naninunenoy/2020.2
RootNamespace
2020-12-16 23:24:51 +09:00
naninunenoy
d470c63fee release 0.4.1 2020-12-16 23:16:45 +09:00
naninunenoy
a2b3bc90a7 fix to remve text fileld in old unity 2020-12-16 23:12:10 +09:00
naninunenoy
89d8712bb5 add rootNamespace property 2020-12-16 23:01:15 +09:00
naninunenoy
0bb5c8d293 upgrade to 2020.2 2020-12-16 22:49:18 +09:00
naninunenoy
42fbb35553 release 0.4.0 (filter UI #4)
(cherry picked from commit 689a3143891463aadb83e31aa8d252588bc74548)
2020-12-01 01:28:15 +09:00
naninunenoy
45af1a7d81 recactoring toggle dictionaly 2020-12-01 01:02:13 +09:00
naninunenoy
6a2cbd6dd3 toggle group in box 2020-11-30 02:37:56 +09:00
naninunenoy
9a8772967a on/off by top domain toggle 2020-11-30 01:40:16 +09:00
naninunenoy
35961651b3 fix test namespace 2020-11-30 00:30:24 +09:00
naninunenoy
2d13dc20ce move test directory 2020-11-30 00:25:55 +09:00
naninunenoy
363ed7914f asmdef name domain separator class 2020-11-30 00:21:12 +09:00
naninunenoy
5e63d32268 接続数を整列に加味 2020-11-26 23:25:03 +09:00
naninunenoy
ad5ad99975 edge visibility 2020-11-26 23:06:23 +09:00
naninunenoy
52f2856307 node visibility 2020-11-26 22:16:00 +09:00
naninunenoy
6e5241ed2e check box を左に 2020-11-26 01:43:55 +09:00
naninunenoy
c6aafef7ae asmdef 一覧の Toggle 2020-11-26 00:41:49 +09:00
naninunenoy
9c0e3deac3 dependency count 2020-11-25 22:57:17 +09:00
naninunenoy
569f645220 ContentDragger 2020-11-25 22:48:19 +09:00
naninunenoy
b798d5a3ca order by asmdef name 2020-11-25 22:41:37 +09:00
90 changed files with 2608 additions and 593 deletions

View File

@ -11,8 +11,8 @@ namespace AsmdefHelper.CustomCreate.Editor {
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, 200);
window.maxSize = new Vector2(2000, 180); window.maxSize = new Vector2(2000, 2000);
} }
public void OnEnable() { public void OnEnable() {
@ -29,36 +29,51 @@ namespace AsmdefHelper.CustomCreate.Editor {
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml"); "Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefCustomCreateView.uxml");
} }
#if UNITY_2020_1_OR_NEWER
VisualElement labelFromUXML = visualTree.Instantiate(); VisualElement labelFromUXML = visualTree.Instantiate();
#else
VisualElement labelFromUXML = visualTree.CloneTree();
#endif
root.Add(labelFromUXML); root.Add(labelFromUXML);
// UI取得 // UI取得
var PathTextField = root.Q<TextField>(className: "PathTextField"); var pathTextField = root.Q<TextField>(className: "PathTextField");
var NameTextField = root.Q<TextField>(className: "NameTextField"); var nameTextField = root.Q<TextField>(className: "NameTextField");
var AllowUnsafeToggle = root.Q<Toggle>(className: "AllowUnsafeToggle"); var allowUnsafeToggle = root.Q<Toggle>(className: "AllowUnsafeToggle");
var AutoReferencedToggle = root.Q<Toggle>(className: "AutoReferencedToggle"); var autoReferencedToggle = root.Q<Toggle>(className: "AutoReferencedToggle");
var OverrideReferencesToggle = root.Q<Toggle>(className: "OverrideReferencesToggle"); var noEngineReferencesToggle = root.Q<Toggle>(className: "NoEngineReferencesToggle");
var NoEngineReferencesToggle = root.Q<Toggle>(className: "NoEngineReferencesToggle"); var overrideReferencesToggle = root.Q<Toggle>(className: "OverrideReferencesToggle");
var IsEditorToggle = root.Q<Toggle>(className: "IsEditorToggle"); var rootNamespaceTextField = root.Q<TextField>(className: "RootNamespaceTextField");
var CreateButton = root.Q<Button>(className: "CreateButton"); var isEditorToggle = root.Q<Toggle>(className: "IsEditorToggle");
var createButton = root.Q<Button>(className: "CreateButton");
// PathとNameの初期値 // PathとNameの初期値
var asset = Selection.activeObject; var asset = Selection.activeObject;
var assetPath = AssetDatabase.GetAssetPath(asset); var assetPath = AssetDatabase.GetAssetPath(asset);
var directory = string.IsNullOrWhiteSpace(assetPath) ? "Assets/" : assetPath; var directory = string.IsNullOrWhiteSpace(assetPath) ? "Assets/" : assetPath;
PathTextField.value = directory; pathTextField.value = directory;
NameTextField.value = directory.Replace("Assets/", "").Replace('/', '.'); var defaultName = directory.Replace("Assets/", "").Replace('/', '.');
nameTextField.value = defaultName;
// RootNamespace が設定できるのは2020.2以降
#if UNITY_2020_2_OR_NEWER
rootNamespaceTextField.value = defaultName;
#else
root.Q<Box>(className: "Box").Remove(rootNamespaceTextField);
#endif
// .asmdefを作成して閉じる // .asmdefを作成して閉じる
CreateButton.clickable.clicked += () => { createButton.clickable.clicked += () => {
var asmdefName = NameTextField.value; var asmdefName = nameTextField.value;
var asmdef = new AssemblyDefinitionJson { var asmdef = new AssemblyDefinitionJson {
name = asmdefName, name = asmdefName,
allowUnsafeCode = AllowUnsafeToggle.value, #if UNITY_2020_2_OR_NEWER
autoReferenced = AutoReferencedToggle.value, rootNamespace = rootNamespaceTextField.value,
overrideReferences = OverrideReferencesToggle.value, #endif
noEngineReferences = NoEngineReferencesToggle.value, allowUnsafeCode = allowUnsafeToggle.value,
includePlatforms = IsEditorToggle.value ? new[] { "Editor" } : new string[0] autoReferenced = autoReferencedToggle.value,
overrideReferences = overrideReferencesToggle.value,
noEngineReferences = noEngineReferencesToggle.value,
includePlatforms = isEditorToggle.value ? new[] { "Editor" } : new string[0]
}; };
var asmdefJson = JsonUtility.ToJson(asmdef, true); var asmdefJson = JsonUtility.ToJson(asmdef, true);
var asmdefPath = $"{directory}/{asmdefName}.asmdef"; var asmdefPath = $"{directory}/{asmdefName}.asmdef";

View File

@ -6,13 +6,14 @@
xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
> >
<engine:Label class="AsmdefInfo" text="Input your asmdef info"/> <engine:Label class="AsmdefInfo" text="Input your asmdef info"/>
<engine:Box> <engine:Box class="Box">
<engine:TextField class="PathTextField" label="Path" text="ASMDEF_PATH_HERE" readonly="true"/> <engine:TextField class="PathTextField" label="Path" text="ASMDEF_PATH_HERE" readonly="true"/>
<engine:TextField class="NameTextField" label="Name" text="ASMDEF_NAME_HERE"/> <engine:TextField class="NameTextField" label="Name" text="ASMDEF_NAME_HERE"/>
<engine:Toggle class="AllowUnsafeToggle" label="Allow 'unsafe' Code" value="false"/> <engine:Toggle class="AllowUnsafeToggle" label="Allow 'unsafe' Code" value="false"/>
<engine:Toggle class="AutoReferencedToggle" label="Auto Referenced" value="true"/> <engine:Toggle class="AutoReferencedToggle" label="Auto Referenced" value="true"/>
<engine:Toggle class="OverrideReferencesToggle" label="Override Referenced" value="false"/>
<engine:Toggle class="NoEngineReferencesToggle" label="No Engine References" value="false"/> <engine:Toggle class="NoEngineReferencesToggle" label="No Engine References" value="false"/>
<engine:Toggle class="OverrideReferencesToggle" label="Override Referenced" value="false"/>
<engine:TextField class="RootNamespaceTextField" label="Root Namespace" text="ROOT_NAMESPACE_HERE"/>
<engine:Toggle class="IsEditorToggle" label="Is Editor" value="false"/> <engine:Toggle class="IsEditorToggle" label="Is Editor" value="false"/>
<engine:Button class="CreateButton" text="Create" /> <engine:Button class="CreateButton" text="Create" />
</engine:Box> </engine:Box>

View File

@ -21,8 +21,8 @@ namespace AsmdefHelper.CustomCreate.Editor {
if (extension == "asmdef") { if (extension == "asmdef") {
var window = GetWindow<AsmdefRenameView>(); var window = GetWindow<AsmdefRenameView>();
window.titleContent = new GUIContent("AsmdefRenameView"); window.titleContent = new GUIContent("AsmdefRenameView");
window.minSize = new Vector2(200, 80); window.minSize = new Vector2(200, 100);
window.maxSize = new Vector2(2000, 80); window.maxSize = new Vector2(2000, 100);
} }
} }
@ -40,33 +40,50 @@ namespace AsmdefHelper.CustomCreate.Editor {
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.uxml"); "Packages/dev.n5y.asmdefhelper/AsmdefHelper/CustomCreate/Editor/AsmdefRenameView.uxml");
} }
#if UNITY_2020_1_OR_NEWER
VisualElement labelFromUXML = visualTree.Instantiate(); VisualElement labelFromUXML = visualTree.Instantiate();
#else
VisualElement labelFromUXML = visualTree.CloneTree();
#endif
root.Add(labelFromUXML); root.Add(labelFromUXML);
// UI取得 // UI取得
var PathTextField = root.Q<TextField>(className: "PathTextField"); var pathTextField = root.Q<TextField>(className: "PathTextField");
var NameTextField = root.Q<TextField>(className: "NameTextField"); var nameTextField = root.Q<TextField>(className: "NameTextField");
var CreateButton = root.Q<Button>(className: "RenameButton"); var rootNamespaceTextField = root.Q<TextField>(className: "RootNamespaceTextField");
var createButton = root.Q<Button>(className: "RenameButton");
// 既存のasmdef読み込み // 既存のasmdef読み込み
var orgText = File.ReadAllText(renameAsmdefPath); var orgText = File.ReadAllText(renameAsmdefPath);
var asmdef = JsonUtility.FromJson<AssemblyDefinitionJson>(orgText); var asmdef = JsonUtility.FromJson<AssemblyDefinitionJson>(orgText);
// 既存パラメータの反映 // 既存パラメータの反映
PathTextField.value = asmdefDirectory; pathTextField.value = asmdefDirectory;
NameTextField.value = asmdef.name; nameTextField.value = asmdef.name;
var asmdefNameOrg = asmdef.name;
// RootNamespace が設定できるのは2020.2以降
#if UNITY_2020_2_OR_NEWER
rootNamespaceTextField.value = asmdef.rootNamespace;
#else
root.Q<Box>(className: "Box").Remove(rootNamespaceTextField);
#endif
// .asmdefのnameとファイル名を更新して閉じる // .asmdefのnameとファイル名を更新して閉じる
CreateButton.clickable.clicked += () => { createButton.clickable.clicked += () => {
// nameのみ更新 var asmdefName = nameTextField.value;
var asmdefName = NameTextField.value;
asmdef.name = asmdefName; asmdef.name = asmdefName;
#if UNITY_2020_2_OR_NEWER
asmdef.rootNamespace = rootNamespaceTextField.value;
#endif
var asmdefJson = JsonUtility.ToJson(asmdef, true); var asmdefJson = JsonUtility.ToJson(asmdef, true);
var newAsmdefPath = $"{asmdefDirectory}/{asmdefName}.asmdef"; var newAsmdefPath = $"{asmdefDirectory}/{asmdefName}.asmdef";
// 新asmdef作成 // 新asmdef作成
File.WriteAllText(newAsmdefPath, asmdefJson, Encoding.UTF8); File.WriteAllText(newAsmdefPath, asmdefJson, Encoding.UTF8);
// 旧asmdef削除 // ファイル名が変わった場合は旧asmdef削除
File.Delete(renameAsmdefPath); if (asmdefNameOrg != asmdefName) {
FileUtil.DeleteFileOrDirectory(renameAsmdefPath);
}
AssetDatabase.Refresh(); AssetDatabase.Refresh();
Close(); Close();
}; };

View File

@ -9,6 +9,7 @@
<engine:Box> <engine:Box>
<engine:TextField class="PathTextField" label="Path" text="ASMDEF_PATH_HERE" readonly="true"/> <engine:TextField class="PathTextField" label="Path" text="ASMDEF_PATH_HERE" readonly="true"/>
<engine:TextField class="NameTextField" label="Name" text="ASMDEF_NAME_HERE"/> <engine:TextField class="NameTextField" label="Name" text="ASMDEF_NAME_HERE"/>
<engine:TextField label="Root Namespace" text="ROOT_NAMESPACE_HERE" class="RootNamespaceTextField" />
<engine:Button class="RenameButton" text="Rename" /> <engine:Button class="RenameButton" text="Rename" />
</engine:Box> </engine:Box>
</engine:UXML> </engine:UXML>

View File

@ -1,6 +1,9 @@
namespace AsmdefHelper.CustomCreate.Editor { namespace AsmdefHelper.CustomCreate.Editor {
public class AssemblyDefinitionJson { public class AssemblyDefinitionJson {
public string name = string.Empty; public string name = string.Empty;
#if UNITY_2020_2_OR_NEWER
public string rootNamespace = string.Empty;
#endif
public string[] references = new string[0]; public string[] references = new string[0];
public string[] includePlatforms = new string[0]; public string[] includePlatforms = new string[0];
public string[] excludePlatforms = new string[0]; public string[] excludePlatforms = new string[0];

View File

@ -1,10 +1,11 @@
using System.Collections.Generic; using UnityEditor;
using System.Linq;
using UnityEditor;
using UnityEditor.Compilation; using UnityEditor.Compilation;
namespace AsmdefHelper.DependencyGraph.Editor { namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefGraphEditorWindow : EditorWindow { public class AsmdefGraphEditorWindow : EditorWindow, IToggleCheckDelegate {
static AsmdefSelectionView selectionWindow;
AsmdefGraphView graphView;
[MenuItem("AsmdefHelper/Open DependencyGraph", priority = 2000)] [MenuItem("AsmdefHelper/Open DependencyGraph", priority = 2000)]
public static void Open() { public static void Open() {
GetWindow<AsmdefGraphEditorWindow>("Asmdef Dependency"); GetWindow<AsmdefGraphEditorWindow>("Asmdef Dependency");
@ -14,10 +15,26 @@ namespace AsmdefHelper.DependencyGraph.Editor {
// .asmdefをすべて取得 // .asmdefをすべて取得
var asmdefs = CompilationPipeline.GetAssemblies(); var asmdefs = CompilationPipeline.GetAssemblies();
// viewの作成 // viewの作成
var graphView = new AsmdefGraphView(asmdefs) { graphView = new AsmdefGraphView(asmdefs) {
style = { flexGrow = 1 } style = { flexGrow = 1 }
}; };
rootVisualElement.Add(graphView); rootVisualElement.Add(graphView);
// 選択ウィンドウも作成
selectionWindow = GetWindow<AsmdefSelectionView>("Asmdef Selection");
selectionWindow.SetAsmdef(asmdefs, this);
}
// 片方を閉じる
void OnDestroy() {
if (selectionWindow != null) {
selectionWindow.Close();
}
selectionWindow = null;
}
void IToggleCheckDelegate.OnSelectionChanged(string label, bool isChecked) {
graphView.SetNodeVisibility(label, isChecked);
} }
} }
} }

View File

@ -10,6 +10,7 @@ using UnityEngine.UIElements;
namespace AsmdefHelper.DependencyGraph.Editor { namespace AsmdefHelper.DependencyGraph.Editor {
public sealed class AsmdefGraphView : GraphView { public sealed class AsmdefGraphView : GraphView {
readonly Dictionary<string, IAsmdefNodeView> asmdefNodeDict;
public AsmdefGraphView(IEnumerable<Assembly> assemblies) { public AsmdefGraphView(IEnumerable<Assembly> assemblies) {
var assemblyArr = assemblies.ToArray(); var assemblyArr = assemblies.ToArray();
// zoom可能に // zoom可能に
@ -18,8 +19,10 @@ namespace AsmdefHelper.DependencyGraph.Editor {
Insert(0, new GridBackground()); Insert(0, new GridBackground());
// ドラッグによる移動可能に // ドラッグによる移動可能に
this.AddManipulator(new SelectionDragger()); this.AddManipulator(new SelectionDragger());
// ドラッグで描画範囲を動かせるように
this.AddManipulator(new ContentDragger());
// ノードの追加 // ノードの追加
var asmdefNodeDict = new Dictionary<string, IAsmdefNodeView>(); asmdefNodeDict = new Dictionary<string, IAsmdefNodeView>();
foreach (var asm in assemblyArr) { foreach (var asm in assemblyArr) {
var node = new AsmdefNode(asm.name, contentContainer); var node = new AsmdefNode(asm.name, contentContainer);
AddElement(node); AddElement(node);
@ -57,6 +60,14 @@ namespace AsmdefHelper.DependencyGraph.Editor {
} }
} }
// Portに接続数を追記
foreach (var dep in dependencies) {
if (asmdefNodeDict.TryGetValue(dep.Profile.Name, out var node)) {
node.LeftPort.Label = $"RefBy({dep.Sources.Count})";
node.RightPort.Label = $"RefTo({dep.Destinations.Count})";
}
}
// ノードの場所を整列 // ノードの場所を整列
var sortStrategy = new AlignSortStrategy(AlignParam.Default(), Vector2.zero); var sortStrategy = new AlignSortStrategy(AlignParam.Default(), Vector2.zero);
var sortedNode = sortStrategy.Sort(dependencies); var sortedNode = sortStrategy.Sort(dependencies);
@ -67,6 +78,12 @@ namespace AsmdefHelper.DependencyGraph.Editor {
} }
} }
public void SetNodeVisibility(string nodeName, bool visible_) {
if (asmdefNodeDict.TryGetValue(nodeName, out var node)) {
node.Visibility = visible_;
}
}
public override List<Port> GetCompatiblePorts(Port startAnchor, NodeAdapter nodeAdapter) { public override List<Port> GetCompatiblePorts(Port startAnchor, NodeAdapter nodeAdapter) {
return ports.ToList(); return ports.ToList();
} }

View File

@ -4,17 +4,34 @@ using UnityEngine.UIElements;
namespace AsmdefHelper.DependencyGraph.Editor { namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefNode : UiElementsNodeView, IAsmdefNodeView { public class AsmdefNode : UiElementsNodeView, IAsmdefNodeView {
public IPort LeftPort { get; } readonly GraphViewPort leftPort;
public IPort RightPort { get; } readonly GraphViewPort rightPort;
public IPort LeftPort => leftPort;
public IPort RightPort => rightPort;
public AsmdefNode(string nodeName, VisualElement parentContentContainer) { public AsmdefNode(string nodeName, VisualElement parentContentContainer) {
Label = nodeName; Label = nodeName;
LeftPort = new GraphViewPort(parentContentContainer, Direction.Input) { Label = "Ref By" }; leftPort = new GraphViewPort(parentContentContainer, Direction.Input) { Label = "Ref By" };
inputContainer.Add(LeftPort as Port); // as right side inputContainer.Add(LeftPort as Port); // as right side
RightPort = new GraphViewPort(parentContentContainer, Direction.Output) { Label = "Ref To" }; rightPort = new GraphViewPort(parentContentContainer, Direction.Output) { Label = "Ref To" };
outputContainer.Add(RightPort as Port); // as left side outputContainer.Add(RightPort as Port); // as left side
} }
public override bool Visibility {
get => base.Visibility;
set {
base.Visibility = value;
// right(output)
foreach (var edge in rightPort.connections) {
edge.visible = edge.input.node.visible & visible;
}
// left(input)
foreach (var edge in leftPort.connections) {
edge.visible = edge.output.node.visible & visible;
}
}
}
} }
} }

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7f68a5c3b1e9b8b4aa69caf9b0838471 guid: 686371b55f14bdb4ca1a0ee236361071
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@ -0,0 +1,124 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using UnityEditor;
using UnityEditor.Compilation;
using UnityEngine;
using UnityEngine.UIElements;
namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefSelectionView : EditorWindow {
const int toggleCount = 1000;
static EditorWindow graphWindow;
readonly ToggleDict groupMasterToggleDict = new ToggleDict();
readonly ToggleDict toggleDict = new ToggleDict();
IToggleCheckDelegate toggleDelegate;
public void OnEnable() {
graphWindow = GetWindow<AsmdefGraphEditorWindow>();
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// Import UXML
var visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.uxml");
if (visualTree == null) {
visualTree =
AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
"Packages/dev.n5y.asmdefhelper/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.uxml");
}
#if UNITY_2020_1_OR_NEWER
VisualElement labelFromUXML = visualTree.Instantiate();
#else
VisualElement labelFromUXML = visualTree.CloneTree();
#endif
root.Add(labelFromUXML);
}
public void SetAsmdef(Assembly[] assemblies, IToggleCheckDelegate toggleDelegate_) {
var sortedAssemblies = assemblies.OrderBy(x => x.name).ToArray();
var scrollView = rootVisualElement.Q<ScrollView>(className: "ScrollView");
toggleDict.Clear();
for (var i = 0; i < toggleCount; i++) {
var toggle = rootVisualElement.Q<Toggle>(className: $"toggle{i}");
if (i < sortedAssemblies.Length) {
var assemblyName = sortedAssemblies[i].name;
toggle.text = assemblyName;
toggle.value = true;
toggleDict.Add(assemblyName, new UiElementToggle(toggle));
} else {
scrollView.Remove(toggle);
}
}
// グループに分ける
var group = new DomainGroup();
group.Create(sortedAssemblies.Select(x => x.name));
var tops = group.GetTopDomainsWithSomeSubDomains().ToArray();
foreach (var top in tops) {
var topToggle = new Toggle { text = top, value = true};
var slaveToggles = new List<IToggle>();
Toggle firstToggle = null;
var domains = group.GetSubDomains(top);
foreach (var domain in domains) {
var isLast = domains.Last() == domain;
if (toggleDict.TryGetToggle(domain.FullName, out var toggle)) {
var keisen = isLast ? "└" : "├";
toggle.Name = domain.HasSubDomain() ? $"{keisen} {domain.SubDomain}" : toggle.Name;
slaveToggles.Add(toggle);
if (firstToggle == null && toggle is UiElementToggle y) {
firstToggle = y.Toggle;
}
}
}
var toggleGroup = new ToggleGroup(new UiElementToggle(topToggle), slaveToggles);
if (firstToggle != null) {
var index = scrollView.IndexOf(firstToggle);
// グループに属する toggle は box に入れる
var box = new Box();
scrollView.Insert(index, topToggle);
scrollView.Insert(index + 1, box);
foreach (var slaveToggle in slaveToggles) {
if (slaveToggle is UiElementToggle x) {
box.Add(x.Toggle);
}
}
}
groupMasterToggleDict.Add(top, toggleGroup);
}
toggleDelegate = toggleDelegate_;
}
void OnGUI() {
// toggle の更新を監視 (onValueChangedが無さそう)
// ToggleGroup の長
var updatedGroups = groupMasterToggleDict.ScanUpdate().ToArray();
groupMasterToggleDict.OverwriteToggles(updatedGroups.Select(x => x.Item1));
// 普通の Toggle達
var updated = toggleDict.ScanUpdate().ToArray();
foreach (var x in updated) {
var (key, current) = x;
toggleDelegate?.OnSelectionChanged(key, current);
}
}
// 片方を閉じる
async void OnDestroy() {
// 同フレームで OnDestroy を呼ぶと警告が出るので遅延実行
await Task.Delay(1);
if (graphWindow != null) {
graphWindow.Close();
}
graphWindow = null;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 69bee09693f54d46954fb60401f58b66
timeCreated: 1606312787

View File

@ -0,0 +1,5 @@
Label {
font-size: 20px;
-unity-font-style: bold;
color: rgb(68, 138, 255);
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7906d8f1d4e539745bf53fba8fc20d3a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
disableValidation: 0

View File

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

View File

@ -0,0 +1,6 @@
namespace AsmdefHelper.DependencyGraph.Editor {
public interface IToggle {
bool IsOn { set; get; }
string Name { set; get; }
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4f8c1aea6924490e9d1f3745569b7c03
timeCreated: 1606663328

View File

@ -0,0 +1,5 @@
namespace AsmdefHelper.DependencyGraph.Editor {
public interface IToggleCheckDelegate {
void OnSelectionChanged(string label, bool isChecked);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0c48da7c3f95419cbfc95c4ec2816489
timeCreated: 1606313215

View File

@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Linq;
namespace AsmdefHelper.DependencyGraph.Editor {
public class ToggleDict {
class TogglePair {
public bool prevToggleValue;
public readonly IToggle toggle;
public TogglePair(IToggle toggle) {
this.toggle = toggle;
prevToggleValue = toggle.IsOn;
}
}
readonly IDictionary<string, TogglePair> dict;
public ToggleDict() {
dict = new Dictionary<string, TogglePair>();
}
public void Add(string key, IToggle toggle) {
dict.Add(key, new TogglePair(toggle));
}
public IEnumerable<(string, bool)> ScanUpdate() {
return dict
.Where(x => x.Value.prevToggleValue != x.Value.toggle.IsOn)
.Select(x => {
// 更新も行う
dict[x.Key].prevToggleValue = x.Value.toggle.IsOn;
return (x.Key, x.Value.toggle.IsOn);
});
}
public void OverwriteToggles(IEnumerable<string> updateKeys) {
// UI 上の Toggle の check が変わってもisOnには反映されないのでここで設定
foreach (var keys in updateKeys) {
var val = dict[keys];
val.toggle.IsOn = val.toggle.IsOn;
}
}
public bool TryGetToggle(string key, out IToggle toggle) {
if (dict.TryGetValue(key, out var x)) {
toggle = x.toggle;
return true;
}
toggle = default;
return false;
}
public void Clear() {
dict.Clear();
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8725d14bce6043b387ea7f0361a56750
timeCreated: 1606747756

View File

@ -0,0 +1,28 @@
using System.Collections.Generic;
namespace AsmdefHelper.DependencyGraph.Editor {
public class ToggleGroup : IToggle {
readonly IToggle masterToggle;
readonly IEnumerable<IToggle> slaveToggles;
public ToggleGroup(IToggle masterToggle, IEnumerable<IToggle> slaveToggles) {
this.masterToggle = masterToggle;
this.slaveToggles = slaveToggles;
}
public string Name {
get => masterToggle.Name;
set => masterToggle.Name = value;
}
public bool IsOn {
get => masterToggle.IsOn;
set {
masterToggle.IsOn = value;
foreach (var toggle in slaveToggles) {
toggle.IsOn = value;
}
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5308ff649752450ba423e8ce799f2048
timeCreated: 1606663303

View File

@ -0,0 +1,10 @@
using UnityEngine.UIElements;
namespace AsmdefHelper.DependencyGraph.Editor {
public class UiElementToggle : IToggle {
public readonly Toggle Toggle;
public UiElementToggle(Toggle toggle) => Toggle = toggle;
public string Name { get => Toggle.text; set => Toggle.text = value; }
public bool IsOn { get => Toggle.value; set => Toggle.value = value; }
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: faa82404bed34442b46aceb699aa2fd6
timeCreated: 1606663359

View File

@ -0,0 +1,67 @@
using System.Collections.Generic;
using System.Linq;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode {
public class DomainGroup {
readonly Dictionary<string, List<DomainUnit>> dict;
public DomainGroup() {
dict = new Dictionary<string, List<DomainUnit>>();
}
public void Create(IEnumerable<string> all) {
dict.Clear();
foreach (var str in all) {
var unit = new DomainUnit(str, '.');
if (!unit.HasSubDomain()) {
unit = new DomainUnit(str, '-');
}
if (!unit.HasSubDomain()) {
unit = new DomainUnit(str, '_');
}
if (!unit.HasSubDomain()) {
dict.Add(unit.FullName, new List<DomainUnit> { unit });
} else {
if (dict.TryGetValue(unit.TopDomain, out var list)) {
list.Add(unit);
} else {
dict.Add(unit.TopDomain, new List<DomainUnit> { unit });
}
}
}
// 1つしかなかったものを単独とする
var soloKeys = GetSoloDomains().ToArray();
foreach (var key in soloKeys) {
var unit = dict[key].FirstOrDefault();
if (unit == null || key == unit.FullName) {
continue;
}
dict.Remove(key);
var newKey = unit.FullName;
if (dict.ContainsKey(newKey)) {
dict[newKey].Add(unit);
} else {
dict.Add(newKey, new List<DomainUnit> { new DomainUnit(unit.FullName, '\0') });
}
}
}
public IEnumerable<string> GetTopDomains() => dict.Keys;
public IEnumerable<string> GetSoloDomains() => dict
.Where(x => x.Value.Count == 1)
.Select(x => x.Key);
public IEnumerable<string> GetTopDomainsWithSomeSubDomains() => dict
.Keys
.Except(GetSoloDomains());
public IEnumerable<DomainUnit> GetSubDomains(string topDomain) {
if (dict.TryGetValue(topDomain, out var list)) {
return list;
}
return new DomainUnit[0];
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d9fe84ab1b8c44b0a841738f0ecb37d3
timeCreated: 1606659209

View File

@ -0,0 +1,27 @@
using System;
using System.Linq;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode {
public class DomainUnit {
public readonly string FullName;
public readonly string TopDomain;
public readonly string SubDomain;
public DomainUnit(string fullName, char separator) {
this.FullName = fullName;
if (string.IsNullOrEmpty(FullName)) return;
var split = fullName.Split(separator).Where(x => !string.IsNullOrEmpty(x)).ToArray();
if (split.Length < 2) {
TopDomain = fullName.Replace(separator.ToString(), "");
SubDomain = string.Empty;
} else {
TopDomain = split[0];
SubDomain = split.Skip(1).Aggregate((a, b) => $"{a}{separator}{b}");
}
}
public bool HasSubDomain() => !string.IsNullOrEmpty(SubDomain);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2927a4439ddc45a0a386b64e05220d53
timeCreated: 1606658272

View File

@ -18,6 +18,7 @@ namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Sort {
var posDict = nodeArr.ToDictionary(x => x.Profile, _ => originPosition); var posDict = nodeArr.ToDictionary(x => x.Profile, _ => originPosition);
// まず順番に整列させる // まず順番に整列させる
nodeArr = nodeArr.OrderBy(x => x.Profile.Name).ToArray();
var nodeGrid = new NodeGrid(alignParam.nodeWidth, alignParam.nodeHeight, alignParam.basicDistance, nodeArr.Length); var nodeGrid = new NodeGrid(alignParam.nodeWidth, alignParam.nodeHeight, alignParam.basicDistance, nodeArr.Length);
for (var i = 0; i < nodeArr.Length; i++) { for (var i = 0; i < nodeArr.Length; i++) {
posDict[nodeArr[i].Profile] += nodeGrid.GridCenterPositions()[i]; posDict[nodeArr[i].Profile] += nodeGrid.GridCenterPositions()[i];
@ -43,6 +44,15 @@ namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Sort {
} }
} }
// 接続数に応じて左右に移動させる
// ref to が多いものが左に、ref by が多いものが右に
const float factor = 60.0F;
foreach (var dep in nodeArr) {
var score = (dep.Sources.Count - dep.Destinations.Count) * factor;
var p = posDict[dep.Profile];
posDict[dep.Profile] = new Vector2(p.x + score, p.y);
}
return posDict.Select(x => new SortedNode { Profile = x.Key, Position = x.Value }); return posDict.Select(x => new SortedNode { Profile = x.Key, Position = x.Value });
} }
} }

View File

@ -1,5 +1,5 @@
namespace AsmdefHelper.DependencyGraph.Editor.NodeView { namespace AsmdefHelper.DependencyGraph.Editor.NodeView {
public interface INodeView : IRect { public interface INodeView : IRect, IVisible {
string Label { set; get; } string Label { set; get; }
} }
} }

View File

@ -0,0 +1,5 @@
namespace AsmdefHelper.DependencyGraph.Editor.NodeView {
public interface IVisible {
bool Visibility { set; get; }
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aecb56b3d2f84f408ad0aff39ba9e24c
timeCreated: 1606396097

View File

@ -22,5 +22,10 @@ namespace AsmdefHelper.DependencyGraph.Editor.NodeView {
public float Height => contentRect.height; public float Height => contentRect.height;
public float Width => contentRect.width; public float Width => contentRect.width;
public virtual bool Visibility {
get => visible;
set => visible = value;
}
} }
} }

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8119c430aef94628a88162f0f2dede2c
timeCreated: 1606663500

View File

@ -3,8 +3,9 @@ using AsmdefHelper.DependencyGraph.Editor.DependencyNode.Sort;
using NUnit.Framework; using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class DependencyNodeExtensionsTest { public class DependencyNodeExtensionsTest {
[SetUp] [SetUp]

View File

@ -0,0 +1,53 @@
using System.Collections;
using System.Linq;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using NUnit.Framework;
using UnityEditor;
using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class DomainGroupTest {
readonly string[] inputs ={
"unity.hoge",
"unity.fuga",
"unity.foo.bar",
"UniRx",
"UniRx.Async",
"zenject",
"zenject-test-framework",
"MyAsmdef",
"MyAsmdef2_Test",
"MyAsmdef3.hoge",
"MyAsmdef3-hoge",
};
[Test]
public void TestDomainGroup() {
var group = new DomainGroup();
group.Create(inputs);
Assert.That(group.GetTopDomains().Count(), Is.EqualTo(6));
Assert.That(group.GetSubDomains("unity").Count(), Is.EqualTo(3));
Assert.That(group.GetSubDomains("UniRx").Count(), Is.EqualTo(2));
Assert.That(group.GetSubDomains("zenject").Count(), Is.EqualTo(2));
Assert.That(group.GetSubDomains("MyAsmdef").Count(), Is.EqualTo(1));
Assert.That(group.GetSubDomains("MyAsmdef2_Test").Count(), Is.EqualTo(1));
Assert.That(group.GetSubDomains("MyAsmdef3").Count(), Is.EqualTo(2));
Assert.That(group.GetTopDomainsWithSomeSubDomains().Count(), Is.EqualTo(4));
Assert.That(group.GetSoloDomains().Count(), Is.EqualTo(2));
Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "hoge"), Is.True);
Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "fuga"), Is.True);
Assert.That(group.GetSubDomains("unity").Any(x => x.SubDomain == "foo.bar"), Is.True);
Assert.That(group.GetSubDomains("UniRx").Any(x => x.SubDomain == ""), Is.True);
Assert.That(group.GetSubDomains("UniRx").Any(x => x.SubDomain == "Async"), Is.True);
Assert.That(group.GetSubDomains("zenject").Any(x => x.SubDomain == ""), Is.True);
Assert.That(group.GetSubDomains("zenject").Any(x => x.SubDomain == "test-framework"), Is.True);
Assert.That(group.GetSubDomains("MyAsmdef").Any(x => x.SubDomain == ""), Is.True);
Assert.That(group.GetSubDomains("MyAsmdef2_Test").Any(x => x.SubDomain == ""), Is.True);
Assert.That(group.GetSubDomains("MyAsmdef3").Any(x => x.SubDomain == "hoge"), Is.True);
Assert.That(group.GetSubDomains("MyAsmdef3").Count(x => x.SubDomain == "hoge"), Is.EqualTo(2));
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1ccc87caf20a4985a4e3c94bfc1c12c6
timeCreated: 1606660230

View File

@ -0,0 +1,73 @@
using System.Collections;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using NUnit.Framework;
using UnityEditor;
using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class DomainUnitTest {
[Test]
public void TestDomainUnit_HasTopDomain() {
var unit = new DomainUnit("abc.def.ghi.jk", '.');
Assert.That(unit.FullName, Is.EqualTo("abc.def.ghi.jk"));
Assert.That(unit.TopDomain, Is.EqualTo("abc"));
Assert.That(unit.SubDomain, Is.EqualTo("def.ghi.jk"));
Assert.That(unit.HasSubDomain, Is.True);
}
[Test]
public void TestDomainUnit_HasNoTopDomain() {
var unit = new DomainUnit("abcdefghijk", '.');
Assert.That(unit.FullName, Is.EqualTo("abcdefghijk"));
Assert.That(unit.TopDomain, Is.EqualTo("abcdefghijk"));
Assert.That(unit.SubDomain, Is.Empty);
Assert.That(unit.HasSubDomain, Is.False);
}
[Test]
public void TestDomainUnit_StartWithSeparator() {
var unit = new DomainUnit(".abc", '.');
Assert.That(unit.FullName, Is.EqualTo(".abc"));
Assert.That(unit.TopDomain, Is.EqualTo("abc"));
Assert.That(unit.SubDomain, Is.Empty);
Assert.That(unit.HasSubDomain, Is.False);
}
[Test]
public void TestDomainUnit_EndWithSeparator() {
var unit = new DomainUnit("abc.", '.');
Assert.That(unit.FullName, Is.EqualTo("abc."));
Assert.That(unit.TopDomain, Is.EqualTo("abc"));
Assert.That(unit.SubDomain, Is.Empty);
Assert.That(unit.HasSubDomain, Is.False);
}
[Test]
public void TestDomainUnit_StartAndEndWithSeparator() {
var unit = new DomainUnit(".abc.def.", '.');
Assert.That(unit.FullName, Is.EqualTo(".abc.def."));
Assert.That(unit.TopDomain, Is.EqualTo("abc"));
Assert.That(unit.SubDomain, Is.EqualTo("def"));
Assert.That(unit.HasSubDomain, Is.True);
}
[Test]
public void TestDomainUnit_OnlySeparator() {
var unit = new DomainUnit(".", '.');
Assert.That(unit.FullName, Is.EqualTo("."));
Assert.That(unit.TopDomain, Is.Empty);
Assert.That(unit.SubDomain, Is.Empty);
Assert.That(unit.HasSubDomain, Is.False);
}
[Test]
public void TestDomainUnit_OnlySeparators() {
var unit = new DomainUnit("...", '.');
Assert.That(unit.FullName, Is.EqualTo("..."));
Assert.That(unit.TopDomain, Is.Empty);
Assert.That(unit.SubDomain, Is.Empty);
Assert.That(unit.HasSubDomain, Is.False);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ecc6823b62f94fd3a910f5a885a201dc
timeCreated: 1606658361

View File

@ -1,9 +1,10 @@
using System.Collections; using System.Collections;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using NUnit.Framework; using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class HashSetDependencyNodeTest { public class HashSetDependencyNodeTest {
[Test] [Test]

View File

@ -1,12 +1,13 @@
using System.Collections; using System.Collections;
using System.Linq; using System.Linq;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode.Sort; using AsmdefHelper.DependencyGraph.Editor.DependencyNode.Sort;
using NUnit.Framework; using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class LinerSortStrategyTest { public class LinerSortStrategyTest {
const float d = 10.0F; const float d = 10.0F;
const float w = 10.0F; const float w = 10.0F;

View File

@ -4,7 +4,7 @@ using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class NodeGridTest { public class NodeGridTest {
[Test] [Test]

View File

@ -1,10 +1,11 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using NUnit.Framework; using NUnit.Framework;
using UnityEngine; using UnityEngine;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class NodeIdTest { public class NodeIdTest {
[Test] [Test]
public void TestNodeIdValue() { public void TestNodeIdValue() {

View File

@ -1,10 +1,11 @@
using System.Collections; using System.Collections;
using System.Linq; using System.Linq;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
using NUnit.Framework; using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class NodeProcessorTest { public class NodeProcessorTest {
[SetUp] [SetUp]

View File

@ -2,8 +2,9 @@ using System.Collections;
using NUnit.Framework; using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class NodeProfileTest { public class NodeProfileTest {
[Test] [Test]

View File

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using AsmdefHelper.DependencyGraph.Editor.DependencyNode;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public static class Ids { public static class Ids {
public static readonly NodeId _0 = new NodeId(0); public static readonly NodeId _0 = new NodeId(0);

View File

@ -6,7 +6,7 @@ using UnityEditor;
using UnityEngine; using UnityEngine;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class RandomSortStrategyTest { public class RandomSortStrategyTest {
const float d = 10.0F; const float d = 10.0F;
const float w = 10.0F; const float w = 10.0F;

View File

@ -5,7 +5,7 @@ using NUnit.Framework;
using UnityEditor; using UnityEditor;
using UnityEngine.TestTools; using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.DependencyNode.Tests { namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class SquareValueProviderTest { public class SquareValueProviderTest {
[Test] [Test]

View File

@ -0,0 +1,48 @@
using System.Collections;
using System.Linq;
using NUnit.Framework;
using UnityEditor;
using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class ToggleDictTest {
[Test]
public void TestScanUpdate() {
var dict = new ToggleDict();
var toggle0 = new ToggleMock { IsOn = false };
var toggle1 = new ToggleMock { IsOn = false };
dict.Add("key0", toggle0);
dict.Add("key1", toggle1);
toggle0.IsOn = true;
// toggleの更新が取得できるか
var updated = dict.ScanUpdate().ToArray();
Assert.That(updated.Length, Is.EqualTo(1));
var (key0, val0) = updated[0];
Assert.That(key0, Is.EqualTo("key0"));
Assert.That(val0, Is.True);
}
[Test]
public void TestTryGetToggle() {
var dict = new ToggleDict();
var toggle0 = new ToggleMock { IsOn = false };
var toggle1 = new ToggleMock { IsOn = false };
dict.Add("key0", toggle0);
dict.Add("key1", toggle1);
var ret = dict.TryGetToggle("key0", out var getToggle);
Assert.That(ret, Is.True);
Assert.That(getToggle, Is.EqualTo(toggle0));
ret = dict.TryGetToggle("key1", out getToggle);
Assert.That(ret, Is.True);
Assert.That(getToggle, Is.EqualTo(toggle1));
dict.Clear();
ret = dict.TryGetToggle("key0", out getToggle);
Assert.That(ret, Is.False);
Assert.That(getToggle, Is.Null);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d5e4669ffa314d21bd51796c7ee890f4
timeCreated: 1606750547

View File

@ -0,0 +1,25 @@
using System.Collections;
using NUnit.Framework;
using UnityEditor;
using UnityEngine.TestTools;
namespace AsmdefHelper.DependencyGraph.Editor.Tests {
public class ToggleGroupTest {
[Test]
public void TestToggleGroup() {
var toggle0 = new ToggleMock();
var toggle1 = new ToggleMock();
var toggle2 = new ToggleMock();
var toggleGroup = new ToggleGroup(toggle0, new[] { toggle1, toggle2 });
toggleGroup.IsOn = true;
toggle0.IsOn = true;
Assert.That(toggle1.IsOn, Is.True);
Assert.That(toggle2.IsOn, Is.True);
}
}
public class ToggleMock : IToggle {
public bool IsOn { set; get; }
public string Name { get; set; }
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 70c75ed559ab47378f605fbf1b75c85f
timeCreated: 1606747443

View File

@ -1,361 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 705507994}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 12
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_LightingSettings: {fileID: 1490641308}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 705507995}
- component: {fileID: 705507994}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &705507994
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &963194225
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 963194228}
- component: {fileID: 963194227}
- component: {fileID: 963194226}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &963194226
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
--- !u!20 &963194227
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &963194228
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!850595691 &1490641308
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Settings.lighting
serializedVersion: 2
m_GIWorkflowMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 1
m_BakeBackend: 1
m_LightmapMaxSize: 1024
m_BakeResolution: 40
m_Padding: 2
m_TextureCompression: 1
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 2
m_LightmapsBakeMode: 1
m_FilterMode: 1
m_LightmapParameters: {fileID: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRRussianRouletteStartBounce: 2
m_PVREnvironmentMIS: 0
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 3343c43624a31f447a1961156a2cac6e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 07e92c78d576a8a458ce4a298eeb512d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,17 +0,0 @@
{
"name": "AsmdefHelper.SyncSolution.Editor",
"references": [
"GUID:211243abc45174c45b3a6c275ea126b9"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: dcfd308825181f346bc76cac8ae79330
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,57 +0,0 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using AsmdefHelper.UnityInternal;
// https://forum.unity.com/threads/solved-unity-not-generating-sln-file-from-assets-open-c-project.538487/
// Thank you Flexford!
namespace AsmdefHelper.SyncSolution.Editor {
public static class SyncSolutionUtilities {
[MenuItem("AsmdefHelper/Sync C# Solution", priority = 3000)]
public static void Sync() {
Sync(true);
}
static void Sync(bool logsEnabled) {
CleanOldFiles(logsEnabled);
Call_SyncSolution(logsEnabled);
Call_SynchronizerSync(logsEnabled);
}
static void CleanOldFiles(bool logsEnabled) {
var assetsDirectoryInfo = new DirectoryInfo(Application.dataPath);
var projectDirectoryInfo = assetsDirectoryInfo.Parent;
var files = GetFilesByExtensions(projectDirectoryInfo, "*.sln", "*.csproj");
foreach (var file in files) {
if (logsEnabled) {
Debug.Log($"Remove old solution file: {file.Name}");
}
file.Delete();
}
}
static void Call_SyncSolution(bool logsEnabled) {
if (logsEnabled) {
Debug.Log($"Coll method: SyncVS.Sync()");
}
SolutionSynchronizerWrapper.SyncSolution();
}
static void Call_SynchronizerSync(bool logsEnabled) {
if (logsEnabled) {
Debug.Log($"Coll method: SyncVS.Synchronizer.Sync()");
}
SolutionSynchronizerWrapper.SynchronizerSync();
}
static IEnumerable<FileInfo> GetFilesByExtensions(DirectoryInfo dir, params string[] extensions) {
extensions = extensions ?? new[] { "*" };
var files = Enumerable.Empty<FileInfo>();
return extensions.Aggregate(files, (current, ext) => current.Concat(dir.GetFiles(ext)));
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: e5785f4c5d9ed634799d54e96aabf408
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,5 @@
using UnityEditor; using UnityEditor;
using UnityEditor.Experimental.AssetImporters;
namespace AsmdefHelper.UnityInternal { namespace AsmdefHelper.UnityInternal {
public class InspectorWindowWrapper : EditorWindow{ public class InspectorWindowWrapper : EditorWindow{
@ -17,7 +17,11 @@ namespace AsmdefHelper.UnityInternal {
public void AllApply() { public void AllApply() {
foreach (var editor in inspectorWindow.tracker.activeEditors) { foreach (var editor in inspectorWindow.tracker.activeEditors) {
var assetImporterEditor = editor as AssetImporterEditor; #if UNITY_2021_1_OR_NEWER
var assetImporterEditor = editor as UnityEditor.AssetImporters.AssetImporterEditor;
#else
var assetImporterEditor = editor as UnityEditor.Experimental.AssetImporters.AssetImporterEditor;
#endif
if (assetImporterEditor != null && assetImporterEditor.HasModified()) { if (assetImporterEditor != null && assetImporterEditor.HasModified()) {
assetImporterEditor.ApplyAndImport(); assetImporterEditor.ApplyAndImport();

View File

@ -1,22 +0,0 @@
using UnityEditor;
using UnityEditor.VisualStudioIntegration;
namespace AsmdefHelper.UnityInternal {
public static class SolutionSynchronizerWrapper {
static readonly SolutionSynchronizer synchronizer;
static SolutionSynchronizerWrapper() {
synchronizer = SyncVS.Synchronizer;
}
public static void SyncSolution() {
SyncVS.SyncSolution();
}
public static void SynchronizerSync() {
synchronizer?.Sync();
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: aeb995b6396143f58028eb4aa639c7c4
timeCreated: 1586952223

View File

@ -1,7 +1,7 @@
{ {
"name": "dev.n5y.asmdefhelper", "name": "dev.n5y.asmdefhelper",
"displayName": "AsmdefHelper", "displayName": "AsmdefHelper",
"version": "0.3.0", "version": "0.5.3",
"unity": "2019.3", "unity": "2019.3",
"description": "Unity assembly definition utilities.", "description": "Unity assembly definition utilities.",
"keywords": ["asmdef", "editor"], "keywords": ["asmdef", "editor"],

View File

@ -1,8 +1,8 @@
{ {
"dependencies": { "dependencies": {
"com.unity.ide.rider": "1.2.1", "com.unity.ide.rider": "3.0.9",
"com.unity.ide.visualstudio": "2.0.2", "com.unity.ide.visualstudio": "2.0.12",
"com.unity.test-framework": "1.1.16", "com.unity.test-framework": "1.1.29",
"com.unity.modules.ai": "1.0.0", "com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0", "com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0", "com.unity.modules.animation": "1.0.0",

View File

@ -1,34 +1,36 @@
{ {
"dependencies": { "dependencies": {
"com.unity.ext.nunit": { "com.unity.ext.nunit": {
"version": "1.0.0", "version": "1.0.6",
"depth": 1, "depth": 1,
"source": "registry", "source": "registry",
"dependencies": {}, "dependencies": {},
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.ide.rider": { "com.unity.ide.rider": {
"version": "1.2.1", "version": "3.0.9",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.test-framework": "1.1.1" "com.unity.ext.nunit": "1.0.6"
}, },
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.ide.visualstudio": { "com.unity.ide.visualstudio": {
"version": "2.0.2", "version": "2.0.12",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.16",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.ext.nunit": "1.0.0", "com.unity.test-framework": "1.1.9"
},
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.29",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ext.nunit": "1.0.6",
"com.unity.modules.imgui": "1.0.0", "com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0" "com.unity.modules.jsonserialize": "1.0.0"
}, },

View File

@ -0,0 +1,35 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!387306366 &1
MemorySettings:
m_ObjectHideFlags: 0
m_EditorMemorySettings:
m_MainAllocatorBlockSize: -1
m_ThreadAllocatorBlockSize: -1
m_MainGfxBlockSize: -1
m_ThreadGfxBlockSize: -1
m_CacheBlockSize: -1
m_TypetreeBlockSize: -1
m_ProfilerBlockSize: -1
m_ProfilerEditorBlockSize: -1
m_BucketAllocatorGranularity: -1
m_BucketAllocatorBucketsCount: -1
m_BucketAllocatorBlockSize: -1
m_BucketAllocatorBlockCount: -1
m_ProfilerBucketAllocatorGranularity: -1
m_ProfilerBucketAllocatorBucketsCount: -1
m_ProfilerBucketAllocatorBlockSize: -1
m_ProfilerBucketAllocatorBlockCount: -1
m_TempAllocatorSizeMain: -1
m_JobTempAllocatorBlockSize: -1
m_BackgroundJobTempAllocatorBlockSize: -1
m_JobTempAllocatorReducedBlockSize: -1
m_TempAllocatorSizeGIBakingWorker: -1
m_TempAllocatorSizeNavMeshWorker: -1
m_TempAllocatorSizeAudioWorker: -1
m_TempAllocatorSizeCloudWorker: -1
m_TempAllocatorSizeGfx: -1
m_TempAllocatorSizeJobWorker: -1
m_TempAllocatorSizeBackgroundWorker: -1
m_TempAllocatorSizePreloadManager: -1
m_PlatformMemorySettings: {}

View File

@ -1,2 +1,2 @@
m_EditorVersion: 2020.1.6f1 m_EditorVersion: 2021.2.8f1
m_EditorVersionWithRevision: 2020.1.6f1 (fc477ca6df10) m_EditorVersionWithRevision: 2021.2.8f1 (d0e5f0a7b06a)

View File

View File

@ -6,6 +6,13 @@ Unity assembly definition utilities.
This library solve inconvenience of assembly definition on unity. This library solve inconvenience of assembly definition on unity.
### install via upm
Please add this line to `dependencies` of `Packages/manifest.json`.
```
"dev.n5y.asmdefhelper": "https://git.roseapollo.com/rose/AsmdefHelper.git?path=Assets"
```
## Dependency Graph ## Dependency Graph
Unity assembly definition viewer. Unity assembly definition viewer.
@ -14,10 +21,12 @@ Unity assembly definition viewer.
Show assembly definition referances in your project like this. Show assembly definition referances in your project like this.
<img src="https://user-images.githubusercontent.com/15327448/79340184-e8f44080-7f64-11ea-87f9-3ec90f9c5fa5.png" width="450" /> <img src="https://user-images.githubusercontent.com/15327448/100633752-cdae3800-3371-11eb-9729-dfb8c4fd3412.png" width="580" />
You need to organize the nodes by yourself. You need to organize the nodes by yourself.
You can toggle node appear/disappear.
## Multiple Edit ## Multiple Edit
Open multiple assembly definition inspector views for parallel editing. Open multiple assembly definition inspector views for parallel editing.
@ -30,15 +39,6 @@ Open multiple assembly definition inspector views for parallel editing.
<img src="https://user-images.githubusercontent.com/15327448/79342775-813ff480-7f68-11ea-851d-3e93b5948c0b.gif" width="450" /> <img src="https://user-images.githubusercontent.com/15327448/79342775-813ff480-7f68-11ea-851d-3e93b5948c0b.gif" width="450" />
## Sync Solution
Refresh .sln/.csproj in your project.
(menu) > [AsmdefHelper] > [Sync C# Solution]
I referred to this: [[SOLVED] Unity not generating .sln file from Assets > Open C# Project
](https://forum.unity.com/threads/solved-unity-not-generating-sln-file-from-assets-open-c-project.538487/)
## Compile Locker ## Compile Locker
Lock unity editor compile to edit an asmdef. Lock unity editor compile to edit an asmdef.
@ -70,7 +70,7 @@ And you can also rename an asmdef by one action.
___ ___
## Environment ## Environment
Unity 2020.1.6f1 Unity 2021.2.8f1
This library use unity internal class, so may be not work (or couse build error) depending your unity vresion. This library use unity internal class, so may be not work (or couse build error) depending your unity vresion.

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.UIElements.Debugger" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" /> <xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" />
<xs:import schemaLocation="UnityEditor.PackageManager.UI.xsd" namespace="UnityEditor.PackageManager.UI" /> <xs:import schemaLocation="UnityEditor.PackageManager.UI.xsd" namespace="UnityEditor.PackageManager.UI" />
<xs:import schemaLocation="UnityEditor.UIElements.xsd" namespace="UnityEditor.UIElements" /> <xs:import schemaLocation="UnityEditor.UIElements.xsd" namespace="UnityEditor.UIElements" />
<xs:import schemaLocation="UnityEditor.UIElements.Debugger.xsd" namespace="UnityEditor.UIElements.Debugger" /> <xs:import schemaLocation="UnityEditor.UIElements.Debugger.xsd" namespace="UnityEditor.UIElements.Debugger" />
<xs:import schemaLocation="UnityEditor.Experimental.GraphView.xsd" namespace="UnityEditor.Experimental.GraphView" />
</xs:schema> </xs:schema>

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" targetNamespace="UnityEditor.Experimental.GraphView" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" />
<xs:complexType name="PillType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="" name="view-data-key" type="xs:string" use="optional" />
<xs:attribute default="Position" name="picking-mode" type="engine:VisualElement_picking-mode_Type" use="optional" />
<xs:attribute default="" name="tooltip" type="xs:string" use="optional" />
<xs:attribute default="None" name="usage-hints" type="engine:VisualElement_usage-hints_Type" use="optional" />
<xs:attribute default="0" name="tabindex" type="xs:int" use="optional" />
<xs:attribute default="false" name="focusable" type="xs:boolean" use="optional" />
<xs:attribute default="" name="class" type="xs:string" use="optional" />
<xs:attribute default="" name="content-container" type="xs:string" use="optional" />
<xs:attribute default="" name="style" type="xs:string" use="optional" />
<xs:attribute default="false" name="highlighted" type="xs:boolean" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Pill" substitutionGroup="engine:VisualElement" type="PillType" />
<xs:complexType name="ResizableElementType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="" name="view-data-key" type="xs:string" use="optional" />
<xs:attribute default="Position" name="picking-mode" type="engine:VisualElement_picking-mode_Type" use="optional" />
<xs:attribute default="" name="tooltip" type="xs:string" use="optional" />
<xs:attribute default="None" name="usage-hints" type="engine:VisualElement_usage-hints_Type" use="optional" />
<xs:attribute default="0" name="tabindex" type="xs:int" use="optional" />
<xs:attribute default="false" name="focusable" type="xs:boolean" use="optional" />
<xs:attribute default="" name="class" type="xs:string" use="optional" />
<xs:attribute default="" name="content-container" type="xs:string" use="optional" />
<xs:attribute default="" name="style" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ResizableElement" substitutionGroup="engine:VisualElement" type="ResizableElementType" />
<xs:complexType name="StickyNoteType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="" name="view-data-key" type="xs:string" use="optional" />
<xs:attribute default="Position" name="picking-mode" type="engine:VisualElement_picking-mode_Type" use="optional" />
<xs:attribute default="" name="tooltip" type="xs:string" use="optional" />
<xs:attribute default="None" name="usage-hints" type="engine:VisualElement_usage-hints_Type" use="optional" />
<xs:attribute default="0" name="tabindex" type="xs:int" use="optional" />
<xs:attribute default="false" name="focusable" type="xs:boolean" use="optional" />
<xs:attribute default="" name="class" type="xs:string" use="optional" />
<xs:attribute default="" name="content-container" type="xs:string" use="optional" />
<xs:attribute default="" name="style" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="StickyNote" substitutionGroup="engine:VisualElement" type="StickyNoteType" />
</xs:schema>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.UIElements.Debugger" elementFormDefault="qualified" targetNamespace="UnityEditor.PackageManager.UI" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" targetNamespace="UnityEditor.PackageManager.UI" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" /> <xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" />
<xs:complexType name="AlertType"> <xs:complexType name="AlertType">
<xs:complexContent mixed="false"> <xs:complexContent mixed="false">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.UIElements.Debugger" elementFormDefault="qualified" targetNamespace="UnityEditor.UIElements.Debugger" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" targetNamespace="UnityEditor.UIElements.Debugger" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" /> <xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" />
<xs:complexType name="EventTypeSelectFieldType"> <xs:complexType name="EventTypeSelectFieldType">
<xs:complexContent mixed="false"> <xs:complexContent mixed="false">
@ -23,5 +23,5 @@
</xs:restriction> </xs:restriction>
</xs:complexContent> </xs:complexContent>
</xs:complexType> </xs:complexType>
<xs:element name="EventTypeSelectField" substitutionGroup="engine:VisualElement" type="EventTypeSelectFieldType" /> <xs:element name="EventTypeSelectField" substitutionGroup="engine:VisualElement" xmlns:q1="UnityEditor.UIElements.Debugger" type="q1:EventTypeSelectFieldType" />
</xs:schema> </xs:schema>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.UIElements.Debugger" elementFormDefault="qualified" targetNamespace="UnityEditor.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" targetNamespace="UnityEditor.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" /> <xs:import schemaLocation="UnityEngine.UIElements.xsd" namespace="UnityEngine.UIElements" />
<xs:simpleType name="PropertyControl_value-type_Type"> <xs:simpleType name="PropertyControl_value-type_Type">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.UIElements.Debugger" elementFormDefault="qualified" targetNamespace="UnityEngine.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:editor="UnityEditor.UIElements" xmlns:engine="UnityEngine.UIElements" xmlns="UnityEditor.Experimental.GraphView" elementFormDefault="qualified" targetNamespace="UnityEngine.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="UXMLType"> <xs:complexType name="UXMLType">
<xs:complexContent mixed="false"> <xs:complexContent mixed="false">
<xs:restriction base="xs:anyType"> <xs:restriction base="xs:anyType">

View File

@ -0,0 +1,689 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_PixelRect:
serializedVersion: 2
x: 0
y: 45
width: 2560
height: 1391
m_ShowMode: 4
m_Title:
m_RootView: {fileID: 6}
m_MinSize: {x: 950, y: 300}
m_MaxSize: {x: 10000, y: 10000}
--- !u!114 &2
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 9}
- {fileID: 3}
m_Position:
serializedVersion: 2
x: 0
y: 30
width: 2560
height: 1341
m_MinSize: {x: 683, y: 492}
m_MaxSize: {x: 14004, y: 14042}
vertical: 0
controlID: 615
--- !u!114 &3
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 2041
y: 0
width: 519
height: 1341
m_MinSize: {x: 277, y: 71}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 14}
m_Panes:
- {fileID: 14}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &4
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 505
height: 811
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 15}
m_Panes:
- {fileID: 15}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &5
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 811
width: 2041
height: 530
m_MinSize: {x: 232, y: 271}
m_MaxSize: {x: 10002, y: 10021}
m_ActualView: {fileID: 13}
m_Panes:
- {fileID: 13}
- {fileID: 18}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 7}
- {fileID: 2}
- {fileID: 8}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 2560
height: 1391
m_MinSize: {x: 950, y: 300}
m_MaxSize: {x: 10000, y: 10000}
--- !u!114 &7
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 2560
height: 30
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
m_LastLoadedLayoutName: Default
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 1371
width: 2560
height: 20
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
--- !u!114 &9
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 10}
- {fileID: 5}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 2041
height: 1341
m_MinSize: {x: 406, y: 492}
m_MaxSize: {x: 10002, y: 14042}
vertical: 1
controlID: 547
--- !u!114 &10
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 4}
- {fileID: 11}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 2041
height: 811
m_MinSize: {x: 406, y: 221}
m_MaxSize: {x: 8006, y: 4021}
vertical: 0
controlID: 548
--- !u!114 &11
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 505
y: 0
width: 1536
height: 811
m_MinSize: {x: 204, y: 221}
m_MaxSize: {x: 4004, y: 4021}
m_ActualView: {fileID: 16}
m_Panes:
- {fileID: 16}
- {fileID: 17}
- {fileID: 12}
m_Selected: 0
m_LastSelected: 1
--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 400, y: 100}
m_MaxSize: {x: 2048, y: 2048}
m_TitleContent:
m_Text: Asset Store
m_Image: {fileID: 357073275683767465, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 468
y: 181
width: 973
height: 501
--- !u!114 &13
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 230, y: 250}
m_MaxSize: {x: 10000, y: 10000}
m_TitleContent:
m_Text: Project
m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 0
y: 905
width: 2039
height: 509
m_SearchFilter:
m_NameFilter:
m_ClassNames: []
m_AssetLabels: []
m_AssetBundleNames: []
m_VersionControlStates: []
m_ReferencingInstanceIDs:
m_ScenePaths: []
m_ShowAllHits: 0
m_SearchArea: 0
m_Folders:
- Assets
m_ViewMode: 1
m_StartGridSize: 64
m_LastFolders:
- Assets
m_LastFoldersGridSize: -1
m_LastProjectPath: /Users/danielbrauer/Unity Projects/New Unity Project 20
m_IsLocked: 0
m_FolderTreeState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: b0230000
m_LastClickedID: 9136
m_ExpandedIDs: 00000000b023000000ca9a3bffffff7f
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_SearchString:
m_ColumnWidths: []
m_AssetTreeState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: 00000000b023000000ca9a3bffffff7f
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_SearchString:
m_ColumnWidths: []
m_ListAreaState:
m_SelectedInstanceIDs:
m_LastClickedInstanceID: 0
m_HadKeyboardFocusLastEvent: 0
m_ExpandedInstanceIDs: c6230000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 0}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_NewAssetIndexInList: -1
m_ScrollPosition: {x: 0, y: 0}
m_GridSize: 64
m_DirectoriesAreaWidth: 115
--- !u!114 &14
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 275, y: 50}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Inspector
m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 2043
y: 94
width: 517
height: 1320
m_ScrollPosition: {x: 0, y: 0}
m_InspectorMode: 0
m_PreviewResizer:
m_CachedPref: 160
m_ControlHash: -371814159
m_PrefName: Preview_InspectorPreview
m_PreviewWindow: {fileID: 0}
--- !u!114 &15
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Hierarchy
m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 0
y: 94
width: 503
height: 790
m_TreeViewState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: 00000000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 0
m_ClientGUIView: {fileID: 0}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
m_Path:
m_Icon: {fileID: 0}
m_ResourceFile:
m_SearchString:
m_ColumnWidths: []
m_ExpandedScenes: []
m_CurrenRootInstanceID: 0
m_Locked: 0
m_CurrentSortingName: TransformSorting
--- !u!114 &16
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 1
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Scene
m_Image: {fileID: 2318424515335265636, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 32
m_Pos:
serializedVersion: 2
x: 507
y: 94
width: 1532
height: 790
m_SceneLighting: 1
lastFramingTime: 0
m_2DMode: 0
m_isRotationLocked: 0
m_AudioPlay: 0
m_Position:
m_Target: {x: 0, y: 0, z: 0}
speed: 2
m_Value: {x: 0, y: 0, z: 0}
m_RenderMode: 0
m_SceneViewState:
showFog: 1
showMaterialUpdate: 0
showSkybox: 1
showFlares: 1
showImageEffects: 1
grid:
xGrid:
m_Target: 0
speed: 2
m_Value: 0
yGrid:
m_Target: 1
speed: 2
m_Value: 1
zGrid:
m_Target: 0
speed: 2
m_Value: 0
m_Rotation:
m_Target: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
speed: 2
m_Value: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
m_Size:
m_Target: 10
speed: 2
m_Value: 10
m_Ortho:
m_Target: 0
speed: 2
m_Value: 0
m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0}
m_LastSceneViewOrtho: 0
m_ReplacementShader: {fileID: 0}
m_ReplacementString:
m_LastLockedObject: {fileID: 0}
m_ViewIsLockedToObject: 0
--- !u!114 &17
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 1
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Game
m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 32
m_Pos:
serializedVersion: 2
x: 507
y: 94
width: 1532
height: 790
m_MaximizeOnPlay: 0
m_Gizmos: 0
m_Stats: 0
m_SelectedSizes: 000000000000000000000000000000000000000000000000000000000000000000000000
m_TargetDisplay: 0
m_ZoomArea:
m_HRangeLocked: 0
m_VRangeLocked: 0
m_HBaseRangeMin: -383
m_HBaseRangeMax: 383
m_VBaseRangeMin: -193.25
m_VBaseRangeMax: 193.25
m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1
m_VAllowExceedBaseRangeMax: 1
m_ScaleWithWindow: 0
m_HSlider: 0
m_VSlider: 0
m_IgnoreScrollWheelUntilClicked: 0
m_EnableMouseInput: 1
m_EnableSliderZoom: 0
m_UniformScale: 1
m_UpDirection: 1
m_DrawArea:
serializedVersion: 2
x: 0
y: 17
width: 1532
height: 773
m_Scale: {x: 2, y: 2}
m_Translation: {x: 766, y: 386.5}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
x: -383
y: -193.25
width: 766
height: 386.5
m_MinimalGUI: 1
m_defaultScale: 2
m_TargetTexture: {fileID: 0}
m_CurrentColorSpace: 1
m_LastWindowPixelSize: {x: 3064, y: 1580}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
--- !u!114 &18
MonoBehaviour:
m_ObjectHideFlags: 52
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_AutoRepaintOnSceneChange: 0
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 4000, y: 4000}
m_TitleContent:
m_Text: Console
m_Image: {fileID: 111653112392082826, guid: 0000000000000000d000000000000000,
type: 0}
m_Tooltip:
m_DepthBufferBits: 0
m_Pos:
serializedVersion: 2
x: 8
y: 718
width: 1366
height: 308