Merge pull request #2252 from ousttrue/fix/vrm10_firstperson_auto_dispose

[VRM10] FirstPerson の修正
This commit is contained in:
ousttrue 2024-02-27 15:10:36 +09:00 committed by GitHub
commit f7aaef01c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 4 deletions

View File

@ -221,6 +221,11 @@ namespace UniGLTF
Destroy(oldResource);
}
public void AddResource<T>(T resource) where T : UnityEngine.Object
{
_resources.Add((SubAssetKey.Create(resource), resource));
}
void OnDestroy()
{
foreach (var (_, obj) in _resources)

View File

@ -93,20 +93,25 @@ namespace UniVRM10
{
if (x.GetRenderer(go.transform) is SkinnedMeshRenderer smr)
{
// オリジナルのモデルを3人称用にする
smr.gameObject.layer = layer.ThirdPersonOnly;
// 頭を取り除いた複製モデルを作成し、1人称用にする
var headless = await CreateHeadlessMeshAsync(smr, firstPersonBone, awaitCaller);
if (headless != null)
{
// オリジナルのモデルを3人称用にする
smr.gameObject.layer = layer.ThirdPersonOnly;
headless.gameObject.layer = layer.FirstPersonOnly;
headless.transform.SetParent(smr.transform, false);
if (runtime != null)
{
runtime.AddResource(headless.sharedMesh);
runtime.AddRenderer(headless);
}
}
else
{
// ヘッドレスを作成しなかった場合は何もしない => both と同じ
}
}
else if (x.GetRenderer(go.transform) is MeshRenderer mr)
{

View File

@ -86,11 +86,13 @@ namespace UniVRM10.FirstPersonSample
async Task<Vrm10Instance> LoadAsync(string path, VRMShaders.IAwaitCaller awaitCaller)
{
var instance = await Vrm10.LoadPathAsync(path, awaitCaller: awaitCaller);
var instance = await Vrm10.LoadPathAsync(path, awaitCaller: awaitCaller, showMeshes: false);
// VR用 FirstPerson 設定
await instance.Vrm.FirstPerson.SetupAsync(instance.gameObject, awaitCaller);
instance.GetComponent<RuntimeGltfInstance>().ShowMeshes();
return instance;
}