Merge pull request #2476 from ousttrue/fix/springboneruntime_default

[1.0][SpringboneRuntime] SpringboneRuntime が null だと NullReference Exception
This commit is contained in:
ousttrue 2024-10-25 19:05:59 +09:00 committed by GitHub
commit e16c286bb6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 27 deletions

View File

@ -119,27 +119,26 @@ namespace UniVRM10
{
if (m_springBoneRuntime == null)
{
// シーン配置モデルが play された
// springbone が無い => シーン配置モデルが play されたと見做す
var provider = GetComponent<IVrm10SpringBoneRuntimeProvider>();
if (provider != null)
{
// 明示的カスタマイズ
m_springBoneRuntime = provider.CreateSpringBoneRuntime();
}
else
if (m_springBoneRuntime == null)
{
// deafult に fallback
if (Application.isEditor)
{
m_springBoneRuntime = new Vrm10FastSpringboneRuntimeStandalone();
}
else
{
m_springBoneRuntime = new Vrm10FastSpringboneRuntime();
}
// シーン配置 play のデフォルトは singletone ではない方
m_springBoneRuntime = new Vrm10FastSpringboneRuntimeStandalone();
}
m_springBoneRuntime.InitializeAsync(this, new ImmediateCaller());
}
else
{
// importer 内で InitializeAsync が呼び出し済み
}
return new Vrm10Runtime(this, useControlRig, m_springBoneRuntime);
}

View File

@ -54,24 +54,27 @@ namespace UniVRM10
m_externalMap = new Dictionary<SubAssetKey, UnityEngine.Object>();
}
m_springboneRuntime = MakeDefaultRuntime(springboneRuntime, isAssetImport);
}
static IVrm10SpringBoneRuntime MakeDefaultRuntime(IVrm10SpringBoneRuntime runtime, bool isAssetImport)
{
if (runtime != null)
if (springboneRuntime == null)
{
return runtime;
if (isAssetImport)
{
// 何もしない dummy
springboneRuntime = new Vrm10NopSpringboneRuntime();
}
else
{
if (!Application.isPlaying)
{
// play中でない。test 対策
springboneRuntime = new Vrm10FastSpringboneRuntimeStandalone();
}
else
{
springboneRuntime = new Vrm10FastSpringboneRuntime();
}
}
}
if (isAssetImport)
{
// 何もしない dummy
return new Vrm10NopSpringboneRuntime();
}
// Vrm10Instance.MakeRuntime に移譲
return null;
m_springboneRuntime = springboneRuntime;
}
static void AssignHumanoid(List<VrmLib.Node> nodes, UniGLTF.Extensions.VRMC_vrm.HumanBone humanBone, VrmLib.HumanoidBones key)