mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-04 16:55:17 -05:00
fix SetupAsync
This commit is contained in:
parent
df59ac1979
commit
fbcf4279bf
|
|
@ -29,6 +29,9 @@ namespace UniVRM10
|
|||
}
|
||||
}
|
||||
|
||||
List<SkinnedMeshRenderer> _created = new List<SkinnedMeshRenderer>();
|
||||
public IReadOnlyList<SkinnedMeshRenderer> Created => _created;
|
||||
|
||||
// If no layer names are set, use the default layer IDs.
|
||||
// Otherwise use the two Unity layers called "VRMFirstPersonOnly" and "VRMThirdPersonOnly".
|
||||
public static bool TriedSetupLayer = false;
|
||||
|
|
@ -90,7 +93,7 @@ namespace UniVRM10
|
|||
/// <param name="visible"></param>
|
||||
/// <param name="awaitCaller"></param>
|
||||
/// <returns></returns>
|
||||
public async Task SetupAsync(GameObject go, bool visible, IAwaitCaller awaitCaller = null)
|
||||
public async Task<IReadOnlyList<SkinnedMeshRenderer>> SetupAsync(GameObject go, IAwaitCaller awaitCaller = null)
|
||||
{
|
||||
if (awaitCaller == null)
|
||||
{
|
||||
|
|
@ -100,7 +103,7 @@ namespace UniVRM10
|
|||
SetupLayers();
|
||||
if (m_done)
|
||||
{
|
||||
return;
|
||||
return Created;
|
||||
}
|
||||
m_done = true;
|
||||
|
||||
|
|
@ -121,9 +124,10 @@ namespace UniVRM10
|
|||
|
||||
// 頭を取り除いた複製モデルを作成し、1人称用にする
|
||||
var headless = await CreateHeadlessMeshAsync(smr, eraseBones, awaitCaller);
|
||||
headless.enabled = visible;
|
||||
headless.enabled = false;
|
||||
headless.gameObject.layer = FIRSTPERSON_ONLY_LAYER;
|
||||
headless.transform.SetParent(smr.transform, false);
|
||||
_created.Add(headless);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -164,6 +168,8 @@ namespace UniVRM10
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Created;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1049,10 +1049,9 @@ MonoBehaviour:
|
|||
m_GameObject: {fileID: 1148284494}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03b059a6d90275246ba8622ac40a63dc, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: bd151410f22d0f6409cf4b17c03a3c6e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_loadAsync: 1
|
||||
m_canvas: {fileID: 2082684588}
|
||||
m_faceCamera: {fileID: 1919635064}
|
||||
m_source: {fileID: 0}
|
||||
|
|
@ -1447,7 +1446,7 @@ MonoBehaviour:
|
|||
m_GameObject: {fileID: 1919635062}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d1cc319f70f55264eb38d1959c4222c6, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: b74319fb726e30c4ca99bd741af8bd3c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Target: {fileID: 0}
|
||||
|
|
@ -1754,7 +1753,7 @@ MonoBehaviour:
|
|||
m_GameObject: {fileID: 2082684583}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1ae08a6ba07c0864c9132bc8a004030d, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: 58bd4ef7b3a863142ae9960c21106ba3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
LoadVRMButton: {fileID: 2036452539}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
#pragma warning disable 0414
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using UniGLTF;
|
||||
|
|
@ -21,27 +22,23 @@ namespace UniVRM10.FirstPersonSample
|
|||
[SerializeField]
|
||||
UniHumanoid.HumanPoseTransfer m_target;
|
||||
|
||||
[SerializeField, Header("runtime")]
|
||||
VRM10Controller m_firstPerson;
|
||||
|
||||
async Task SetupTargetAsync(UniHumanoid.HumanPoseTransfer m_target, bool visible)
|
||||
void SetupTarget(UniHumanoid.HumanPoseTransfer m_target)
|
||||
{
|
||||
if (m_target != null)
|
||||
if (m_target == null)
|
||||
{
|
||||
m_target.Source = m_source;
|
||||
m_target.SourceType = UniHumanoid.HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
return;
|
||||
}
|
||||
|
||||
m_firstPerson = m_target.GetComponent<VRM10Controller>();
|
||||
m_target.Source = m_source;
|
||||
m_target.SourceType = UniHumanoid.HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
|
||||
var animator = m_target.GetComponent<Animator>();
|
||||
if (animator != null)
|
||||
var animator = m_target.GetComponent<Animator>();
|
||||
if (animator != null)
|
||||
{
|
||||
if (m_faceCamera != null)
|
||||
{
|
||||
await m_firstPerson.Vrm.FirstPerson.SetupAsync(m_firstPerson.gameObject, visible);
|
||||
|
||||
if (m_faceCamera != null)
|
||||
{
|
||||
m_faceCamera.Target = animator.GetBoneTransform(HumanBodyBones.Head);
|
||||
}
|
||||
m_faceCamera.Target = animator.GetBoneTransform(HumanBodyBones.Head);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -72,34 +69,45 @@ namespace UniVRM10.FirstPersonSample
|
|||
return;
|
||||
}
|
||||
|
||||
// GLB形式でJSONを取得しParseします
|
||||
// VRM extension を parse します
|
||||
var data = new GlbFileParser(path).Parse();
|
||||
Vrm10Data.TryParseOrMigrate(data, true, out Vrm10Data vrm);
|
||||
using (var context = new Vrm10Importer(vrm))
|
||||
var instance = await LoadAsync(path);
|
||||
|
||||
var root = instance.gameObject;
|
||||
root.transform.SetParent(transform, false);
|
||||
|
||||
// add motion
|
||||
var humanPoseTransfer = root.AddComponent<UniHumanoid.HumanPoseTransfer>();
|
||||
if (m_target != null)
|
||||
{
|
||||
// metaを取得(todo: thumbnailテクスチャのロード)
|
||||
var meta = vrm.VrmExtension.Meta;
|
||||
Debug.LogFormat("meta: title:{0}", meta.Name);
|
||||
GameObject.Destroy(m_target.gameObject);
|
||||
}
|
||||
m_target = humanPoseTransfer;
|
||||
SetupTarget(m_target);
|
||||
}
|
||||
|
||||
// ParseしたJSONをシーンオブジェクトに変換していく
|
||||
var loaded = await context.LoadAsync();
|
||||
async Task<RuntimeGltfInstance> LoadAsync(string path)
|
||||
{
|
||||
var data = new GlbFileParser(path).Parse();
|
||||
if (!Vrm10Data.TryParseOrMigrate(data, true, out Vrm10Data vrm))
|
||||
{
|
||||
throw new System.Exception("vrm parse error !");
|
||||
}
|
||||
using (var loader = new Vrm10Importer(vrm))
|
||||
{
|
||||
var instance = await loader.LoadAsync();
|
||||
|
||||
var root = loaded.gameObject;
|
||||
|
||||
root.transform.SetParent(transform, false);
|
||||
|
||||
// add motion
|
||||
var humanPoseTransfer = root.AddComponent<UniHumanoid.HumanPoseTransfer>();
|
||||
if (m_target != null)
|
||||
{
|
||||
GameObject.Destroy(m_target.gameObject);
|
||||
}
|
||||
m_target = humanPoseTransfer;
|
||||
await SetupTargetAsync(m_target, visible: false);
|
||||
// VR用 FirstPerson 設定
|
||||
var controller = instance.GetComponent<VRM10Controller>();
|
||||
var created = await controller.Vrm.FirstPerson.SetupAsync(controller.gameObject);
|
||||
|
||||
//メッシュを表示します
|
||||
// loaded.ShowMeshes();
|
||||
foreach (var r in created)
|
||||
{
|
||||
// FistPerson flag = auto で生成されたモデル
|
||||
r.enabled = true;
|
||||
}
|
||||
instance.ShowMeshes();
|
||||
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +144,7 @@ namespace UniVRM10.FirstPersonSample
|
|||
}
|
||||
m_source = context.Root.GetComponent<UniHumanoid.HumanPoseTransfer>();
|
||||
|
||||
var task = SetupTargetAsync(m_target, true);
|
||||
SetupTarget(m_target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user