From e63de35a6b8bdaf3f6d1efddbde8b3ff9602ed54 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Fri, 30 Mar 2018 19:21:10 +0900 Subject: [PATCH] add simple interface --- Scripts/Format/VRMImporter.cs | 30 +++++++++++++++ Scripts/RuntimeLoader/VRMRuntimeLoader.cs | 46 +++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/Scripts/Format/VRMImporter.cs b/Scripts/Format/VRMImporter.cs index d6a7366b3..42ba09394 100644 --- a/Scripts/Format/VRMImporter.cs +++ b/Scripts/Format/VRMImporter.cs @@ -16,6 +16,22 @@ namespace VRM const string HUMANOID_KEY = "humanoid"; const string MATERIAL_KEY = "materialProperties"; + public static GameObject LoadFromPath(string path) + { + var context = new VRMImporterContext(path); + var dataChunk = context.ParseVrm(File.ReadAllBytes(path)); + LoadFromBytes(context, dataChunk); + return context.Root; + } + + public static GameObject LoadFromBytes(Byte[] bytes) + { + var context = new VRMImporterContext(); + var dataChunk = context.ParseVrm(bytes); + LoadFromBytes(context, dataChunk); + return context.Root; + } + public static void LoadFromPath(VRMImporterContext context) { var dataChunk = context.ParseVrm(File.ReadAllBytes(context.Path)); @@ -456,6 +472,20 @@ namespace VRM yield return null; } + public static void LoadVrmAsync(string path, Action onLoaded) + { + var context = new VRMImporterContext(path); + var dataChunk = context.ParseVrm(File.ReadAllBytes(path)); + LoadVrmAsync(context, dataChunk, onLoaded); + } + + public static void LoadVrmAsync(Byte[] bytes, Action onLoaded) + { + var context = new VRMImporterContext(); + var dataChunk = context.ParseVrm(bytes); + LoadVrmAsync(context, dataChunk, onLoaded); + } + public static void LoadVrmAsync(VRMImporterContext ctx, ArraySegment chunkData, Action onLoaded) { var schedulable = Schedulable.Create(); diff --git a/Scripts/RuntimeLoader/VRMRuntimeLoader.cs b/Scripts/RuntimeLoader/VRMRuntimeLoader.cs index 49cef8e52..95706e248 100644 --- a/Scripts/RuntimeLoader/VRMRuntimeLoader.cs +++ b/Scripts/RuntimeLoader/VRMRuntimeLoader.cs @@ -171,6 +171,52 @@ namespace VRM } } + /// + /// メタが不要な場合のローダー + /// + void LoadVRMClicked_without_meta() + { +#if UNITY_STANDALONE_WIN + var path = FileDialog("open VRM", ".vrm"); +#else + var path = Application.dataPath + "/default.vrm"; +#endif + if (string.IsNullOrEmpty(path)) + { + return; + } + +#if true + var bytes = File.ReadAllBytes(path); + // なんらかの方法でByte列を得た + + if (m_loadAsync) + { + // ローカルファイルシステムからロードします + VRMImporter.LoadVrmAsync(bytes, OnLoaded); + } + else + { + var root=VRMImporter.LoadFromBytes(bytes); + OnLoaded(root); + } + +#else + // ParseしたJSONをシーンオブジェクトに変換していく + if (m_loadAsync) + { + // ローカルファイルシステムからロードします + VRMImporter.LoadVrmAsync(path, OnLoaded); + } + else + { + var root=VRMImporter.LoadFromPath(path); + OnLoaded(root); + } +#endif + } + + void LoadAsync(VRMImporterContext context, ArraySegment dataChunk) { #if true