コード例 #1
0
ファイル: VrmViewer.cs プロジェクト: zjwmyl/UniWinApi
    /// <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();
            }
        }
    }
コード例 #2
0
ファイル: BoneNormalizer.cs プロジェクト: gpsnmeajp/Oredayo4V
        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);
        }
コード例 #3
0
            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);
                }
            }
コード例 #4
0
        void SetMotion(HumanPoseTransfer src)
        {
            m_src = src;
            src.GetComponent <Renderer>().enabled = false;

            EnableBvh();
        }
コード例 #5
0
            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);
                }
            }
コード例 #6
0
 public void EnableBvh(HumanPoseTransfer src)
 {
     if (_pose != null)
     {
         _pose.Source     = src;
         _pose.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
     }
 }
コード例 #7
0
 void SetMotion(HumanPoseTransfer src)
 {
     m_src = src;
     src.GetComponent <Renderer>().enabled = false;
     if (m_loaded != null)
     {
         m_loaded.EnableBvh(src);
     }
 }
コード例 #8
0
ファイル: VrmViewer.cs プロジェクト: zjwmyl/UniWinApi
    /// <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;
                }
            }
        }
    }
コード例 #9
0
ファイル: ViewerUI.cs プロジェクト: DemonRem/UniVRMTest
        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
            }
        }
コード例 #10
0
    /// <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;
        }
    }
コード例 #11
0
        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;
            }
        }
コード例 #12
0
        //モデルの破棄
        private void ReleaseCurrentVrm()
        {
            var loaded = _humanPoseTransferTarget;

            _humanPoseTransferTarget = null;

            if (loaded != null)
            {
                VrmDisposing?.Invoke();
                Destroy(loaded.gameObject);
            }
        }
コード例 #13
0
    /// <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);
    }
コード例 #14
0
    /// <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;
        }
    }
コード例 #15
0
        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);
        }
コード例 #16
0
ファイル: ViewerUI.cs プロジェクト: DemonRem/UniVRMTest
        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;
            }
        }
コード例 #17
0
        //モデルの破棄
        private void ReleaseCurrentVrm()
        {
            var loaded = _humanPoseTransferTarget;

            _humanPoseTransferTarget = null;

            if (loaded != null)
            {
                VrmDisposing?.Invoke();

                windowStyleController.DisposeModelRenderers();
                settingAdjuster.DisposeModelRoot();
                Destroy(loaded.gameObject);
            }
        }
コード例 #18
0
        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);
            }
        }
コード例 #19
0
ファイル: VrmViewer.cs プロジェクト: zjwmyl/UniWinApi
    /// <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;
        }
    }
コード例 #20
0
    /// <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);
            }
        }
    }
コード例 #21
0
        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;
                }
            }
        }
コード例 #22
0
        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);
        }
コード例 #23
0
        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);
            }
        }
コード例 #24
0
        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;
        }
コード例 #25
0
        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);
                }
            }
        }
コード例 #26
0
        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;
        }
コード例 #27
0
        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>();
        }
コード例 #28
0
        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>();
            }
        }
コード例 #29
0
ファイル: ViewerUI.cs プロジェクト: vrm-c/UniVRMTest
        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();
                }
            }
        }
コード例 #30
0
ファイル: ViewerUI.cs プロジェクト: ousttrue/UniVRMUtility
        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();
                }
            }
        }