del AssetDependencyGraph
This commit is contained in:
parent
066ffea0a9
commit
1535347d45
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a359b65f33dc9df43950bf68bd99b6ee
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "AssetDependencyGraph-Editor",
|
||||
"references": [],
|
||||
"optionalUnityReferences": [],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": []
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f6edbbfd6f04b1479b191b629a0421f
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9303f9c952516f34cbc668b8d9217ee7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,242 +0,0 @@
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using MongoDB.Driver;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace AssetDependencyGraph
|
||||
{
|
||||
[BsonIgnoreExtraElements]
|
||||
public class AssetIdentify
|
||||
{
|
||||
public string Path;
|
||||
public string AssetType;
|
||||
[AllowNull]
|
||||
public string Guid;
|
||||
[AllowNull]
|
||||
public string Md5;
|
||||
}
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public class AssetNode
|
||||
{
|
||||
public AssetIdentify Self;
|
||||
public string AssetType;
|
||||
public HashSet<AssetIdentify> Dependencies = new();
|
||||
public HashSet<AssetIdentify> Dependent = new();
|
||||
}
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public sealed class FolderNode : AssetNode
|
||||
{
|
||||
}
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public sealed class PackageNode : AssetNode
|
||||
{
|
||||
}
|
||||
|
||||
public class AssetDependencyGraphDB
|
||||
{
|
||||
MongoClient client;
|
||||
IMongoCollection<FolderNode> FolderNodes;
|
||||
IMongoCollection<PackageNode> PackageNodes;
|
||||
IMongoCollection<AssetNode> AssetNodes;
|
||||
Dictionary<string, AssetNode> findCacheDic = new();
|
||||
|
||||
public AssetDependencyGraphDB(string user, string passwd, string ip)
|
||||
{
|
||||
MongoClientSettings settings;
|
||||
if(string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(ip))
|
||||
{
|
||||
settings = MongoClientSettings.FromUrl(new MongoUrl($"mongodb://{ip}:27017/"));
|
||||
}
|
||||
else
|
||||
{
|
||||
settings = MongoClientSettings.FromUrl(new MongoUrl($"mongodb://{user}:{passwd}@{ip}:27017/"));
|
||||
}
|
||||
|
||||
settings.ConnectTimeout = TimeSpan.FromSeconds(5);
|
||||
settings.MinConnectionPoolSize = 1;
|
||||
settings.MaxConnectionPoolSize = 25;
|
||||
client = new MongoClient(settings);
|
||||
var db = client.GetDatabase("assetgraph");
|
||||
FolderNodes = db.GetCollection<FolderNode>("folder_nodes");
|
||||
PackageNodes = db.GetCollection<PackageNode>("package_nodes");
|
||||
AssetNodes = db.GetCollection<AssetNode>("asset_nodes");
|
||||
}
|
||||
|
||||
public void Clean()
|
||||
{
|
||||
client.DropDatabase("assetgraph");
|
||||
var db = client.GetDatabase("assetgraph");
|
||||
FolderNodes = db.GetCollection<FolderNode>("folder_nodes");
|
||||
PackageNodes = db.GetCollection<PackageNode>("package_nodes");
|
||||
AssetNodes = db.GetCollection<AssetNode>("asset_nodes");
|
||||
}
|
||||
|
||||
public void UpdateOrInsert<T>(T node) where T : AssetNode
|
||||
{
|
||||
switch (node)
|
||||
{
|
||||
case FolderNode folderNode:
|
||||
{
|
||||
var filter = Builders<FolderNode>.Filter.And(
|
||||
Builders<FolderNode>.Filter.Eq(fn=>fn.Self.Path,node.Self.Path)
|
||||
);
|
||||
var found = FolderNodes.Find(filter);
|
||||
if (found == null || found.CountDocuments() == 0)
|
||||
{
|
||||
FolderNodes.InsertOne(folderNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = FolderNodes.UpdateOne(filter, Builders<FolderNode>.Update.Combine(
|
||||
Builders<FolderNode>.Update.Set(fn => fn.Self, folderNode.Self),
|
||||
Builders<FolderNode>.Update.Set(fn => fn.AssetType, folderNode.AssetType),
|
||||
Builders<FolderNode>.Update.Set(fn => fn.Dependencies, folderNode.Dependencies),
|
||||
Builders<FolderNode>.Update.Set(fn => fn.Dependent, folderNode.Dependent)
|
||||
));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case PackageNode packageNode:
|
||||
{
|
||||
var filter = Builders<PackageNode>.Filter.And(
|
||||
Builders<PackageNode>.Filter.Eq(fn => fn.Self.Path, node.Self.Path)
|
||||
);
|
||||
var found = PackageNodes.Find(filter);
|
||||
if (found == null || found.CountDocuments() == 0)
|
||||
{
|
||||
PackageNodes.InsertOne(packageNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = PackageNodes.UpdateOne(filter, Builders<PackageNode>.Update.Combine(
|
||||
Builders<PackageNode>.Update.Set(fn => fn.Self, packageNode.Self),
|
||||
Builders<PackageNode>.Update.Set(fn => fn.AssetType, packageNode.AssetType),
|
||||
Builders<PackageNode>.Update.Set(fn => fn.Dependencies, packageNode.Dependencies),
|
||||
Builders<PackageNode>.Update.Set(fn => fn.Dependent, packageNode.Dependent)
|
||||
));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AssetNode assetNode:
|
||||
{
|
||||
var filter = Builders<AssetNode>.Filter.And(
|
||||
Builders<AssetNode>.Filter.Eq(fn => fn.Self.Path, node.Self.Path)
|
||||
);
|
||||
var found = AssetNodes.Find(filter);
|
||||
if (found == null || found.CountDocuments() == 0)
|
||||
{
|
||||
AssetNodes.InsertOne(assetNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = AssetNodes.UpdateOne(filter, Builders<AssetNode>.Update.Combine(
|
||||
Builders<AssetNode>.Update.Set(fn => fn.Self, assetNode.Self),
|
||||
Builders<AssetNode>.Update.Set(fn => fn.AssetType, assetNode.AssetType),
|
||||
Builders<AssetNode>.Update.Set(fn => fn.Dependencies, assetNode.Dependencies),
|
||||
Builders<AssetNode>.Update.Set(fn => fn.Dependent, assetNode.Dependent)
|
||||
));
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void Delete<T>(T node) where T : AssetNode
|
||||
{
|
||||
switch (node)
|
||||
{
|
||||
case FolderNode folderNode:
|
||||
{
|
||||
var filter = Builders<FolderNode>.Filter.And(
|
||||
Builders<FolderNode>.Filter.Eq(fn => fn.Self.Path, node.Self.Path)
|
||||
);
|
||||
var found = FolderNodes.Find(filter);
|
||||
if (found != null && found.CountDocuments() == 0)
|
||||
{
|
||||
// TODO: del ref dep
|
||||
FolderNodes.DeleteOne(filter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PackageNode packageNode:
|
||||
{
|
||||
var filter = Builders<PackageNode>.Filter.And(
|
||||
Builders<PackageNode>.Filter.Eq(fn => fn.Self.Path, node.Self.Path)
|
||||
);
|
||||
var found = PackageNodes.Find(filter);
|
||||
if (found != null && found.CountDocuments() == 0)
|
||||
{
|
||||
// TODO: del ref dep
|
||||
PackageNodes.DeleteOne(filter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AssetNode assetNode:
|
||||
{
|
||||
var filter = Builders<AssetNode>.Filter.And(
|
||||
Builders<AssetNode>.Filter.Eq(fn => fn.Self.Path, node.Self.Path)
|
||||
);
|
||||
var found = AssetNodes.Find(filter);
|
||||
if (found != null && found.CountDocuments() == 0)
|
||||
{
|
||||
// TODO: del ref dep
|
||||
AssetNodes.DeleteOne(filter);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public AssetNode Find(string path)
|
||||
{
|
||||
if(findCacheDic.TryGetValue(path, out var assetNode))
|
||||
{
|
||||
return assetNode;
|
||||
}
|
||||
|
||||
var filter = Builders<AssetNode>.Filter.And(
|
||||
Builders<AssetNode>.Filter.Eq(fn => fn.Self.Path, path)
|
||||
);
|
||||
var found = AssetNodes.Find(filter);
|
||||
if (found != null && found.CountDocuments() != 0)
|
||||
{
|
||||
assetNode = found.First();
|
||||
findCacheDic[path] = assetNode;
|
||||
return assetNode;
|
||||
}
|
||||
|
||||
var filter1 = Builders<PackageNode>.Filter.And(
|
||||
Builders<PackageNode>.Filter.Eq(fn => fn.Self.Path, path)
|
||||
);
|
||||
var found1 = PackageNodes.Find(filter1);
|
||||
if (found1 != null && found1.CountDocuments() != 0)
|
||||
{
|
||||
assetNode = found1.First();
|
||||
findCacheDic[path] = assetNode;
|
||||
return assetNode;
|
||||
}
|
||||
|
||||
var filter2 = Builders<FolderNode>.Filter.And(
|
||||
Builders<FolderNode>.Filter.Eq(fn => fn.Self.Path, path)
|
||||
);
|
||||
var found2 = FolderNodes.Find(filter2);
|
||||
if (found2 != null && found2.CountDocuments() != 0)
|
||||
{
|
||||
assetNode = found2.First();
|
||||
findCacheDic[path] = assetNode;
|
||||
return assetNode;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3b678f0fc58371c4cb7735b9906443fd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,912 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Experimental.GraphView;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace AssetDependencyGraph
|
||||
{
|
||||
public class AssetGraphView : GraphView
|
||||
{
|
||||
public AssetGraphView()
|
||||
{
|
||||
SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale);
|
||||
|
||||
this.AddManipulator(new ContentDragger());
|
||||
this.AddManipulator(new SelectionDragger());
|
||||
this.AddManipulator(new RectangleSelector());
|
||||
this.AddManipulator(new FreehandSelector());
|
||||
|
||||
VisualElement background = new VisualElement
|
||||
{
|
||||
style =
|
||||
{
|
||||
backgroundColor = new Color(0.17f, 0.17f, 0.17f, 1f)
|
||||
}
|
||||
};
|
||||
Insert(0, background);
|
||||
|
||||
background.StretchToParentSize();
|
||||
}
|
||||
}
|
||||
|
||||
public class AssetGroup
|
||||
{
|
||||
public AssetNode AssetNode;
|
||||
public Group GroupNode = new Group();
|
||||
public Node MainGraphNode = new Node();
|
||||
public Rect MainGraphNodeLastPosition = new Rect();
|
||||
public List<GraphElement> AssetGraphNodes = new List<GraphElement>();
|
||||
public List<GraphElement> AssetGraphConnections = new List<GraphElement>();
|
||||
public List<Node> DependenciesForPlacement = new List<Node>();
|
||||
}
|
||||
|
||||
|
||||
public class AssetDependencyGraph : EditorWindow
|
||||
{
|
||||
private const float NodeWidth = 300.0f;
|
||||
DependencyAnalyzer da = new DependencyAnalyzer();
|
||||
AssetDependencyGraphDB db = new AssetDependencyGraphDB("", "CCS20190109", "localhost");
|
||||
|
||||
Dictionary<string, Toggle> type2Toogle = new();
|
||||
(string assetType, bool show)[] assetTypeHidenTogleItems = new[] {
|
||||
("Executable" , true), ("UnityAssembly", true), ("SourceFile", true),
|
||||
("MakeFile", true), ("DatFile", true), ("AudioClip", true),
|
||||
("VideoClip", true), ("Texture", false), ("Shader", false),
|
||||
("ComputeShader", false), ("ShaderHeader", false), ("Binary", true),
|
||||
("TextFile", true), ("Excel", true), ("UnknowFileType", false),
|
||||
};
|
||||
|
||||
Toggle AlignmentToggle;
|
||||
|
||||
private GraphView graphView;
|
||||
|
||||
private readonly List<Object> selectedObjects = new List<Object>();
|
||||
private readonly List<AssetGroup> assetGroups = new List<AssetGroup>();
|
||||
|
||||
private readonly Dictionary<string, Node> fullPathNodeLookup = new Dictionary<string, Node>();
|
||||
|
||||
[MenuItem("Window/Asset Dependency Graph")]
|
||||
public static void CreateTestGraphViewWindow()
|
||||
{
|
||||
var window = GetWindow<AssetDependencyGraph>(true);
|
||||
window.titleContent = new GUIContent("Asset Dependency Graph");
|
||||
}
|
||||
|
||||
public void OnEnable()
|
||||
{
|
||||
CreateGraph();
|
||||
}
|
||||
|
||||
public void OnDisable()
|
||||
{
|
||||
rootVisualElement.Remove(graphView);
|
||||
}
|
||||
|
||||
void CreateGraph()
|
||||
{
|
||||
graphView = new AssetGraphView
|
||||
{
|
||||
name = "Asset Dependency Graph",
|
||||
};
|
||||
|
||||
VisualElement toolbar = CreateToolbar();
|
||||
VisualElement toolbar2 = CreateFilterbar();
|
||||
|
||||
rootVisualElement.Add(toolbar);
|
||||
rootVisualElement.Add(toolbar2);
|
||||
rootVisualElement.Add(graphView);
|
||||
graphView.StretchToParentSize();
|
||||
toolbar.BringToFront();
|
||||
toolbar2.BringToFront();
|
||||
}
|
||||
|
||||
VisualElement CreateToolbar()
|
||||
{
|
||||
var toolbar = new VisualElement
|
||||
{
|
||||
style =
|
||||
{
|
||||
flexDirection = FlexDirection.Row,
|
||||
flexGrow = 0,
|
||||
backgroundColor = new Color(0.25f, 0.25f, 0.25f, 0.75f)
|
||||
}
|
||||
};
|
||||
|
||||
var options = new VisualElement
|
||||
{
|
||||
style = { alignContent = Align.Center }
|
||||
};
|
||||
|
||||
toolbar.Add(options);
|
||||
toolbar.Add(new Button(ExploreAsset)
|
||||
{
|
||||
text = "Explore Asset",
|
||||
});
|
||||
toolbar.Add(new Button(ClearGraph)
|
||||
{
|
||||
text = "Clear"
|
||||
});
|
||||
toolbar.Add(new Button(ResetGroups)
|
||||
{
|
||||
text = "Reset Groups"
|
||||
});
|
||||
toolbar.Add(new Button(ResetAllNodes)
|
||||
{
|
||||
text = "Reset Nodes"
|
||||
});
|
||||
toolbar.Add(new Button(() =>
|
||||
{
|
||||
da.Analyze(Application.dataPath);
|
||||
})
|
||||
{
|
||||
text = "Analyze Asset"
|
||||
});
|
||||
|
||||
var ts = new ToolbarSearchField();
|
||||
ts.RegisterValueChangedCallback(x =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(x.newValue))
|
||||
{
|
||||
graphView.FrameAll();
|
||||
return;
|
||||
}
|
||||
|
||||
graphView.ClearSelection();
|
||||
graphView.graphElements.ToList().ForEach(y =>
|
||||
{
|
||||
if (y is Node node && y.title.IndexOf(x.newValue, System.StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
graphView.AddToSelection(node);
|
||||
}
|
||||
});
|
||||
|
||||
graphView.FrameSelection();
|
||||
});
|
||||
toolbar.Add(ts);
|
||||
|
||||
AlignmentToggle = new Toggle();
|
||||
AlignmentToggle.text = "Horizontal Layout";
|
||||
AlignmentToggle.value = true;
|
||||
AlignmentToggle.RegisterValueChangedCallback(x =>
|
||||
{
|
||||
ResetAllNodes();
|
||||
});
|
||||
toolbar.Add(AlignmentToggle);
|
||||
|
||||
return toolbar;
|
||||
}
|
||||
|
||||
VisualElement CreateFilterbar()
|
||||
{
|
||||
var toolbar = new VisualElement
|
||||
{
|
||||
style =
|
||||
{
|
||||
flexDirection = FlexDirection.Row,
|
||||
flexGrow = 0,
|
||||
backgroundColor = new Color(0.25f, 0.25f, 0.25f, 0.75f)
|
||||
}
|
||||
};
|
||||
|
||||
var options = new VisualElement
|
||||
{
|
||||
style = { alignContent = Align.Center }
|
||||
};
|
||||
|
||||
toolbar.Add(options);
|
||||
|
||||
toolbar.Add(new Label("Filters: "));
|
||||
foreach (var pair in assetTypeHidenTogleItems)
|
||||
{
|
||||
var assetTypeTogle = new Toggle();
|
||||
assetTypeTogle.text = "Hide " + pair.assetType;
|
||||
assetTypeTogle.value = pair.show;
|
||||
assetTypeTogle.RegisterValueChangedCallback(x =>
|
||||
{
|
||||
FilterAssetGroups();
|
||||
});
|
||||
toolbar.Add(assetTypeTogle);
|
||||
type2Toogle[pair.assetType] = assetTypeTogle;
|
||||
}
|
||||
|
||||
return toolbar;
|
||||
}
|
||||
|
||||
private void ExploreAsset()
|
||||
{
|
||||
Object[] objs = Selection.objects;
|
||||
|
||||
foreach (var obj in objs)
|
||||
{
|
||||
//Prevent readding same object
|
||||
if (selectedObjects.Contains(obj))
|
||||
{
|
||||
Debug.Log("Object already loaded");
|
||||
return;
|
||||
}
|
||||
selectedObjects.Add(obj);
|
||||
|
||||
AssetGroup AssetGroup = new AssetGroup();
|
||||
AssetGroup.AssetNode = db.Find(AssetDatabase.GetAssetPath(obj).ToUniversalPath());
|
||||
assetGroups.Add(AssetGroup);
|
||||
|
||||
// assetPath will be empty if obj is null or isn't an asset (a scene object)
|
||||
if (obj == null)
|
||||
return;
|
||||
|
||||
AssetGroup.GroupNode = new Group { title = obj.name };
|
||||
|
||||
PopulateGroup(AssetGroup, obj, new Rect(10, graphView.contentRect.height / 2, 0, 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PopulateGroup(AssetGroup AssetGroup, Object obj, Rect position)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
obj = AssetDatabase.LoadMainAssetAtPath(AssetGroup.AssetNode.Self.Path);
|
||||
|
||||
if (obj == null)
|
||||
{
|
||||
Debug.Log("Object doesn't exist anymore");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
AssetGroup.MainGraphNode = CreateNode(AssetGroup, AssetGroup.AssetNode, obj, true);
|
||||
AssetGroup.MainGraphNode.userData = 0;
|
||||
AssetGroup.MainGraphNode.SetPosition(position);
|
||||
|
||||
if (!graphView.Contains(AssetGroup.GroupNode))
|
||||
{
|
||||
graphView.AddElement(AssetGroup.GroupNode);
|
||||
}
|
||||
|
||||
graphView.AddElement(AssetGroup.MainGraphNode);
|
||||
|
||||
AssetGroup.GroupNode.AddElement(AssetGroup.MainGraphNode);
|
||||
|
||||
CreateDependencyNodes(AssetGroup, AssetGroup.AssetNode, AssetGroup.MainGraphNode, AssetGroup.GroupNode, 1);
|
||||
CreateDependentNodes(AssetGroup, AssetGroup.AssetNode, AssetGroup.MainGraphNode, AssetGroup.GroupNode, -1);
|
||||
|
||||
AssetGroup.AssetGraphNodes.Add(AssetGroup.MainGraphNode);
|
||||
AssetGroup.GroupNode.capabilities &= ~Capabilities.Deletable;
|
||||
|
||||
AssetGroup.GroupNode.Focus();
|
||||
|
||||
AssetGroup.MainGraphNode.RegisterCallback<GeometryChangedEvent, AssetGroup>(
|
||||
UpdateGroupDependencyNodePlacement, AssetGroup
|
||||
);
|
||||
}
|
||||
|
||||
//Recreate the groups but use the already created groups instead of new ones
|
||||
void FilterAssetGroups()
|
||||
{
|
||||
|
||||
//first collect the main node's position and then clear the graph
|
||||
foreach (var AssetGroup in assetGroups)
|
||||
{
|
||||
AssetGroup.MainGraphNodeLastPosition = AssetGroup.MainGraphNode.GetPosition();
|
||||
}
|
||||
|
||||
fullPathNodeLookup.Clear();
|
||||
|
||||
foreach (var AssetGroup in assetGroups)
|
||||
{
|
||||
//clear the nodes and dependencies after getting the position of the main node
|
||||
CleanGroup(AssetGroup);
|
||||
|
||||
PopulateGroup(AssetGroup, null, AssetGroup.MainGraphNodeLastPosition);
|
||||
}
|
||||
}
|
||||
|
||||
void CleanGroup(AssetGroup assetGroup)
|
||||
{
|
||||
if (assetGroup.AssetGraphConnections.Count > 0)
|
||||
{
|
||||
foreach (var edge in assetGroup.AssetGraphConnections)
|
||||
{
|
||||
graphView.RemoveElement(edge);
|
||||
}
|
||||
}
|
||||
assetGroup.AssetGraphConnections.Clear();
|
||||
|
||||
foreach (var node in assetGroup.AssetGraphNodes)
|
||||
{
|
||||
graphView.RemoveElement(node);
|
||||
}
|
||||
assetGroup.AssetGraphNodes.Clear();
|
||||
|
||||
assetGroup.DependenciesForPlacement.Clear();
|
||||
}
|
||||
|
||||
private void CreateDependencyNodes(AssetGroup assetGroup, AssetNode asssetNode, Node selfGraphNode, Group groupGraphNode, int depth)
|
||||
{
|
||||
foreach (var dependAssetId in asssetNode.Dependencies)
|
||||
{
|
||||
AssetNode dependAssetNode = db.Find(dependAssetId.Path);
|
||||
var typeName = dependAssetNode.AssetType;
|
||||
//filter out selected asset types
|
||||
if (FilterType(typeName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Node dependGraphNode = CreateNode(assetGroup, dependAssetNode, AssetDatabase.LoadMainAssetAtPath(dependAssetId.Path.ToUnityRelatePath()), false);
|
||||
|
||||
if (!assetGroup.AssetGraphNodes.Contains(dependGraphNode))
|
||||
{
|
||||
dependGraphNode.userData = depth;
|
||||
}
|
||||
|
||||
//CreateDependencyNodes(assetGroup, dependAssetNode, dependGraphNode, groupGraphNode, depth + 1);
|
||||
|
||||
//if the node doesnt exists yet, put it in the group
|
||||
if (!graphView.Contains(dependGraphNode))
|
||||
{
|
||||
graphView.AddElement(dependGraphNode);
|
||||
|
||||
assetGroup.DependenciesForPlacement.Add(dependGraphNode);
|
||||
groupGraphNode.AddElement(dependGraphNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: if it already exists, put it in a separate group for shared assets
|
||||
//Check if the dependencyNode is in the same group or not
|
||||
//if it's a different group move it to a new shared group
|
||||
/*
|
||||
if (SharedToggle.value) {
|
||||
if (!assetGroup.m_AssetNodes.Contains(dependencyNode)) {
|
||||
if (assetGroup.SharedGroup == null) {
|
||||
assetGroup.SharedGroup = new AssetGroup();
|
||||
|
||||
AssetGroups.Add(assetGroup.SharedGroup);
|
||||
assetGroup.SharedGroup.assetPath = assetGroup.assetPath;
|
||||
|
||||
assetGroup.SharedGroup.groupNode = new Group { title = "Shared Group" };
|
||||
|
||||
assetGroup.SharedGroup.mainNode = dependencyNode;
|
||||
assetGroup.SharedGroup.mainNode.userData = 0;
|
||||
}
|
||||
|
||||
if (!m_GraphView.Contains(assetGroup.SharedGroup.groupNode)) {
|
||||
m_GraphView.AddElement(assetGroup.SharedGroup.groupNode);
|
||||
}
|
||||
|
||||
//add the node to the group and remove it from the previous group
|
||||
assetGroup.m_AssetNodes.Remove(dependencyNode);
|
||||
//assetGroup.groupNode.RemoveElement(dependencyNode);
|
||||
assetGroup.m_DependenciesForPlacement.Remove(dependencyNode);
|
||||
|
||||
assetGroup.SharedGroup.m_DependenciesForPlacement.Add(dependencyNode);
|
||||
|
||||
if (!assetGroup.SharedGroup.groupNode.ContainsElement(dependencyNode)) {
|
||||
assetGroup.SharedGroup.groupNode.AddElement(dependencyNode);
|
||||
}
|
||||
|
||||
assetGroup.SharedGroup.m_AssetNodes.Add(dependencyNode);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
Edge edge = CreateEdge(dependGraphNode, selfGraphNode);
|
||||
|
||||
assetGroup.AssetGraphConnections.Add(edge);
|
||||
assetGroup.AssetGraphNodes.Add(dependGraphNode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void CreateDependentNodes(AssetGroup assetGroup, AssetNode asssetNode, Node selfGraphNode, Group groupGraphNode, int depth)
|
||||
{
|
||||
foreach (var dependAssetId in asssetNode.Dependent)
|
||||
{
|
||||
AssetNode dependAssetNode = db.Find(dependAssetId.Path);
|
||||
var typeName = dependAssetNode.AssetType;
|
||||
//filter out selected asset types
|
||||
if (FilterType(typeName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Node dependentGraphNode = CreateNode(assetGroup, dependAssetNode, AssetDatabase.LoadMainAssetAtPath(dependAssetId.Path.ToUnityRelatePath()), false);
|
||||
|
||||
if (!assetGroup.AssetGraphNodes.Contains(dependentGraphNode))
|
||||
{
|
||||
dependentGraphNode.userData = depth;
|
||||
}
|
||||
|
||||
//CreateDependencyNodes(assetGroup, dependAssetNode, dependGraphNode, groupGraphNode, depth - 1);
|
||||
|
||||
//if the node doesnt exists yet, put it in the group
|
||||
if (!graphView.Contains(dependentGraphNode))
|
||||
{
|
||||
graphView.AddElement(dependentGraphNode);
|
||||
|
||||
assetGroup.DependenciesForPlacement.Add(dependentGraphNode);
|
||||
groupGraphNode.AddElement(dependentGraphNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: if it already exists, put it in a separate group for shared assets
|
||||
//Check if the dependencyNode is in the same group or not
|
||||
//if it's a different group move it to a new shared group
|
||||
/*
|
||||
if (SharedToggle.value) {
|
||||
if (!assetGroup.m_AssetNodes.Contains(dependencyNode)) {
|
||||
if (assetGroup.SharedGroup == null) {
|
||||
assetGroup.SharedGroup = new AssetGroup();
|
||||
|
||||
AssetGroups.Add(assetGroup.SharedGroup);
|
||||
assetGroup.SharedGroup.assetPath = assetGroup.assetPath;
|
||||
|
||||
assetGroup.SharedGroup.groupNode = new Group { title = "Shared Group" };
|
||||
|
||||
assetGroup.SharedGroup.mainNode = dependencyNode;
|
||||
assetGroup.SharedGroup.mainNode.userData = 0;
|
||||
}
|
||||
|
||||
if (!m_GraphView.Contains(assetGroup.SharedGroup.groupNode)) {
|
||||
m_GraphView.AddElement(assetGroup.SharedGroup.groupNode);
|
||||
}
|
||||
|
||||
//add the node to the group and remove it from the previous group
|
||||
assetGroup.m_AssetNodes.Remove(dependencyNode);
|
||||
//assetGroup.groupNode.RemoveElement(dependencyNode);
|
||||
assetGroup.m_DependenciesForPlacement.Remove(dependencyNode);
|
||||
|
||||
assetGroup.SharedGroup.m_DependenciesForPlacement.Add(dependencyNode);
|
||||
|
||||
if (!assetGroup.SharedGroup.groupNode.ContainsElement(dependencyNode)) {
|
||||
assetGroup.SharedGroup.groupNode.AddElement(dependencyNode);
|
||||
}
|
||||
|
||||
assetGroup.SharedGroup.m_AssetNodes.Add(dependencyNode);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
Edge edge = CreateEdge(selfGraphNode, dependentGraphNode);
|
||||
|
||||
assetGroup.AssetGraphConnections.Add(edge);
|
||||
assetGroup.AssetGraphNodes.Add(dependentGraphNode);
|
||||
}
|
||||
}
|
||||
|
||||
Edge CreateEdge(Node dependencyNode, Node parentNode)
|
||||
{
|
||||
Edge edge = new Edge
|
||||
{
|
||||
input = dependencyNode.inputContainer[0] as Port,
|
||||
output = parentNode.outputContainer[0] as Port,
|
||||
};
|
||||
edge.input?.Connect(edge);
|
||||
edge.output?.Connect(edge);
|
||||
|
||||
dependencyNode.RefreshPorts();
|
||||
|
||||
graphView.AddElement(edge);
|
||||
|
||||
edge.capabilities &= ~Capabilities.Deletable;
|
||||
|
||||
return edge;
|
||||
}
|
||||
|
||||
private Node CreateNode(AssetGroup assetGroup, AssetNode assetNode, Object obj, bool isMainNode)
|
||||
{
|
||||
Node resultNode;
|
||||
string fullPath = assetNode.Self.Path;
|
||||
if (fullPathNodeLookup.TryGetValue(fullPath, out resultNode))
|
||||
{
|
||||
//----not sure what this is, the more dependencies the further removed on the chart?
|
||||
//int currentDepth = (int)resultNode.userData;
|
||||
//resultNode.userData = currentDepth + 1;
|
||||
return resultNode;
|
||||
}
|
||||
|
||||
if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(obj, out var assetGuid, out long _))
|
||||
{
|
||||
var objNode = new Node
|
||||
{
|
||||
title = obj.name,
|
||||
style =
|
||||
{
|
||||
width = NodeWidth
|
||||
}
|
||||
};
|
||||
|
||||
objNode.extensionContainer.style.backgroundColor = new Color(0.24f, 0.24f, 0.24f, 0.8f);
|
||||
|
||||
#region Select button
|
||||
objNode.titleContainer.Add(new Button(() =>
|
||||
{
|
||||
Selection.activeObject = obj;
|
||||
EditorGUIUtility.PingObject(obj);
|
||||
})
|
||||
{
|
||||
style =
|
||||
{
|
||||
height = 16.0f,
|
||||
alignSelf = Align.Center,
|
||||
alignItems = Align.Center
|
||||
},
|
||||
text = "Select"
|
||||
});
|
||||
objNode.titleContainer.Add(new Button(() =>
|
||||
{
|
||||
// assetNode
|
||||
})
|
||||
{
|
||||
style =
|
||||
{
|
||||
height = 16.0f,
|
||||
alignSelf = Align.Center,
|
||||
alignItems = Align.Center
|
||||
},
|
||||
text = "Delete"
|
||||
});
|
||||
#endregion
|
||||
|
||||
#region Padding
|
||||
var infoContainer = new VisualElement
|
||||
{
|
||||
style =
|
||||
{
|
||||
paddingBottom = 4.0f,
|
||||
paddingTop = 4.0f,
|
||||
paddingLeft = 4.0f,
|
||||
paddingRight = 4.0f
|
||||
}
|
||||
};
|
||||
#endregion
|
||||
|
||||
#region Asset Path, removed to improve visibility with large amount of assets
|
||||
// infoContainer.Add(new Label {
|
||||
// text = assetPath,
|
||||
//#if UNITY_2019_1_OR_NEWER
|
||||
// style = { whiteSpace = WhiteSpace.Normal }
|
||||
//#else
|
||||
// style = { wordWrap = true }
|
||||
//#endif
|
||||
// });
|
||||
#endregion
|
||||
|
||||
#region Asset type
|
||||
var typeName = assetNode.AssetType;
|
||||
|
||||
var typeLabel = new Label
|
||||
{
|
||||
text = $"Type: {typeName}",
|
||||
};
|
||||
infoContainer.Add(typeLabel);
|
||||
|
||||
objNode.extensionContainer.Add(infoContainer);
|
||||
#endregion
|
||||
|
||||
var typeContainer = new VisualElement
|
||||
{
|
||||
style =
|
||||
{
|
||||
paddingBottom = 4.0f,
|
||||
paddingTop = 4.0f,
|
||||
paddingLeft = 4.0f,
|
||||
paddingRight = 4.0f,
|
||||
backgroundColor = GetColorByAssetType(typeName)
|
||||
}
|
||||
};
|
||||
|
||||
objNode.extensionContainer.Add(typeContainer);
|
||||
|
||||
#region Node Icon, replaced with color
|
||||
//Texture assetTexture = AssetPreview.GetAssetPreview(obj);
|
||||
//if (!assetTexture)
|
||||
// assetTexture = AssetPreview.GetMiniThumbnail(obj);
|
||||
|
||||
//if (assetTexture)
|
||||
//{
|
||||
// AddDivider(objNode);
|
||||
|
||||
// objNode.extensionContainer.Add(new Image
|
||||
// {
|
||||
// image = assetTexture,
|
||||
// scaleMode = ScaleMode.ScaleToFit,
|
||||
// style =
|
||||
// {
|
||||
// paddingBottom = 4.0f,
|
||||
// paddingTop = 4.0f,
|
||||
// paddingLeft = 4.0f,
|
||||
// paddingRight = 4.0f
|
||||
// }
|
||||
// });
|
||||
//}
|
||||
#endregion
|
||||
|
||||
// Ports
|
||||
var dependentAmount = 0;
|
||||
foreach (var item in assetNode.Dependent)
|
||||
{
|
||||
if (item.AssetType != "Folder")
|
||||
{
|
||||
++dependentAmount;
|
||||
}
|
||||
}
|
||||
if (assetNode.Dependent.Count > 0)
|
||||
{
|
||||
Port port = objNode.InstantiatePort(Orientation.Horizontal, Direction.Input, Port.Capacity.Single, typeof(Object));
|
||||
port.Add(new Button(() =>
|
||||
{
|
||||
CreateDependentNodes(assetGroup, assetNode, fullPathNodeLookup[fullPath], assetGroup.GroupNode, (int)fullPathNodeLookup[fullPath].userData - 1);
|
||||
EditorApplication.delayCall += () => ResetAllNodes();
|
||||
})
|
||||
{
|
||||
style =
|
||||
{
|
||||
height = 16.0f,
|
||||
alignSelf = Align.Center,
|
||||
alignItems = Align.Center
|
||||
},
|
||||
text = "展开"
|
||||
});
|
||||
port.portName = dependentAmount + "个引用";
|
||||
objNode.inputContainer.Add(port);
|
||||
}
|
||||
|
||||
var dependencyAmount = assetNode.Dependencies.Count;
|
||||
if (dependencyAmount > 0)
|
||||
{
|
||||
Port port = objNode.InstantiatePort(Orientation.Horizontal, Direction.Output, Port.Capacity.Single, typeof(Object));
|
||||
port.Add(new Button(() =>
|
||||
{
|
||||
CreateDependencyNodes(assetGroup, assetNode, fullPathNodeLookup[fullPath], assetGroup.GroupNode, (int)fullPathNodeLookup[fullPath].userData + 1);
|
||||
EditorApplication.delayCall += () => ResetAllNodes();
|
||||
|
||||
})
|
||||
{
|
||||
style =
|
||||
{
|
||||
height = 16.0f,
|
||||
alignSelf = Align.Center,
|
||||
alignItems = Align.FlexEnd
|
||||
},
|
||||
text = "展开"
|
||||
});
|
||||
port.portName = dependencyAmount + "个依赖";
|
||||
objNode.outputContainer.Add(port);
|
||||
objNode.RefreshPorts();
|
||||
}
|
||||
|
||||
resultNode = objNode;
|
||||
|
||||
resultNode.RefreshExpandedState();
|
||||
resultNode.RefreshPorts();
|
||||
resultNode.capabilities &= ~Capabilities.Deletable;
|
||||
resultNode.capabilities |= Capabilities.Collapsible;
|
||||
}
|
||||
fullPathNodeLookup[fullPath] = resultNode;
|
||||
return resultNode;
|
||||
}
|
||||
|
||||
bool FilterType(string type)
|
||||
{
|
||||
if (type2Toogle.TryGetValue(type, out var result))
|
||||
{
|
||||
return result.value;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
StyleColor GetColorByAssetType(string typeName)
|
||||
{
|
||||
switch (typeName)
|
||||
{
|
||||
case "MonoScript":
|
||||
return Color.black;
|
||||
case "Material":
|
||||
return new Color(0.1f, 0.5f, 0.1f); //green
|
||||
case "Texture2D":
|
||||
return new Color(0.5f, 0.1f, 0.1f); //red
|
||||
case "RenderTexture":
|
||||
return new Color(0.8f, 0.1f, 0.1f); //red
|
||||
case "Shader":
|
||||
return new Color(0.1f, 0.1f, 0.5f); //dark blue
|
||||
case "ComputeShader":
|
||||
return new Color(0.1f, 0.1f, 0.5f); //dark blue
|
||||
case "GameObject":
|
||||
return new Color(0f, 0.8f, 0.7f); //light blue
|
||||
case "AnimationClip":
|
||||
return new Color(1, 0.7f, 1); //pink
|
||||
case "AnimatorController":
|
||||
return new Color(1, 0.7f, 0.8f); //pink
|
||||
case "AudioClip":
|
||||
return new Color(1, 0.8f, 0); //orange
|
||||
case "AudioMixerController":
|
||||
return new Color(1, 0.8f, 0); //orange
|
||||
case "Font":
|
||||
return new Color(0.9f, 1, 0.9f); //light green
|
||||
case "TMP_FontAsset":
|
||||
return new Color(0.9f, 1, 0.9f); //light green
|
||||
case "Mesh":
|
||||
return new Color(0.5f, 0, 0.5f); //purple
|
||||
case "TerrainLayer":
|
||||
return new Color(0.5f, 0.8f, 0f); //green
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return CustomColor(typeName);
|
||||
}
|
||||
|
||||
//Add custom assets here
|
||||
StyleColor CustomColor(string assetType)
|
||||
{
|
||||
switch (assetType)
|
||||
{
|
||||
case "GearObject":
|
||||
return new Color(0.9f, 0, 0.9f); //pink
|
||||
case "TalentObject":
|
||||
return new Color(0.9f, 0, 0.9f); //
|
||||
case "AbilityInfo":
|
||||
return new Color(0.9f, 0, 0.9f); //
|
||||
case "HealthSO":
|
||||
return new Color(0.9f, 0, 0.9f); //
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//standard color
|
||||
return new Color(0.24f, 0.24f, 0.24f, 0.8f);
|
||||
}
|
||||
|
||||
private static void AddDivider(Node objNode)
|
||||
{
|
||||
var divider = new VisualElement { name = "divider" };
|
||||
divider.AddToClassList("horizontal");
|
||||
objNode.extensionContainer.Add(divider);
|
||||
}
|
||||
|
||||
private void ClearGraph()
|
||||
{
|
||||
selectedObjects.Clear();
|
||||
|
||||
foreach (var assetGroup in assetGroups)
|
||||
{
|
||||
EmptyGroup(assetGroup);
|
||||
}
|
||||
|
||||
fullPathNodeLookup.Clear();
|
||||
|
||||
assetGroups.Clear();
|
||||
}
|
||||
|
||||
void EmptyGroup(AssetGroup assetGroup)
|
||||
{
|
||||
if (assetGroup.AssetGraphConnections.Count > 0)
|
||||
{
|
||||
foreach (var edge in assetGroup.AssetGraphConnections)
|
||||
{
|
||||
graphView.RemoveElement(edge);
|
||||
}
|
||||
}
|
||||
assetGroup.AssetGraphConnections.Clear();
|
||||
|
||||
foreach (var node in assetGroup.AssetGraphNodes)
|
||||
{
|
||||
graphView.RemoveElement(node);
|
||||
}
|
||||
assetGroup.AssetGraphNodes.Clear();
|
||||
|
||||
assetGroup.DependenciesForPlacement.Clear();
|
||||
|
||||
graphView.RemoveElement(assetGroup.GroupNode);
|
||||
|
||||
assetGroup.GroupNode = null;
|
||||
}
|
||||
|
||||
private void UpdateGroupDependencyNodePlacement(GeometryChangedEvent e, AssetGroup assetGroup)
|
||||
{
|
||||
assetGroup.MainGraphNode.UnregisterCallback<GeometryChangedEvent, AssetGroup>(
|
||||
UpdateGroupDependencyNodePlacement
|
||||
);
|
||||
|
||||
ResetNodes(assetGroup);
|
||||
}
|
||||
|
||||
void ResetAllNodes()
|
||||
{
|
||||
foreach (var assetGroup in assetGroups)
|
||||
{
|
||||
ResetNodes(assetGroup);
|
||||
}
|
||||
}
|
||||
|
||||
//Reset the node positions of the given group
|
||||
void ResetNodes(AssetGroup assetGroup)
|
||||
{
|
||||
// The current y offset in per depth
|
||||
var depthOffset = new Dictionary<int, float>();
|
||||
|
||||
foreach (var node in assetGroup.DependenciesForPlacement)
|
||||
{
|
||||
int depth = (int)node.userData;
|
||||
|
||||
if (!depthOffset.ContainsKey(depth))
|
||||
depthOffset.Add(depth, 0.0f);
|
||||
|
||||
if (AlignmentToggle.value)
|
||||
{
|
||||
depthOffset[depth] += node.layout.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
depthOffset[depth] += node.layout.width;
|
||||
}
|
||||
}
|
||||
|
||||
// Move half of the node into negative y space so they're on either size of the main node in y axis
|
||||
var depths = new List<int>(depthOffset.Keys);
|
||||
foreach (int depth in depths)
|
||||
{
|
||||
if (depth == 0)
|
||||
continue;
|
||||
|
||||
float offset = depthOffset[depth];
|
||||
depthOffset[depth] = (0f - offset / 2.0f);
|
||||
}
|
||||
|
||||
Rect mainNodeRect = assetGroup.MainGraphNode.GetPosition();
|
||||
|
||||
foreach (var node in assetGroup.DependenciesForPlacement)
|
||||
{
|
||||
int depth = (int)node.userData;
|
||||
if (AlignmentToggle.value)
|
||||
{
|
||||
node.SetPosition(new Rect(mainNodeRect.x + node.layout.width * 1.5f * depth, mainNodeRect.y + depthOffset[depth], 0, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
node.SetPosition(new Rect(mainNodeRect.x + depthOffset[depth], mainNodeRect.y + node.layout.height * 1.5f * depth, 0, 0));
|
||||
}
|
||||
|
||||
if (AlignmentToggle.value)
|
||||
{
|
||||
depthOffset[depth] += node.layout.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
depthOffset[depth] += node.layout.width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//fix the position of the groups so they dont overlap
|
||||
void ResetGroups()
|
||||
{
|
||||
float y = 0;
|
||||
float x = 0;
|
||||
|
||||
foreach (var assetGroup in assetGroups)
|
||||
{
|
||||
if (AlignmentToggle.value)
|
||||
{
|
||||
Rect pos = assetGroup.GroupNode.GetPosition();
|
||||
pos.x = x;
|
||||
assetGroup.GroupNode.SetPosition(pos);
|
||||
x += assetGroup.GroupNode.GetPosition().width;
|
||||
}
|
||||
else
|
||||
{
|
||||
Rect pos = assetGroup.GroupNode.GetPosition();
|
||||
pos.y = y;
|
||||
assetGroup.GroupNode.SetPosition(pos);
|
||||
y += assetGroup.GroupNode.GetPosition().height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 43eecbcf2afaca84aa2af29388e193de
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,351 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEditor;
|
||||
|
||||
namespace AssetDependencyGraph
|
||||
{
|
||||
public static class FileExtensionHelper
|
||||
{
|
||||
public static string GetTypeByExtension(string ext)
|
||||
{
|
||||
switch (ext.ToLowerInvariant())
|
||||
{
|
||||
case ".a":
|
||||
case ".dll":
|
||||
case ".so":
|
||||
case ".exe":
|
||||
case ".dynlib":
|
||||
return "Executable";
|
||||
case ".asmdef":
|
||||
case ".asmref":
|
||||
return "UnityAssembly";
|
||||
case ".cs":
|
||||
case ".lua":
|
||||
case ".js":
|
||||
case ".ts":
|
||||
case ".java":
|
||||
case ".h":
|
||||
case ".cpp":
|
||||
case ".cxx":
|
||||
case ".mm":
|
||||
case ".py":
|
||||
case ".bat":
|
||||
case ".jar":
|
||||
case ".arr":
|
||||
case ".jslib":
|
||||
return "SourceFile";
|
||||
case ".gradle":
|
||||
return "MakeFile";
|
||||
case ".dat":
|
||||
case ".data":
|
||||
return "DatFile";
|
||||
case ".mp3":
|
||||
case ".ogg":
|
||||
case ".wav":
|
||||
return "AudioClip";
|
||||
case ".mp4":
|
||||
case ".webm":
|
||||
return "VideoClip";
|
||||
case ".mat":
|
||||
return "Material";
|
||||
case ".rendertexture":
|
||||
case ".dds":
|
||||
case ".exr":
|
||||
case ".hdr":
|
||||
case ".png":
|
||||
case ".jpg":
|
||||
case ".gif":
|
||||
case ".psd":
|
||||
case ".bmp":
|
||||
case ".tiff":
|
||||
case ".tga":
|
||||
case ".gradient":
|
||||
case ".spriteatlas":
|
||||
return "Texture";
|
||||
case ".obj":
|
||||
case ".fbx":
|
||||
case ".mesh":
|
||||
return "Mesh";
|
||||
case ".shader":
|
||||
case ".surfshader":
|
||||
case ".shadergraph":
|
||||
return "Shader";
|
||||
case ".compute":
|
||||
return "ComputeShader";
|
||||
case ".hlsl":
|
||||
case ".cginc":
|
||||
case ".shadersubgraph":
|
||||
return "ShaderHeader";
|
||||
case ".otf":
|
||||
case ".ttf":
|
||||
return "Font";
|
||||
case ".byte":
|
||||
case ".bytes":
|
||||
case ".bin":
|
||||
return "Binary";
|
||||
case ".txt":
|
||||
case ".md":
|
||||
case ".chm":
|
||||
case ".yml":
|
||||
case ".url":
|
||||
case ".json":
|
||||
case ".json5":
|
||||
case ".xml":
|
||||
case ".uxml":
|
||||
case ".nson":
|
||||
case ".config":
|
||||
case ".pdf":
|
||||
return "TextFile";
|
||||
case ".xlsx":
|
||||
case ".xls":
|
||||
return "Excel";
|
||||
default:
|
||||
return "UnknowFileType";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static bool IsPackage(string ext)
|
||||
{
|
||||
switch (ext.ToLowerInvariant())
|
||||
{
|
||||
case ".prefab":
|
||||
case ".unity":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool NeedAnalyzeDepend(string ext)
|
||||
{
|
||||
switch (ext.ToLowerInvariant())
|
||||
{
|
||||
case ".prefab":
|
||||
case ".unity":
|
||||
case ".asset":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static bool Exclude(string path) => path.EndsWith(".meta")
|
||||
|| path.EndsWith(".unitypackage")
|
||||
|| path.EndsWith(".preset")
|
||||
|| path.EndsWith(".backup")
|
||||
|| path.EndsWith(".tmp")
|
||||
|| path.EndsWith(".editor")
|
||||
|| path.EndsWith(".zip")
|
||||
|| path.EndsWith(".scenetemplate");
|
||||
}
|
||||
|
||||
public interface IDependencyAnalysis
|
||||
{
|
||||
void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result);
|
||||
|
||||
public (AssetIdentify id, AssetNode node) GetOrCreateFolderNode(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
|
||||
{
|
||||
AssetIdentify k = null;
|
||||
|
||||
foreach (var item in result.Keys)
|
||||
{
|
||||
if (item.Path == path)
|
||||
{
|
||||
k = item;
|
||||
}
|
||||
}
|
||||
|
||||
if (k == null)
|
||||
{
|
||||
k = new AssetIdentify()
|
||||
{
|
||||
Path = path,
|
||||
AssetType = "Folder",
|
||||
Guid = null,
|
||||
Md5 = null
|
||||
};
|
||||
result[k] = new FolderNode()
|
||||
{
|
||||
Self = k,
|
||||
AssetType = "Folder",
|
||||
};
|
||||
}
|
||||
|
||||
return (k, result[k]);
|
||||
}
|
||||
|
||||
public (AssetIdentify id, AssetNode node) GetOrCreateAssetNode(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
|
||||
{
|
||||
AssetIdentify k = null;
|
||||
|
||||
foreach (var item in result.Keys)
|
||||
{
|
||||
if (item.Path == path)
|
||||
{
|
||||
k = item;
|
||||
}
|
||||
}
|
||||
|
||||
if (k == null)
|
||||
{
|
||||
k = new AssetIdentify()
|
||||
{
|
||||
Path = path,
|
||||
Guid = null,
|
||||
//Md5 = Utils.Md5(path)
|
||||
};
|
||||
if (FileExtensionHelper.IsPackage(Path.GetExtension(path)))
|
||||
{
|
||||
result[k] = new PackageNode()
|
||||
{
|
||||
Self = k,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
result[k] = new AssetNode()
|
||||
{
|
||||
Self = k,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return (k, result[k]);
|
||||
}
|
||||
}
|
||||
|
||||
public class FolderDependencyAnalysis : IDependencyAnalysis
|
||||
{
|
||||
public void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
|
||||
{
|
||||
var dependencyAnalysis = (this as IDependencyAnalysis);
|
||||
var k = dependencyAnalysis.GetOrCreateFolderNode(path, result);
|
||||
foreach (string file in Directory.EnumerateFiles(path))
|
||||
{
|
||||
if (FileExtensionHelper.Exclude(file))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var p = file.ToUnityRelatePath().ToUniversalPath();
|
||||
var selfNode = result[k.id];
|
||||
var kv = dependencyAnalysis.GetOrCreateAssetNode(p, result);
|
||||
|
||||
kv.node.Dependent.Add(selfNode.Self);
|
||||
selfNode.Dependencies.Add(kv.id);
|
||||
}
|
||||
|
||||
foreach (string directory in Directory.EnumerateDirectories(path))
|
||||
{
|
||||
var p = directory.ToUnityRelatePath().ToUniversalPath();
|
||||
var selfNode = result[k.id];
|
||||
var kv = dependencyAnalysis.GetOrCreateFolderNode(p, result);
|
||||
kv.node.Dependent.Add(selfNode.Self);
|
||||
selfNode.Dependencies.Add(kv.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class UnityDependencyAnalysis2 : IDependencyAnalysis
|
||||
{
|
||||
UnityLmdb unityLmdb;
|
||||
HashSet<string> processed = new();
|
||||
public UnityDependencyAnalysis2()
|
||||
{
|
||||
unityLmdb = new UnityLmdb();
|
||||
unityLmdb.ResolveGuidPath();
|
||||
}
|
||||
|
||||
public void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
|
||||
{
|
||||
if (!processed.Add(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
var dependencyAnalysis = (this as IDependencyAnalysis);
|
||||
|
||||
var kv = dependencyAnalysis.GetOrCreateAssetNode(path, result);
|
||||
var relatePath = path.ToUnityRelatePath();
|
||||
kv.id.Guid = unityLmdb.GetGuidByPath(relatePath);
|
||||
var selfNode = kv.node;
|
||||
var ext = Path.GetExtension(path);
|
||||
var assetType = FileExtensionHelper.GetTypeByExtension(ext);
|
||||
|
||||
selfNode.AssetType = assetType;
|
||||
kv.id.AssetType = assetType;
|
||||
if (FileExtensionHelper.NeedAnalyzeDepend(ext))
|
||||
{
|
||||
var dependencies = UnityFileApi.DependencyTool.GetDependencies(path);
|
||||
for (int i = 0; i < dependencies.Count; i++)
|
||||
{
|
||||
var dep = dependencies[i].ToUnityRelatePath();
|
||||
var depkv = dependencyAnalysis.GetOrCreateAssetNode(dep, result);
|
||||
depkv.node.Dependent.Add(selfNode.Self);
|
||||
selfNode.Dependencies.Add(depkv.id);
|
||||
Analyze(dep, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class DependencyAnalyzer
|
||||
{
|
||||
private Dictionary<Predicate<string>, IDependencyAnalysis> dependencyAnalysisDic = new();
|
||||
private ConcurrentDictionary<AssetIdentify, AssetNode> assetIdentify2AssetNodeDic = new();
|
||||
private List<string> allPath = new();
|
||||
|
||||
|
||||
|
||||
public DependencyAnalyzer()
|
||||
{
|
||||
//dependencyAnalysisDic.Add(new Predicate<string>(path => !Directory.Exists(path)), new UnityDependencyAnalysis1());
|
||||
//dependencyAnalysisDic.Add(new Predicate<string>(path => !Directory.Exists(path)), new UnityDependencyAnalysis2());
|
||||
dependencyAnalysisDic.Add(new Predicate<string>(path => Directory.Exists(path)), new FolderDependencyAnalysis());
|
||||
}
|
||||
|
||||
|
||||
private void Visivt(string path)
|
||||
{
|
||||
path = path.ToUniversalPath();
|
||||
if (FileExtensionHelper.Exclude(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
allPath.Add(path);
|
||||
|
||||
}
|
||||
|
||||
public void Analyze(string rootFolder)
|
||||
{
|
||||
Stopwatch sw = Stopwatch.StartNew();
|
||||
sw.Start();
|
||||
Utils.TraverseDirectory(rootFolder, Visivt, -1);
|
||||
Parallel.ForEach(allPath, (path) =>
|
||||
{
|
||||
path = path.ToUnityRelatePath();
|
||||
foreach (var item in dependencyAnalysisDic)
|
||||
{
|
||||
if (item.Key(path))
|
||||
{
|
||||
item.Value.Analyze(path, assetIdentify2AssetNodeDic);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
sw.Stop();
|
||||
UnityEngine.Debug.Log($"分析引用耗时:{sw.ElapsedMilliseconds / 1000f}s");
|
||||
AssetDependencyGraphDB db = new AssetDependencyGraphDB("", "", "localhost");
|
||||
sw.Restart();
|
||||
db.Clean();
|
||||
Parallel.ForEach(assetIdentify2AssetNodeDic, item =>
|
||||
{
|
||||
db.UpdateOrInsert(item.Value);
|
||||
});
|
||||
sw.Stop();
|
||||
UnityEngine.Debug.Log($"更新数据库:{sw.ElapsedMilliseconds / 1000f}s");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dfb4fe91c835f1a44853adfc3644470a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,125 +0,0 @@
|
||||
using LightningDB;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetDependencyGraph
|
||||
{
|
||||
public sealed class UnityLmdb
|
||||
{
|
||||
private Dictionary<string, string> guid2Path = new();
|
||||
private Dictionary<string, string> path2Guid = new();
|
||||
private static readonly string unityPath;
|
||||
private static readonly string projPath;
|
||||
|
||||
static UnityLmdb()
|
||||
{
|
||||
var args = Environment.GetCommandLineArgs();
|
||||
unityPath = Path.GetDirectoryName(args[0]);
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
if (args[i].ToLowerInvariant() == "-projectpath")
|
||||
{
|
||||
projPath = args[i + 1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] Guid2LmdbKey(string guid)
|
||||
{
|
||||
var inputByteArray = new byte[guid.Length / 2];
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < guid.Length; i += 2)
|
||||
{
|
||||
sb.Append(guid[i + 1]);
|
||||
sb.Append(guid[i]);
|
||||
}
|
||||
guid = sb.ToString();
|
||||
for (var x = 0; x < inputByteArray.Length; x++)
|
||||
{
|
||||
inputByteArray[x] = (byte)Convert.ToInt32(guid.Substring(x * 2, 2), 16);
|
||||
}
|
||||
|
||||
return inputByteArray;
|
||||
}
|
||||
|
||||
public static string LmdbKey2Guid(byte[] bytes)
|
||||
{
|
||||
StringBuilder ret = new StringBuilder();
|
||||
for (var i = 0; i < bytes.Length; i++)
|
||||
{
|
||||
ret.AppendFormat("{0:x2}", bytes[i]);
|
||||
if (ret.Length == 32)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < ret.Length; i += 2)
|
||||
{
|
||||
var c = ret[i];
|
||||
ret[i] = ret[i + 1];
|
||||
ret[i + 1] = c;
|
||||
}
|
||||
var hex = ret.ToString();
|
||||
return hex;
|
||||
}
|
||||
|
||||
public void ResolveGuidPath()
|
||||
{
|
||||
var sourceDbPath = Path.Combine(projPath, "Library", "SourceAssetDB");
|
||||
var dbPath = Path.Combine(projPath, "Library", "SourceAssetDB1");
|
||||
File.Copy(sourceDbPath, dbPath, true);
|
||||
using var env = new LightningEnvironment(dbPath, configuration: new()
|
||||
{
|
||||
MaxDatabases = 64,
|
||||
MaxReaders = 64,
|
||||
});
|
||||
env.Open(EnvironmentOpenFlags.NoSubDir | EnvironmentOpenFlags.ReadOnly);
|
||||
using var tx = env.BeginTransaction(TransactionBeginFlags.ReadOnly);
|
||||
using (var db = tx.OpenDatabase("GuidToPath", closeOnDispose: true))
|
||||
using (var cursor = tx.CreateCursor(db))
|
||||
{
|
||||
foreach (var item in cursor.AsEnumerable())
|
||||
{
|
||||
guid2Path[LmdbKey2Guid(item.Item1.AsSpan().ToArray())] = Encoding.UTF8.GetString(item.Item2.AsSpan()).ToLowerInvariant().Trim();
|
||||
}
|
||||
}
|
||||
|
||||
using (var db = tx.OpenDatabase("PathToGuid", closeOnDispose: true))
|
||||
using (var cursor = tx.CreateCursor(db))
|
||||
{
|
||||
foreach (var item in cursor.AsEnumerable())
|
||||
{
|
||||
path2Guid[Encoding.UTF8.GetString(item.Item1.AsSpan()).ToLowerInvariant().Trim()] = LmdbKey2Guid(item.Item2.AsSpan().ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public string GetGuidByPath(string path)
|
||||
{
|
||||
if (path2Guid.ContainsKey(path))
|
||||
{
|
||||
return path2Guid[path];
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetPathByGuid(string guid)
|
||||
{
|
||||
if (guid2Path.ContainsKey(guid))
|
||||
{
|
||||
return guid2Path[guid];
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7ffc50b27ba42c94c8b2cafa818c13eb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,91 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AssetDependencyGraph
|
||||
{
|
||||
public static class Utils
|
||||
{
|
||||
static readonly string dataPath;
|
||||
static Utils()
|
||||
{
|
||||
dataPath = Application.dataPath;
|
||||
}
|
||||
public static string Md5(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileStream fs = new FileStream(filename, FileMode.Open);
|
||||
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
|
||||
byte[] retVal = md5.ComputeHash(fs);
|
||||
fs.Close();
|
||||
return BitConverter.ToString(retVal).ToLower().Replace("-", "");
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public static void TraverseDirectory(string path, Action<string> action, int depth = 1)
|
||||
{
|
||||
if(depth == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (string file in Directory.EnumerateFiles(path))
|
||||
{
|
||||
action.Invoke(file);
|
||||
}
|
||||
|
||||
foreach (string directory in Directory.EnumerateDirectories(path))
|
||||
{
|
||||
action.Invoke(directory);
|
||||
TraverseDirectory(directory, action, --depth);
|
||||
}
|
||||
}
|
||||
|
||||
public static string ToUniversalPath(this string path)
|
||||
{
|
||||
return path.Replace("\\", "/");
|
||||
}
|
||||
|
||||
public static string ToUnityRelatePath(this string path)
|
||||
{
|
||||
if(path.StartsWith(dataPath.ToUniversalPath().Replace("Assets", "")) && !path.StartsWith(dataPath.ToUniversalPath() + "/Assets"))
|
||||
{
|
||||
return path.Replace(dataPath.ToUniversalPath().Replace("Assets", ""), "");
|
||||
}
|
||||
return path.Replace(dataPath.ToUniversalPath(), "Assets");
|
||||
}
|
||||
|
||||
public static string ToUnityFullPath(this string path)
|
||||
{
|
||||
if(path.StartsWith("Packages"))
|
||||
{
|
||||
var fullPath = (dataPath.ToUniversalPath().Replace("Assets", "") + path);
|
||||
fullPath ??= (dataPath.ToUniversalPath().Replace("Assets", "Library/PackageCache") + path);
|
||||
if (!File.Exists(fullPath) && Directory.Exists(fullPath))
|
||||
{
|
||||
Debug.LogWarning($"ToUnityFullPath failure:{path}");
|
||||
}
|
||||
|
||||
return fullPath;
|
||||
}
|
||||
|
||||
return dataPath.ToUniversalPath().Replace("Assets", "") + path;
|
||||
}
|
||||
|
||||
public static string ByteString(this byte[] bytes)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (int i = 0; i < bytes.Length; i++)
|
||||
{
|
||||
stringBuilder.Append(Convert.ToString(bytes[i], 2) );
|
||||
}
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c90ae90b250ea244ca1b14d395893854
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a251feda1c6acfa418d3cb94f0255dbe
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38356707733942742b1bd8da40abed2e
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,87 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe95ecf4b38fba648b13da516d4d36b5
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,83 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f80f2e68fd0af0b4e86097f187a00ffa
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,87 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e4c5c5a6e7fdcf4a9bf7c06b691779d
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8639b566b8d0cfd4daca122ad15c9c71
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,83 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1ead4ac145c227142af0602db4c79b87
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,83 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78d79268cf082b846a2a63642acc37f4
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3de0577458e380243be22140907c0bc0
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c945cad0736669340b6639d058b729c8
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,83 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e44a450d127d0824cbc021fc238d7b80
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e1cd43f2c984df240a8c23991b2f1e1c
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,87 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 75990583b0a472b44bd9f0946b424361
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,87 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4c6f3ef996ab94842b02f3e832349bc1
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2f19ef81d4f8ae746801dadcb62225a5
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,87 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 83f2ea0e93026104faa9df07b11e4a1c
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9883f43a7e5cf0a47828e7f96db4726e
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
: Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux64: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 1
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AndroidSharedLibraryType: Executable
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
DefaultValueInitialized: true
|
||||
OS: Windows
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
AddToEmbeddedBinaries: false
|
||||
CPU: AnyCPU
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user