This commit is contained in:
StarBeats 2025-04-15 16:49:22 +08:00
parent ff3a72b4f7
commit e6105d57f4
16 changed files with 826 additions and 94 deletions

View File

@ -46,7 +46,16 @@ namespace AssetDependencyGraph
public AssetDependencyGraphDB(string user, string passwd, string ip) public AssetDependencyGraphDB(string user, string passwd, string ip)
{ {
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl($"mongodb://{user}:{passwd}@{ip}:27017/")); 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.ConnectTimeout = TimeSpan.FromSeconds(5);
settings.MinConnectionPoolSize = 1; settings.MinConnectionPoolSize = 1;
settings.MaxConnectionPoolSize = 25; settings.MaxConnectionPoolSize = 25;

View File

@ -48,14 +48,15 @@ namespace AssetDependencyGraph
{ {
private const float NodeWidth = 300.0f; private const float NodeWidth = 300.0f;
DependencyAnalyzer da = new DependencyAnalyzer(); DependencyAnalyzer da = new DependencyAnalyzer();
AssetDependencyGraphDB db = new AssetDependencyGraphDB("admin", "CCS20190109", "10.225.0.170"); AssetDependencyGraphDB db = new AssetDependencyGraphDB("", "CCS20190109", "localhost");
Dictionary<string, Toggle> type2Toogle = new(); Dictionary<string, Toggle> type2Toogle = new();
(string assetType, bool show)[] assetTypeHidenTogleItems = new[] { (string assetType, bool show)[] assetTypeHidenTogleItems = new[] {
("MonoScript", true), ("Material", false), ("Shader", true), ("Executable" , true), ("UnityAssembly", true), ("SourceFile", true),
("ComputeShader" ,true), ("AudioClip", false), ("VideoClip", false), ("MakeFile", true), ("DatFile", true), ("AudioClip", true),
("AnimationClip", false), ("Executable" , true), ("UnityAssembly", true), ("VideoClip", true), ("Texture", false), ("Shader", false),
("SourceFile", true), ("VolumeProfile", true), ("ComputeShader", false), ("ShaderHeader", false), ("Binary", true),
("TextFile", true), ("Excel", true), ("UnknowFileType", false),
}; };
Toggle AlignmentToggle; Toggle AlignmentToggle;
@ -229,7 +230,7 @@ namespace AssetDependencyGraph
selectedObjects.Add(obj); selectedObjects.Add(obj);
AssetGroup AssetGroup = new AssetGroup(); AssetGroup AssetGroup = new AssetGroup();
AssetGroup.AssetNode = db.Find(AssetDatabase.GetAssetPath(obj).ToUnityFullPath()); AssetGroup.AssetNode = db.Find(AssetDatabase.GetAssetPath(obj).ToUniversalPath());
assetGroups.Add(AssetGroup); assetGroups.Add(AssetGroup);
// assetPath will be empty if obj is null or isn't an asset (a scene object) // assetPath will be empty if obj is null or isn't an asset (a scene object)
@ -247,7 +248,7 @@ namespace AssetDependencyGraph
{ {
if (obj == null) if (obj == null)
{ {
obj = AssetDatabase.LoadMainAssetAtPath(AssetGroup.AssetNode.Self.Path.ToUnityRelatePath()); obj = AssetDatabase.LoadMainAssetAtPath(AssetGroup.AssetNode.Self.Path);
if (obj == null) if (obj == null)
{ {

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -8,11 +9,146 @@ using Object = UnityEngine.Object;
namespace AssetDependencyGraph 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 public interface IDependencyAnalysis
{ {
void Analyze(string path, Dictionary<AssetIdentify, AssetNode> result); void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result);
public (AssetIdentify id, AssetNode node) GetOrCreateFolderNode(string path, Dictionary<AssetIdentify, AssetNode> result) public (AssetIdentify id, AssetNode node) GetOrCreateFolderNode(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
{ {
AssetIdentify k = null; AssetIdentify k = null;
@ -43,7 +179,7 @@ namespace AssetDependencyGraph
return (k, result[k]); return (k, result[k]);
} }
public (AssetIdentify id, AssetNode node) GetOrCreateAssetNode(string path, Dictionary<AssetIdentify, AssetNode> result) public (AssetIdentify id, AssetNode node) GetOrCreateAssetNode(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
{ {
AssetIdentify k = null; AssetIdentify k = null;
@ -61,9 +197,9 @@ namespace AssetDependencyGraph
{ {
Path = path, Path = path,
Guid = null, Guid = null,
Md5 = Utils.Md5(path) //Md5 = Utils.Md5(path)
}; };
if (path.EndsWith(".prefab") || path.EndsWith(".unity")) if (FileExtensionHelper.IsPackage(Path.GetExtension(path)))
{ {
result[k] = new PackageNode() result[k] = new PackageNode()
{ {
@ -81,50 +217,13 @@ namespace AssetDependencyGraph
return (k, result[k]); return (k, result[k]);
} }
public bool Exclude(string path) => path.EndsWith(".meta");
public 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":
return "SourceFile";
case ".json":
case ".json5":
return "JsonFile";
case ".xml":
return "XmlFile";
case ".dat":
return "DatFile";
default:
return null;
}
}
} }
public class UnityDependencyAnalysis : IDependencyAnalysis public class UnityDependencyAnalysis1 : IDependencyAnalysis
{ {
HashSet<string> processed = new(); HashSet<string> processed = new();
public void Analyze(string path, Dictionary<AssetIdentify, AssetNode> result) public void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
{ {
if (!processed.Add(path)) if (!processed.Add(path))
{ {
@ -136,7 +235,7 @@ namespace AssetDependencyGraph
var relatePath = path.ToUnityRelatePath(); var relatePath = path.ToUnityRelatePath();
kv.id.Guid = AssetDatabase.AssetPathToGUID(relatePath); kv.id.Guid = AssetDatabase.AssetPathToGUID(relatePath);
var selfNode = kv.node; var selfNode = kv.node;
if (dependencyAnalysis.GetTypeByExtension(Path.GetExtension(path)) is string assetType && assetType != null) if (FileExtensionHelper.GetTypeByExtension(Path.GetExtension(path)) is string assetType && assetType != null)
{ {
kv.id.AssetType = assetType; kv.id.AssetType = assetType;
selfNode.AssetType = assetType; selfNode.AssetType = assetType;
@ -164,7 +263,7 @@ namespace AssetDependencyGraph
string[] dependencies = AssetDatabase.GetDependencies(relatePath, false); string[] dependencies = AssetDatabase.GetDependencies(relatePath, false);
for (int i = 0; i < dependencies.Length; i++) for (int i = 0; i < dependencies.Length; i++)
{ {
var dep = dependencies[i].ToUnityFullPath(); var dep = dependencies[i].ToUnityRelatePath();
var depkv = dependencyAnalysis.GetOrCreateAssetNode(dep, result); var depkv = dependencyAnalysis.GetOrCreateAssetNode(dep, result);
depkv.node.Dependent.Add(selfNode.Self); depkv.node.Dependent.Add(selfNode.Self);
selfNode.Dependencies.Add(depkv.id); selfNode.Dependencies.Add(depkv.id);
@ -177,70 +276,106 @@ namespace AssetDependencyGraph
} }
} }
} }
} }
public class FolderDependencyAnalysis : IDependencyAnalysis public class FolderDependencyAnalysis : IDependencyAnalysis
{ {
public void Analyze(string path, Dictionary<AssetIdentify, AssetNode> result) public void Analyze(string path, ConcurrentDictionary<AssetIdentify, AssetNode> result)
{ {
var dependencyAnalysis = (this as IDependencyAnalysis); var dependencyAnalysis = (this as IDependencyAnalysis);
var k = dependencyAnalysis.GetOrCreateFolderNode(path, result); var k = dependencyAnalysis.GetOrCreateFolderNode(path, result);
foreach (string file in Directory.EnumerateFiles(path))
Utils.TraverseDirectory(path, (p) =>
{ {
p = p.ToUniversalPath(); if (FileExtensionHelper.Exclude(file))
if (dependencyAnalysis.Exclude(p))
{ {
return; continue;
} }
var p = file.ToUnityRelatePath().ToUniversalPath();
var selfNode = result[k.id]; var selfNode = result[k.id];
if (Directory.Exists(p))
{
var kv = dependencyAnalysis.GetOrCreateFolderNode(p, result);
kv.node.Dependent.Add(selfNode.Self);
selfNode.Dependencies.Add(kv.id);
}
else if (File.Exists(p))
{
var kv = dependencyAnalysis.GetOrCreateAssetNode(p, result); var kv = dependencyAnalysis.GetOrCreateAssetNode(p, result);
kv.node.Dependent.Add(selfNode.Self); kv.node.Dependent.Add(selfNode.Self);
selfNode.Dependencies.Add(kv.id); selfNode.Dependencies.Add(kv.id);
} }
}, 1);
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 internal class DependencyAnalyzer
{ {
private Dictionary<Predicate<string>, IDependencyAnalysis> dependencyAnalysisDic = new(); private Dictionary<Predicate<string>, IDependencyAnalysis> dependencyAnalysisDic = new();
private Dictionary<AssetIdentify, AssetNode> assetIdentify2AssetNodeDic = new(); private ConcurrentDictionary<AssetIdentify, AssetNode> assetIdentify2AssetNodeDic = new();
private List<string> allPath = new();
private bool Exclude(string path) => path.EndsWith(".meta");
public DependencyAnalyzer() public DependencyAnalyzer()
{ {
dependencyAnalysisDic.Add(new Predicate<string>(path => !Directory.Exists(path)), new UnityDependencyAnalysis()); //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()); dependencyAnalysisDic.Add(new Predicate<string>(path => Directory.Exists(path)), new FolderDependencyAnalysis());
} }
private void Visivt(string path) private void Visivt(string path)
{ {
path = path.ToUniversalPath(); path = path.ToUniversalPath();
if (Exclude(path)) if (FileExtensionHelper.Exclude(path))
{ {
return; return;
} }
foreach (var item in dependencyAnalysisDic) allPath.Add(path);
{
if (item.Key(path))
{
item.Value.Analyze(path, assetIdentify2AssetNodeDic);
}
}
} }
public void Analyze(string rootFolder) public void Analyze(string rootFolder)
@ -248,9 +383,21 @@ namespace AssetDependencyGraph
Stopwatch sw = Stopwatch.StartNew(); Stopwatch sw = Stopwatch.StartNew();
sw.Start(); sw.Start();
Utils.TraverseDirectory(rootFolder, Visivt, -1); 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(); sw.Stop();
UnityEngine.Debug.Log($"分析引用耗时:{sw.ElapsedMilliseconds / 1000f}s"); UnityEngine.Debug.Log($"分析引用耗时:{sw.ElapsedMilliseconds / 1000f}s");
AssetDependencyGraphDB db = new AssetDependencyGraphDB("admin", "CCS20190109", "10.225.0.170"); AssetDependencyGraphDB db = new AssetDependencyGraphDB("", "", "localhost");
sw.Restart(); sw.Restart();
db.Clean(); db.Clean();
Parallel.ForEach(assetIdentify2AssetNodeDic, item => Parallel.ForEach(assetIdentify2AssetNodeDic, item =>

View File

@ -0,0 +1,125 @@
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;
}
}
}
}

View File

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

View File

@ -1,11 +1,17 @@
using System; using System;
using System.IO; using System.IO;
using System.Text;
using UnityEngine; using UnityEngine;
namespace AssetDependencyGraph namespace AssetDependencyGraph
{ {
public static class Utils public static class Utils
{ {
static readonly string dataPath;
static Utils()
{
dataPath = Application.dataPath;
}
public static string Md5(string filename) public static string Md5(string filename)
{ {
try try
@ -48,19 +54,19 @@ namespace AssetDependencyGraph
public static string ToUnityRelatePath(this string path) public static string ToUnityRelatePath(this string path)
{ {
if(path.StartsWith(Application.dataPath.ToUniversalPath().Replace("Assets", "")) && !path.StartsWith(Application.dataPath.ToUniversalPath() + "/Assets")) if(path.StartsWith(dataPath.ToUniversalPath().Replace("Assets", "")) && !path.StartsWith(dataPath.ToUniversalPath() + "/Assets"))
{ {
return path.Replace(Application.dataPath.ToUniversalPath().Replace("Assets", ""), ""); return path.Replace(dataPath.ToUniversalPath().Replace("Assets", ""), "");
} }
return path.Replace(Application.dataPath.ToUniversalPath(), "Assets"); return path.Replace(dataPath.ToUniversalPath(), "Assets");
} }
public static string ToUnityFullPath(this string path) public static string ToUnityFullPath(this string path)
{ {
if(path.StartsWith("Packages")) if(path.StartsWith("Packages"))
{ {
var fullPath = (Application.dataPath.ToUniversalPath().Replace("Assets", "") + path); var fullPath = (dataPath.ToUniversalPath().Replace("Assets", "") + path);
fullPath ??= (Application.dataPath.ToUniversalPath().Replace("Assets", "Library/PackageCache") + path); fullPath ??= (dataPath.ToUniversalPath().Replace("Assets", "Library/PackageCache") + path);
if (!File.Exists(fullPath) && Directory.Exists(fullPath)) if (!File.Exists(fullPath) && Directory.Exists(fullPath))
{ {
Debug.LogWarning($"ToUnityFullPath failure:{path}"); Debug.LogWarning($"ToUnityFullPath failure:{path}");
@ -69,7 +75,17 @@ namespace AssetDependencyGraph
return fullPath; return fullPath;
} }
return Application.dataPath.ToUniversalPath().Replace("Assets", "") + path; 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();
} }
} }
} }

Binary file not shown.

View File

@ -0,0 +1,87 @@
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.

View File

@ -0,0 +1,87 @@
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:

View File

@ -0,0 +1,87 @@
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:

View File

@ -0,0 +1,81 @@
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.

View File

@ -0,0 +1,81 @@
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: