構築時に meta と expression が ExternalObjectMap を利用する

This commit is contained in:
ousttrue
2021-04-22 17:09:06 +09:00
parent 8c7113bd53
commit b636771d24
2 changed files with 21 additions and 6 deletions

View File

@@ -94,7 +94,7 @@ namespace UniVRM10
//
// Import(create unity objects)
//
var externalObjectMap = scriptedImporter.GetExternalObjectMap().Select(kv => (kv.Value.name, kv.Value)).ToArray();
var externalObjectMap = scriptedImporter.GetExternalObjectMap().ToDictionary(kv => new SubAssetKey(kv.Key.type, kv.Key.name), kv => kv.Value);
using (var loader = new RuntimeUnityBuilder(parser, externalObjectMap))
{

View File

@@ -18,8 +18,12 @@ namespace UniVRM10
UniGLTF.Extensions.VRMC_vrm.VRMC_vrm m_vrm;
public RuntimeUnityBuilder(UniGLTF.GltfParser parser, IEnumerable<(string, UnityEngine.Object)> externalObjectMap = null) : base(parser, externalObjectMap)
IDictionary<SubAssetKey, UnityEngine.Object> m_externalMap;
public RuntimeUnityBuilder(UniGLTF.GltfParser parser, IDictionary<SubAssetKey, UnityEngine.Object> externalObjectMap = null)
: base(parser, externalObjectMap.Select(kv => (kv.Key.Name, kv.Value)))
{
m_externalMap = externalObjectMap;
m_model = VrmLoader.CreateVrmModel(parser);
// for `VRMC_materials_mtoon`
@@ -241,7 +245,11 @@ namespace UniVRM10
async Task LoadVrmAsync(IAwaitCaller awaitCaller, VRM10Controller controller, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm)
{
// meta
if (vrm.Meta != null)
if (m_externalMap.TryGetValue(VRM10MetaObject.SubAssetKey, out UnityEngine.Object meta))
{
controller.Meta.Meta = meta as VRM10MetaObject;
}
else if (vrm.Meta != null)
{
var src = vrm.Meta;
m_meta = ScriptableObject.CreateInstance<VRM10MetaObject>();
@@ -281,7 +289,11 @@ namespace UniVRM10
}
// expression
if (vrm.Expressions != null)
if (m_externalMap.TryGetValue(VRM10ExpressionAvatar.SubAssetKey, out UnityEngine.Object expressionAvatar))
{
controller.Expression.ExpressionAvatar = expressionAvatar as VRM10ExpressionAvatar;
}
else if (vrm.Expressions != null)
{
controller.Expression.ExpressionAvatar = ScriptableObject.CreateInstance<VRM10ExpressionAvatar>();
@@ -573,9 +585,12 @@ namespace UniVRM10
m_humanoid = null;
}
if (take(m_meta))
if (m_meta != null)
{
m_meta = null;
if (take(m_meta))
{
m_meta = null;
}
}
if (m_exressionAvatar != null && m_exressionAvatar.Clips != null)