Пример #1
0
    // Use this for initialization
    void Start()
    {
        //"StreamingAssets"フォルダの"VRoid.vrm"を読み込む
        var path = Application.streamingAssetsPath + "/" + "VRoid.vrm";

        // Actionコールバックで生成されたGameObjectが返される
        VRMImporter.LoadVrmAsync(path, gameObject =>
        {
            //タグ:プレイヤーのオブジェクトを対象とする
            gameObject.transform.position = new Vector3(7.0f, 1, 5);
            gameObject.tag = "Player";

            //アニメーターを設定する
            RuntimeAnimatorController asset = (RuntimeAnimatorController)Instantiate(Resources.Load("Animator/ThirdPersonAnimatorController"));
            gameObject.GetComponent <Animator>().runtimeAnimatorController = asset;

            //コライダーなどの設定
            gameObject.AddComponent <Rigidbody>();
            gameObject.AddComponent <CapsuleCollider>();
            gameObject.GetComponent <CapsuleCollider>().height = 1.85f;
            gameObject.GetComponent <CapsuleCollider>().radius = 0.2f;
            gameObject.GetComponent <CapsuleCollider>().center = new Vector3(0, 0.85f, 0);
            gameObject.AddComponent <AnnouncePlayerPosition>();
            gameObject.AddComponent <CheckCommand>();
            gameObject.AddComponent <ThirdPersonUserControl>();

            //カメラを設定
            GameObject camera = GameObject.Find("FreeLookCameraRig");
            camera.GetComponent <FreeLookCam>().target = gameObject.transform;
        });
    }
Пример #2
0
        public static IEnumerator LoadVrmCoroutine(string path, Action <GameObject> onLoaded)
        {
            var www = new WWW(path);

            yield return(www);

            VRMImporter.LoadVrmAsync(path, onLoaded);
        }
Пример #3
0
    void LoadAsync(VRMImporterContext context)
    {
        var now = Time.time;

        VRMImporter.LoadVrmAsync(context, go =>
        {
            var delta = Time.time - now;
            Debug.LogFormat("LoadVrmAsync {0:0.0} seconds", delta);
            OnLoaded(go);
        });
    }
Пример #4
0
        void LoadAsync(VRMImporterContext context)
        {
#if true
            var now = Time.time;
            VRMImporter.LoadVrmAsync(context, go => {
                var delta = Time.time - now;
                Debug.LogFormat("LoadVrmAsync {0:0.0} seconds", delta);
                OnLoaded(go);
            });
#else
            // ローカルファイルシステムからロードします
            VRMImporter.LoadVrmAsync(path, OnLoaded);
#endif
        }
        /// <summary>
        /// メタが不要な場合のローダー
        /// </summary>
        void LoadVRMClicked_without_meta()
        {
#if UNITY_STANDALONE_WIN
            var path = FileDialogForWindows.FileDialog("open VRM", ".vrm");
#elif UNITY_EDITOR
            var path = UnityEditor.EditorUtility.OpenFilePanel("Open VRM", "", "vrm");
#else
            var path = Application.dataPath + "/default.vrm";
#endif
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

#if true
            var bytes = File.ReadAllBytes(path);
            // なんらかの方法でByte列を得た

            var context = new VRMImporterContext();

            // GLB形式でJSONを取得しParseします
            context.ParseGlb(bytes);

            if (m_loadAsync)
            {
                // ローカルファイルシステムからロードします
                LoadAsync(context);
            }
            else
            {
                context.Load();
                OnLoaded(context);
            }
#else
            // ParseしたJSONをシーンオブジェクトに変換していく
            if (m_loadAsync)
            {
                // ローカルファイルシステムからロードします
                VRMImporter.LoadVrmAsync(path, OnLoaded);
            }
            else
            {
                var root = VRMImporter.LoadFromPath(path);
                OnLoaded(root);
            }
#endif
        }
Пример #6
0
    private async void ImportVRM(string path, bool ImportForCalibration)
    {
        CurrentSettings.VRMPath = path;
        var context = new VRMImporterContext(path);

        var bytes = File.ReadAllBytes(path);

        // GLB形式でJSONを取得しParseします
        context.ParseVrm(bytes);

        if (CurrentModel != null)
        {
            CurrentModel.transform.SetParent(null);
            CurrentModel.SetActive(false);
            Destroy(CurrentModel);
            CurrentModel = null;
        }
        // ParseしたJSONをシーンオブジェクトに変換していく
        CurrentModel = await VRMImporter.LoadVrmAsync(context);

        //LipSync
        LipSync.ImportVRMmodel(CurrentModel);
        //まばたき
        blinkController.ImportVRMmodel(CurrentModel);

        CurrentModel.transform.SetParent(transform, false);

        SetVRIK(CurrentModel);
        if (ImportForCalibration == false)
        {
            SetCameraLookTarget();
            //SetTrackersToVRIK();
        }
        else
        {
            var animator = CurrentModel.GetComponent<Animator>();
            if (animator != null)
            {
                if (CalibrationCamera != null)
                {
                    CalibrationCamera.Target = animator.GetBoneTransform(HumanBodyBones.Head);
                    CalibrationCamera.gameObject.SetActive(true);
                }
            }
        }
    }
Пример #7
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);
            }
        }
    }
Пример #8
0
        async void Start()
        {
            var   filePath = Application.streamingAssetsPath + "/" + fileName;
            var   www      = new WWW(filePath);
            await www; // WWWでvrmファイルを読み込み

            //VRMファイルをGameObjectに変換
            var loadGameObject = await VRMImporter.LoadVrmAsync(www.bytes);

            loadGameObject.transform.localScale = Vector3.one * 1.13f; //サイズ補正

            // AvaterControllerをAddする
            // DIを実行したいのでコンテナ経由でAddComponentする
            _container.InstantiateComponent <AvaterController>(loadGameObject);

            _spawnSubject.OnNext(loadGameObject);
            _spawnSubject.OnCompleted();
        }
Пример #9
0
        /// <summary>
        /// メタが不要な場合のローダー
        /// </summary>
        void LoadVRMClicked_without_meta()
        {
#if UNITY_STANDALONE_WIN
            var path = FileDialogForWindows.FileDialog("open VRM", ".vrm");
#else
            var path = Application.dataPath + "/default.vrm";
#endif
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

#if true
            var bytes = File.ReadAllBytes(path);
            // なんらかの方法でByte列を得た

            if (m_loadAsync)
            {
                // ローカルファイルシステムからロードします
                VRMImporter.LoadVrmAsync(bytes, OnLoaded);
            }
            else
            {
                var root = VRMImporter.LoadFromBytes(bytes);
                OnLoaded(root);
            }
#else
            // ParseしたJSONをシーンオブジェクトに変換していく
            if (m_loadAsync)
            {
                // ローカルファイルシステムからロードします
                VRMImporter.LoadVrmAsync(path, OnLoaded);
            }
            else
            {
                var root = VRMImporter.LoadFromPath(path);
                OnLoaded(root);
            }
#endif
        }
Пример #10
0
        public async void LoadVrm(string name)
        {
            var path = Application.streamingAssetsPath + "/" + name + ".vrm";

            var www = new WWW(path);

            await www;

            var gameObject = await VRMImporter.LoadVrmAsync(www.bytes);

            gameObject.transform.position = new Vector3(1, 1, 1);

            gameObject.name = name;

            //DefaultのAnimation
            var addAnimation = new AddAnimation();

            addAnimation.AddAnimationController(gameObject);

            //Running用のスクリプトを追加する
            gameObject.AddComponent <CharacterMove>();
        }
Пример #11
0
        void Start()
        {
            if (GameManager.Instance.FromVRoidHub)
            {
                LoadCharacter(GameManager.Instance.LoadVrmPath);
                return;
            }
            var path = GameManager.Instance.LoadVrmPath;

            // Byte列を得る
            var bytes = File.ReadAllBytes(path);

            var context = new VRMImporterContext();

            // GLB形式をParseしてチャンクからJSONを取得しParseします
            context.ParseGlb(bytes);

            // 非同期に実行する
            VRMImporter.LoadVrmAsync(context, go =>
            {
                StartCoroutine(Setup(go));
            });
        }
Пример #12
0
    void OnFiles(List <string> aFiles, POINT aPos)
    {
        // do something with the dropped file names. aPos will contain the
        // mouse position within the window where the files has been dropped.
        Debug.Log("Dropped " + aFiles.Count + " files at: " + aPos + "\n" +
                  aFiles.Aggregate((a, b) => a + "\n" + b));

        string path0 = aFiles[0];

        try{
            byte[] bytes   = System.IO.File.ReadAllBytes(path0);
            var    tempVRM = VRMImporter.LoadFromBytes(bytes);
            tempVRM.transform.SetParent(move_root.transform);
            tempVRM.transform.position = vrm_root.transform.position;
            tempVRM.transform.rotation = vrm_root.transform.rotation;
            Destroy(vrm_root.gameObject);
            vrm_root = tempVRM.GetComponent <Animator>() as Animator;
            SetTimeline();
        }catch {
            Debug.Log("MissingRoad");
            return;
        }
    }
Пример #13
0
        void LoadVRMClicked()
        {
#if UNITY_STANDALONE_WIN
            var path = FileDialogForWindows.FileDialog("open VRM", ".vrm");
#else
            var path = Application.dataPath + "/default.vrm";
#endif
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            var bytes = File.ReadAllBytes(path);
            // なんらかの方法でByte列を得た

            var context = new VRMImporterContext(UniGLTF.UnityPath.FromFullpath(path));

            // GLB形式でJSONを取得しParseします
            context.ParseGlb(bytes);


            // metaを取得(todo: thumbnailテクスチャのロード)
            var meta = context.ReadMeta();
            Debug.LogFormat("meta: title:{0}", meta.Title);


            // ParseしたJSONをシーンオブジェクトに変換していく
            if (m_loadAsync)
            {
                LoadAsync(context);
            }
            else
            {
                VRMImporter.LoadFromBytes(context);
                OnLoaded(context.Root);
            }
        }
Пример #14
0
        public async void Display(string filePath)
        {
            var avatarData = await VRMImporter.ReadAllBytesAsync(filePath);

            await Client.Avatar.GenerateAvatar(avatarData);
        }
Пример #15
0
        private void LoadModel(string path)
        {
            try
            {
                // If BVH trigger is still on
                if (_bvhLoadingTrigger == true)
                {
                    LoadMotion(_bvhPathSaved);
                }

                if (!File.Exists(path))
                {
                    return;
                }

                Debug.LogFormat("{0}", path);
                var bytes   = File.ReadAllBytes(path);
                var context = new VRMImporterContext();

                // GLB形式でJSONを取得しParseします
                context.ParseGlb(bytes);

                // GLTFにアクセスできます
                Debug.LogFormat("{0}", context.GLTF);

                // Call License Update function
                _licensePanel.LicenseUpdatefunc(context);

                // GLTFからモデルを生成します
                try
                {
                    VRMImporter.LoadFromBytes(context);
                    _vrmModel = context.Root;
                    Debug.LogFormat("loaded {0}", _vrmModel.name);
                }
                catch (Exception ex)
                {
                    Debug.LogError(ex);
                }

                // Set up Model
                SetModel(_vrmModel);
                _facialExpressionPanel.CreateDynamicObject(_vrmModel);
                _leftEyeSaved  = _vrmModel.GetComponent <VRMLookAtBoneApplyer>().LeftEye.Transform;
                _rightEyeSaved = _vrmModel.GetComponent <VRMLookAtBoneApplyer>().RightEye.Transform;

                // Send VRM and Eye Transform
                _informationUpdate.SetVRM(_vrmModel, _leftEyeSaved, _rightEyeSaved);

                // Get all children in VRM model
                SkinnedMeshRenderer[] allChildren = _vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>();
                foreach (SkinnedMeshRenderer child in allChildren)
                {
                    child.GetComponent <SkinnedMeshRenderer>().updateWhenOffscreen = true;
                }

                // VRMFirstPerson initialization
                var m_firstPerson = _vrmModel.GetComponent <VRMFirstPerson>();
                if (m_firstPerson != null)
                {
                    m_firstPerson.Setup();
                }
                if (_freeViewpointToggle.isOn)
                {
                    _closeGameObject.EnableFirstPersonModeOption();
                }
            }
            catch (Exception e)
            {
                _errorMessagePanel.SetMessage(MultipleLanguageSupport.VrmLoadErrorMessage + "\nError message: " + e.Message);
                throw;
            }
        }