/// <summary> /// Load the motion from a BVH file. /// </summary> /// <param name="path"></param> private void LoadMotion(string path) { if (!File.Exists(path)) { Debug.Log("Motion " + path + " is not exits."); return; } GameObject newMotionObject = null; try { BvhImporterContext context = new BvhImporterContext(); //Debug.Log("Loading motion : " + path); context.Parse(path); context.Load(); newMotionObject = context.Root; // Hide the motion model Renderer renderer = newMotionObject.GetComponent <Renderer>(); if (renderer) { renderer.enabled = false; } if (uiController) { uiController.enableRandomMotion = false; // ランダムモーションは強制的にオフにする } } catch (Exception ex) { if (uiController) { uiController.SetWarning("Motion load failed."); } Debug.LogError("Failed loading " + path); Debug.LogError(ex); return; } if (newMotionObject) { if (motion) { GameObject.Destroy(motion.gameObject); } motion = newMotionObject.GetComponent <HumanPoseTransfer>(); SetMotion(motion, model, meta); // Play loaded audio if available if (audioSource && audioSource.clip && audioSource.clip.loadState == AudioDataLoadState.Loaded) { audioSource.Stop(); audioSource.Play(); } } }
static void EnforceTPose(GameObject go) { var animator = go.GetComponent <Animator>(); if (animator == null) { throw new ArgumentException("Animator with avatar is required"); } var avatar = animator.avatar; if (avatar == null) { throw new ArgumentException("avatar is required"); } if (!avatar.isValid) { throw new ArgumentException("invalid avatar"); } if (!avatar.isHuman) { throw new ArgumentException("avatar is not human"); } HumanPoseTransfer.SetTPose(avatar, go.transform); }
public Loaded(RuntimeGltfInstance instance, HumanPoseTransfer src, Transform lookAtTarget) { m_instance = instance; m_controller = instance.GetComponent <Vrm10Instance>(); if (m_controller != null) { // VRM m_controller.UpdateType = Vrm10Instance.UpdateTypes.LateUpdate; // after HumanPoseTransfer's setPose { m_pose = instance.gameObject.AddComponent <HumanPoseTransfer>(); m_pose.Source = src; m_pose.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; m_lipSync = instance.gameObject.AddComponent <VRM10AIUEO>(); m_blink = instance.gameObject.AddComponent <VRM10Blinker>(); m_autoExpression = instance.gameObject.AddComponent <VRM10AutoExpression>(); m_controller.LookAtTargetType = VRM10ObjectLookAt.LookAtTargetTypes.CalcYawPitchToGaze; m_controller.Gaze = lookAtTarget; } } var animation = instance.GetComponent <Animation>(); if (animation && animation.clip != null) { // GLTF animation animation.Play(animation.clip.name); } }
void SetMotion(HumanPoseTransfer src) { m_src = src; src.GetComponent <Renderer>().enabled = false; EnableBvh(); }
public Loaded(RuntimeGltfInstance instance, HumanPoseTransfer src, Transform lookAtTarget) { _instance = instance; var lookAt = instance.GetComponent <VRMLookAtHead>(); if (lookAt != null) { // vrm _pose = _instance.gameObject.AddComponent <HumanPoseTransfer>(); _pose.Source = src; _pose.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; m_lipSync = instance.gameObject.AddComponent <AIUEO>(); m_blink = instance.gameObject.AddComponent <Blinker>(); lookAt.Target = lookAtTarget; lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose m_proxy = instance.GetComponent <VRMBlendShapeProxy>(); } // not vrm var animation = instance.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } }
public void EnableBvh(HumanPoseTransfer src) { if (_pose != null) { _pose.Source = src; _pose.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } }
void SetMotion(HumanPoseTransfer src) { m_src = src; src.GetComponent <Renderer>().enabled = false; if (m_loaded != null) { m_loaded.EnableBvh(src); } }
/// <summary> /// Unload the old model and load the new model from VRM file. /// </summary> /// <param name="path"></param> private void LoadModel(string path) { if (!File.Exists(path)) { Debug.Log("Model " + path + " is not exits."); return; } GameObject newModelObject = null; try { // Load from a VRM file. context = new VRMImporterContext(); //Debug.Log("Loading model : " + path); context.Load(path); newModelObject = context.Root; meta = context.ReadMeta(true); context.ShowMeshes(); } catch (Exception ex) { if (uiController) { uiController.SetWarning("Model load failed."); } Debug.LogError("Failed loading " + path); Debug.LogError(ex); return; } if (newModelObject) { if (model) { GameObject.Destroy(model.gameObject); } model = newModelObject.AddComponent <HumanPoseTransfer>(); var characterController = model.gameObject.AddComponent <CharacterBehaviour>(); SetMotion(motion, model, meta); if (uiController) { uiController.Show(meta); if (characterController) { uiController.enableRandomMotion = characterController.randomMotion; uiController.enableRandomEmotion = characterController.randomEmotion; } } } }
private void SetModel(GameObject vrmModel) { // cleanup var loaded = _loadedBvhSourceOnAvatar; _loadedBvhSourceOnAvatar = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); Destroy(loaded.gameObject); } if (vrmModel != null) { _loadedBvhSourceOnAvatar = vrmModel.AddComponent <HumanPoseTransfer>(); _loadedBvhSourceOnAvatar.Source = _bvhSource; _motionControlPanel.LoadedBvhSourceOnAvatar = _loadedBvhSourceOnAvatar; if (_toggleMotionBVH.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } if (_toggleMotionTPose.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseClip; } if (_faceViewToggle.isOn) { _closeGameObject.FaceCameraPropertyActivateVRM(); } _motionControlPanel.AssignAutoPlay(vrmModel); var lookAt = vrmModel.GetComponent <VRMLookAtHead>(); if (_lookAtSphere.isOn) { lookAt.Target = _targetSphere.transform; } else if (_lookAtCamera.isOn) { lookAt.Target = _targetCamera.transform; } else { lookAt.Target = _targetSphere.transform; } lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose } }
/// <summary> /// Apply the motion to the model. /// </summary> /// <param name="motion"></param> /// <param name="model"></param> /// <param name="meta"></param> private void SetMotion(HumanPoseTransfer motion, HumanPoseTransfer model, VRMMetaObject meta) { if (!model || !meta) { return; } var characterController = model.GetComponent <VrmCharacterBehaviour>(); // Apply the motion if AllowedUser is equal to "Everyone". if (meta.AllowedUser == AllowedUser.Everyone) { _motionMode = VrmCharacterBehaviour.MotionMode.Default; if (uiController) { _motionMode = uiController.motionMode; characterController.randomEmotion = uiController.enableRandomEmotion; } if (_motionMode != VrmCharacterBehaviour.MotionMode.Bvh) { var anim = model.GetComponent <Animator>(); if (anim && this.animator) { anim.runtimeAnimatorController = this.animator.runtimeAnimatorController; } characterController.SetAnimator(anim); } else { var anim = model.GetComponent <Animator>(); if (anim) { anim.runtimeAnimatorController = null; } characterController.SetAnimator(anim); if (motion) { model.Source = motion; model.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } } characterController.SetMotionMode(_motionMode); } else { characterController.SetMotionMode(VrmCharacterBehaviour.MotionMode.Default); characterController.randomEmotion = false; _motionMode = VrmCharacterBehaviour.MotionMode.Default; } }
void SetMotion(HumanPoseTransfer src) { m_src = src; src.GetComponent <Renderer>().enabled = false; if (m_loaded != null) { var dst = m_loaded.AddComponent <HumanPoseTransfer>(); dst.Source = m_src; dst.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } }
//モデルの破棄 private void ReleaseCurrentVrm() { var loaded = _humanPoseTransferTarget; _humanPoseTransferTarget = null; if (loaded != null) { VrmDisposing?.Invoke(); Destroy(loaded.gameObject); } }
/// <summary> /// Load the motion from a BVH file. /// </summary> /// <param name="path"></param> private void LoadMotion(string path) { ImporterContext context = new ImporterContext { Path = path }; BvhImporter.Import(context); motion = context.Root.GetComponent <HumanPoseTransfer>(); motion.GetComponent <Renderer>().enabled = false; SetMotion(motion, model, meta); }
/// <summary> /// Apply the motion to the model. /// </summary> /// <param name="motion"></param> /// <param name="model"></param> /// <param name="meta"></param> private void SetMotion(HumanPoseTransfer motion, HumanPoseTransfer model, VRMMetaObject meta) { if (!model || !motion || !meta) { return; } // Apply the motion if AllowedUser is equal to "Everyone". if (meta.AllowedUser == AllowedUser.Everyone) { model.Source = motion; model.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } }
public void Load() { var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/avatar.vrm"; if (!File.Exists(path)) { throw new Exception("no file found"); } var data = File.ReadAllBytes(path); var importerContext = new VRMImporterContext(); importerContext.ParseGlb(data); importerContext.Load(); var root = importerContext.Root; importerContext.EnableUpdateWhenOffscreen(); root.GetComponentsInChildren <Renderer>().ToList().ForEach(e => { e.shadowCastingMode = ShadowCastingMode.Off; e.receiveShadows = false; }); var lookAt = root.GetComponent <VRMLookAtHead>(); _humanPoseTransferTarget = root.AddComponent <HumanPoseTransfer>(); _humanPoseTransferTarget.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.None; lookAt.UpdateType = UpdateType.LateUpdate; //Spring boneのスケジュール SetIK(root, loadSetting); var animator = root.GetComponent <Animator>(); animator.runtimeAnimatorController = animatorController; settingAdjuster.AssignModelRoot(root.transform); var info = new VrmLoadedInfo() { context = importerContext, vrmRoot = root.transform, animator = animator, blendShape = root.GetComponent <VRMBlendShapeProxy>(), }; PreVrmLoaded?.Invoke(info); VrmLoaded?.Invoke(info); }
private void SetMotion(HumanPoseTransfer src) { if (src.Avatar.isValid) // check whether the source is valid { _bvhSource = src; src.GetComponent <Renderer>().enabled = false; _motionControlPanel.BvhSource = _bvhSource; _bvhLoadingTrigger = false; _bvhPathSaved = _bvhPathLocal; _motionControlPanel.EnableBvh(); _toggleMotionBVH.isOn = true; _toggleMotionTPose.isOn = false; } }
//モデルの破棄 private void ReleaseCurrentVrm() { var loaded = _humanPoseTransferTarget; _humanPoseTransferTarget = null; if (loaded != null) { VrmDisposing?.Invoke(); windowStyleController.DisposeModelRenderers(); settingAdjuster.DisposeModelRoot(); Destroy(loaded.gameObject); } }
private void ReleaseCurrentVrm() { // cleanup var loaded = m_loaded; m_loaded = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); //多分コレやらないとAniLipSyncが破棄済みオブジェクトを触りに行ってしまうので。 animMorphEasedTarget.blendShapeProxy = null; GameObject.Destroy(loaded.gameObject); } }
/// <summary> /// Apply the motion to the model. /// </summary> /// <param name="motion"></param> /// <param name="model"></param> /// <param name="meta"></param> private void SetMotion(HumanPoseTransfer motion, HumanPoseTransfer model, VRMMetaObject meta) { if (!model || !meta) { return; } var characterController = model.GetComponent <CharacterBehaviour>(); // Apply the motion if AllowedUser is equal to "Everyone". if (meta.AllowedUser == AllowedUser.Everyone) { if (uiController && uiController.enableRandomMotion) { var anim = model.GetComponent <Animator>(); if (anim && this.animator) { anim.runtimeAnimatorController = this.animator.runtimeAnimatorController; } characterController.randomMotion = true; } else { var anim = model.GetComponent <Animator>(); if (anim) { anim.runtimeAnimatorController = null; } characterController.randomMotion = false; if (motion) { model.Source = motion; model.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } } if (uiController) { characterController.randomEmotion = uiController.enableRandomEmotion; } } else { characterController.randomMotion = false; characterController.randomEmotion = false; } }
/// <summary> /// Unload the old model and load the new model from VRM file. /// </summary> /// <param name="path"></param> private void LoadModel(string path) { if (!File.Exists(path)) { return; } GameObject newModel = null; try { // Load from a VRM file. byte[] bytes = File.ReadAllBytes(path); context = new VRMImporterContext(UniGLTF.UnityPath.FromFullpath(path)); context.ParseGlb(bytes); VRMImporter.LoadFromBytes(context); newModel = context.Root; meta = context.ReadMeta(); } catch (Exception ex) { Debug.LogError(ex); return; } if (model) { GameObject.Destroy(model.gameObject); } if (newModel) { model = newModel.AddComponent <HumanPoseTransfer>(); SetMotion(motion, model, meta); model.gameObject.AddComponent <CharacterBehaviour>(); if (uiController) { uiController.Show(meta); } } }
void SetModel(ModelAsset asset) { var go = asset.Root; // cleanup var loaded = m_loaded; m_loaded = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); GameObject.Destroy(loaded.gameObject); } if (go != null) { var lookAt = go.GetComponent <VRMController>(); if (lookAt != null) { m_loaded = go.AddComponent <HumanPoseTransfer>(); m_loaded.Source = m_src; m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; m_lipSync = go.AddComponent <AIUEO>(); m_blink = go.AddComponent <Blinker>(); lookAt.Gaze = m_target.transform; // lookAt.UpdateType = VRMController.UpdateTypes.LateUpdate; // after HumanPoseTransfer's setPose } var animation = go.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } // show mesh foreach (var r in asset.Renderers) { r.enabled = true; } } }
private void SetModel(GameObject go) { ReleaseCurrentVrm(); if (go == null) { return; } var lookAt = go.GetComponent <VRMLookAtHead>(); _humanPoseTransferTarget = go.AddComponent <HumanPoseTransfer>(); _humanPoseTransferTarget.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.None; lookAt.UpdateType = UpdateType.LateUpdate; //セットアップのうちFinalIKに思い切り依存した所が別スクリプトになってます VRMLoadControllerHelper.SetupVrm(go, loadSetting); var animator = go.GetComponent <Animator>(); animator.runtimeAnimatorController = animatorController; var blendShapeProxy = go.GetComponent <VRMBlendShapeProxy>(); var renderers = go.GetComponentsInChildren <Renderer>(); foreach (var r in renderers) { //セルフシャドウは明示的に切る: ちょっとでも軽量化したい r.receiveShadows = false; } windowStyleController.InitializeModelRenderers(renderers); settingAdjuster.AssignModelRoot(go.transform); var info = new VrmLoadedInfo() { vrmRoot = go.transform, animator = animator, blendShape = blendShapeProxy, }; PreVrmLoaded?.Invoke(info); VrmLoaded?.Invoke(info); }
void SetModel(GameObject go) { // cleanup var loaded = m_loaded; m_loaded = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); GameObject.Destroy(loaded.gameObject); } if (go != null) { var lookAt = go.GetComponent <VRMLookAtHead>(); if (lookAt != null) { m_loaded = go.AddComponent <HumanPoseTransfer>(); m_loaded.Source = m_src; m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } var animation = go.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } //セットアップの過程でFinalIKに少し触るので(規約クリアになるよう)ファイルを分離 VRMLoadControllerHelper.SetupVrm(go, new VRMLoadControllerHelper.VrmLoadSetting() { runtimeAnimatorController = runtimeController, leftHandTarget = leftHand, rightHandTarget = rightHand, headTarget = head, inputToMotion = _inputToMotion, }); _inputToMotion.fingerAnimator = go.GetComponent <FingerAnimator>(); //_inputToMotion.head = go.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Neck); } }
private void Reset() { var buttons = GameObject.FindObjectsOfType <Button>(); m_open = buttons.First(x => x.name == "Open"); var toggles = GameObject.FindObjectsOfType <Toggle>(); m_enableLipSync = toggles.First(x => x.name == "EnableLipSync"); m_enableAutoBlink = toggles.First(x => x.name == "EnableAutoBlink"); var texts = GameObject.FindObjectsOfType <Text>(); m_version = texts.First(x => x.name == "Version"); m_src = GameObject.FindObjectOfType <HumanPoseTransfer>(); m_target = GameObject.FindObjectOfType <TargetMover>().gameObject; }
void SetModel(GameObject go) { // cleanup var loaded = m_loaded; m_loaded = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); GameObject.Destroy(loaded.gameObject); } if (go != null) { m_controller = go.GetComponent <VRM10Controller>(); if (m_controller != null) { m_texts.UpdateMeta(m_controller.Vrm.Meta); m_controller.UpdateType = VRM10Controller.UpdateTypes.LateUpdate; // after HumanPoseTransfer's setPose { m_loaded = go.AddComponent <HumanPoseTransfer>(); m_loaded.Source = m_src; m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; m_lipSync = go.AddComponent <AIUEO>(); m_blink = go.AddComponent <Blinker>(); m_controller.LookAtTargetType = VRM10ObjectLookAt.LookAtTargetTypes.CalcYawPitchToGaze; m_controller.Gaze = m_target.transform; } } var animation = go.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } } }
IEnumerator Initialize() { yield return(new WaitUntil(() => NetworkServer.active)); GameObject go = Instantiate(HumanPoseSynchronizerPrefab); NetworkServer.SpawnWithClientAuthority(go, NetworkServer.localConnection); HumanPoseTransfer m_target = go.GetComponent <HumanPoseTransfer>(); HumanPoseTransfer m_source = SourceObject.GetComponent <HumanPoseTransfer>(); if (m_target != null) { m_target.Source = m_source; m_target.SourceType = UniHumanoid.HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } TransformSynchronizer synchronizer = go.AddComponent <TransformSynchronizer>(); synchronizer.SourceTransform = SourceObject.transform; }
void SetModel(GameObject go) { ReleaseCurrentVrm(); if (go == null) { return; } var lookAt = go.GetComponent <VRMLookAtHead>(); if (lookAt != null) { m_loaded = go.AddComponent <HumanPoseTransfer>(); m_loaded.Source = m_src; m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } var animation = go.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } //セットアップの過程でFinalIKに少し触るので(規約クリアになるよう)ファイルを分離 VRMLoadControllerHelper.SetupVrm(go, new VRMLoadControllerHelper.VrmLoadSetting() { runtimeAnimatorController = runtimeController, bodyTarget = bodyTarget, leftHandTarget = leftHandTarget, rightHandTarget = rightHandTarget, headTarget = headTarget, inputToMotion = _inputToMotion, }); _inputToMotion.fingerAnimator = go.GetComponent <FingerAnimator>(); animMorphEasedTarget.blendShapeProxy = go.GetComponent <VRMBlendShapeProxy>(); }
void SetModel(GameObject go) { // cleanup var loaded = m_loaded; m_loaded = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); GameObject.Destroy(loaded.gameObject); } if (go != null) { var lookAt = go.GetComponent <VRMLookAtHead>(); if (lookAt != null) { m_loaded = go.AddComponent <HumanPoseTransfer>(); m_loaded.Source = m_src; m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; m_lipSync = go.AddComponent <AIUEO>(); m_blink = go.AddComponent <Blinker>(); lookAt.Target = m_target.transform; lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose } var animation = go.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } m_proxy = go.GetComponent <VRMBlendShapeProxy>(); } }
private void SetModel(GameObject vrmModel) { // cleanup var loaded = _loadedBvhSourceOnAvatar; _loadedBvhSourceOnAvatar = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); Destroy(loaded.gameObject); } if (vrmModel != null) { // Set up expressions _facialExpressionPanel.CreateDynamicObject(_vrmModel); _informationUpdate.SetVRM(vrmModel); _proxy = vrmModel.GetComponent <VRMBlendShapeProxy>(); // Set up LookAt var lookAt = vrmModel.GetComponent <VRMLookAtHead>(); if (lookAt != null) { _loadedBvhSourceOnAvatar = vrmModel.AddComponent <HumanPoseTransfer>(); _loadedBvhSourceOnAvatar.Source = _bvhSource; _motionControlPanel.LoadedBvhSourceOnAvatar = _loadedBvhSourceOnAvatar; if (_toggleMotionBVH.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } if (_toggleMotionTPose.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseClip; } if (_faceViewToggle.isOn) { _closeGameObject.FaceCameraPropertyActivateVRM(); } _motionControlPanel.AssignAutoPlay(vrmModel); if (_lookAtSphere.isOn) { lookAt.Target = _targetSphere.transform; } else if (_lookAtCamera.isOn) { lookAt.Target = _targetCamera.transform; } else { lookAt.Target = _targetSphere.transform; } lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose var animator = _vrmModel.GetComponent <Animator>(); var leftEye = OffsetOnTransform.Create(animator.GetBoneTransform(HumanBodyBones.LeftEye)).Transform; var rightEye = OffsetOnTransform.Create(animator.GetBoneTransform(HumanBodyBones.RightEye)).Transform; if (!(leftEye == null || rightEye == null)) { _leftEyeSaved = leftEye; _rightEyeSaved = rightEye; _lookAtBoneFlag = true; // Send information _informationUpdate.SetVRM(_vrmModel); _informationUpdate.SetBoneEyeTransform(_leftEyeSaved, _rightEyeSaved); _informationUpdate.SetLookAtType(_lookAtBoneFlag); } else { if (_vrmModel.GetComponent <VRMLookAtBoneApplyer>() != null) { Destroy(_vrmModel.GetComponent <VRMLookAtBoneApplyer>()); _vrmModel.AddComponent <VRMLookAtBlendShapeApplyer>(); } _lookAtBoneFlag = false; // Send information _informationUpdate.SetVRM(_vrmModel); _informationUpdate.SetLookAtType(_lookAtBoneFlag); } } // Set up FirstPerson var m_firstPerson = _vrmModel.GetComponent <VRMFirstPerson>(); if (m_firstPerson != null) { m_firstPerson.Setup(); } if (_freeViewpointToggle.isOn) { _closeGameObject.EnableFirstPersonModeOption(); } } }
private void SetModel(ModelAsset assets) { var vrmModel = _vrmModel; vrmModel = assets.Root; // Cleanup var loaded = _loadedBvhSourceOnAvatar; _loadedBvhSourceOnAvatar = null; if (loaded != null) { Debug.LogFormat("destroy {0}", loaded); Destroy(loaded.gameObject); } if (vrmModel != null) { // Set up expressions _facialExpressionPanel.CreateDynamicObject(vrmModel); _informationUpdate.SetVRM(vrmModel); SkinnedMeshRenderer[] skinnedMeshes = vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (var skinMesh in skinnedMeshes) { skinMesh.updateWhenOffscreen = true; } // Set up LookAt var lookAt = vrmModel.GetComponent <VRMBlendShapeProxy>(); if (lookAt != null) { _loadedBvhSourceOnAvatar = vrmModel.AddComponent <HumanPoseTransfer>(); _loadedBvhSourceOnAvatar.Source = _bvhSource; _motionControlPanel.LoadedBvhSourceOnAvatar = _loadedBvhSourceOnAvatar; if (_toggleMotionBVH.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer; } if (_toggleMotionTPose.isOn) { _loadedBvhSourceOnAvatar.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseClip; } if (_faceViewToggle.isOn) { _closeGameObject.FaceCameraPropertyActivateVRM(); } _motionControlPanel.AssignAutoPlay(vrmModel); if (_lookAtSphere.isOn) { lookAt.Gaze = _targetSphere.transform; } else if (_lookAtCamera.isOn) { lookAt.Gaze = _targetCamera.transform; } else { lookAt.Gaze = _referenceObject.transform; } // Check the model's LookAt type var animator = vrmModel.GetComponent <Animator>(); var leftEye = OffsetOnTransform.Create(animator.GetBoneTransform(HumanBodyBones.LeftEye)).Transform; var rightEye = OffsetOnTransform.Create(animator.GetBoneTransform(HumanBodyBones.RightEye)).Transform; if (leftEye == null && rightEye == null) { _lookAtBlendShapeFlag = true; lookAt.LookAtType = VRMBlendShapeProxy.LookAtTypes.BlendShape; } // Send information _informationUpdate.SetVRM(vrmModel); _informationUpdate.SetLookAtType(_lookAtBlendShapeFlag); } // Set up animation var animation = vrmModel.GetComponent <Animation>(); if (animation && animation.clip != null) { animation.Play(animation.clip.name); } // Show mesh foreach (var r in assets.Renderers) { r.enabled = true; } // VRMFirstPerson initialization var m_firstPerson = vrmModel.GetComponent <VRMFirstPerson>(); if (m_firstPerson != null) { m_firstPerson.Setup(); } if (_freeViewpointToggle.isOn) { _closeGameObject.EnableFirstPersonModeOption(); } } }