Пример #1
0
        private void OnEnable()
        {
            edittingAvatar = new VRCAvatar();

            editorFolderPath = Path.GetDirectoryName(
                AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(this)));
            editorFolderPath = editorFolderPath.Substring(0, editorFolderPath.LastIndexOf(Path.DirectorySeparatorChar) + 1);

            saveFolder = "Assets/";


            licenseText = FileUtility.GetFileTexts(editorFolderPath + LICENSE_FILE_NAME);
            readmeText  = FileUtility.GetFileTexts(editorFolderPath + README_FILE_NAME);
            usingSoftwareLicenseText = FileUtility.GetFileTexts(editorFolderPath + USING_SOFTWARE_FILE_NAME);

            avatarMonitorGUI = ScriptableObject.CreateInstance <AvatarMonitorGUI>();
            animationsGUI    = ScriptableObject.CreateInstance <AnimationsGUI>();
            avatarInfoGUI    = ScriptableObject.CreateInstance <AvatarInfoGUI>();
            faceEmotionGUI   = ScriptableObject.CreateInstance <FaceEmotionGUI>();
            probeAnchorGUI   = ScriptableObject.CreateInstance <ProbeAnchorGUI>();
            meshBoundsGUI    = ScriptableObject.CreateInstance <MeshBoundsGUI>();
            shaderGUI        = ScriptableObject.CreateInstance <ShaderGUI>();

            toolGUIs.Add(ToolFunc.AvatarInfo, avatarInfoGUI);
            toolGUIs.Add(ToolFunc.FaceEmotion, faceEmotionGUI);
            toolGUIs.Add(ToolFunc.ProbeAnchor, probeAnchorGUI);
            toolGUIs.Add(ToolFunc.Bounds, meshBoundsGUI);
            toolGUIs.Add(ToolFunc.Shader, shaderGUI);

            avatarMonitorGUI.Initialize(CurrentTool);
            animationsGUI.Initialize(edittingAvatar, originalAvatar, saveFolder, this, faceEmotionGUI);
            avatarInfoGUI.Initialize(originalAvatar, edittingAvatar, avatarMonitorGUI);
            probeAnchorGUI.Initialize(originalAvatar);

            selectedToolGUI = avatarInfoGUI;
            CurrentTool     = ToolFunc.AvatarInfo;

            (layoutType, language) = EditorSetting.instance.LoadSettingDataFromScriptableObject(
                editorFolderPath, language,
                avatarMonitorGUI, faceEmotionGUI);

            // Windowを開いたときにオブジェクトが選択されていればそれをアバターとして設定する
            if (Selection.gameObjects.Length == 1)
            {
                var selectionTransform = Selection.gameObjects.Single().transform;
                while (selectionTransform != null)
                {
                    targetAvatarDescriptor = selectionTransform.GetComponent <VRC_AvatarDescriptor>();
                    if (targetAvatarDescriptor != null)
                    {
                        OnChangedAvatar();
                        break;
                    }
                    selectionTransform = selectionTransform.parent;
                }
            }

            SceneView.onSceneGUIDelegate += OnSceneGUI;
        }
 public void Initialize(VRCAvatar editAvatar, VRCAvatar originalAvatar, string saveFolderPath, EditorWindow window, AnimationsGUI animationsGUI)
 {
     this.editAvatar     = editAvatar;
     this.originalAvatar = originalAvatar;
     animName            = DEFAULT_ANIM_NAME;
     this.parentWindow   = window as VRCAvatarEditorGUI;
     this.animationsGUI  = animationsGUI;
 }
Пример #3
0
        /// <summary>
        /// アバターを写す用のカメラを設定する
        /// </summary>
        public VRCAvatar SetAvatarPreview(VRC_AvatarDescriptor descriptor)
        {
            var avatar = avatarMonitorField.AddAvatar(descriptor);

            avatarMonitorField.SetAvatarCamBgColor(monitorBgColor);
            this.avatar = avatar;

            return(avatar);
        }
Пример #4
0
        public void Initialize(VRCAvatar originalAvatar, VRCAvatar editAvatar, AvatarMonitorGUI monitorGUI)
        {
            this.originalAvatar = originalAvatar;
            this.editAvatar     = editAvatar;
            this.monitorGUI     = monitorGUI;

            showIconTexture = Resources.Load <Texture2D>("Icon/ShowIcon");
            hideIconTexture = Resources.Load <Texture2D>("Icon/HideIcon");
        }
Пример #5
0
        public void Initialize(VRCAvatar editAvatar,
                               VRCAvatar originalAvatar,
                               string saveFolderPath,
                               VRCAvatarEditorGUI vrcAvatarEditorGUI,
                               FaceEmotionGUI2 faceEmotionGUI)
        {
            this.editAvatar         = editAvatar;
            this.originalAvatar     = originalAvatar;
            this.vrcAvatarEditorGUI = vrcAvatarEditorGUI;
            this.faceEmotionGUI     = faceEmotionGUI;

            Initialize(saveFolderPath);

            if (editAvatar != null && editAvatar.StandingAnimController != null)
            {
                ValidateAnimatorOverrideController(editAvatar.Animator, editAvatar.StandingAnimController);
            }
        }
Пример #6
0
        private void OnChangedAvatar()
        {
            edittingAvatar = avatarMonitorGUI.SetAvatarPreview(targetAvatarDescriptor);
            originalAvatar = new VRCAvatar(targetAvatarDescriptor);
            EditorSetting.instance.ApplySettingsToEditorGUI(edittingAvatar, faceEmotionGUI);

            var targetAvatarObj = targetAvatarDescriptor.gameObject;

            targetAvatarObj.SetActive(true);

            avatarMonitorGUI.MoveAvatarCam(false, false);
            animationsGUI.Initialize(edittingAvatar, originalAvatar, saveFolder, this, faceEmotionGUI);
            avatarInfoGUI.Initialize(originalAvatar, edittingAvatar, avatarMonitorGUI);
            meshBoundsGUI.Initialize(originalAvatar);
            probeAnchorGUI.Initialize(originalAvatar);

            CurrentTool = ToolFunc.AvatarInfo;
        }
Пример #7
0
        public VRCAvatar AddAvatar(VRC_AvatarDescriptor descriptor)
        {
            if (avatarObj != null)
            {
                UnityEngine.Object.DestroyImmediate(avatarObj);
            }

            var newAvatarObj = GameObject.Instantiate(descriptor.gameObject);

            newAvatarObj.name = descriptor.gameObject.name;
            newAvatarObj.transform.position = Vector3.zero;
            newAvatarObj.transform.rotation = Quaternion.identity;
            newAvatarObj.SetActive(true);
            AddGameObject(newAvatarObj);
            this.avatarObj = newAvatarObj;
            newAvatarObj.transform.position = new Vector3(0, 0, 0);
            this.descriptor = newAvatarObj.GetComponent <VRC_AvatarDescriptor>();
            avatar          = new VRCAvatar(this.descriptor);
            ResetCameraTransform();

            return(avatar);
        }
Пример #8
0
        // TODO : モデルによっては前髪あたりまでviewpositionがいってしまう
        private Vector3 CalcAvatarViewPosition(VRCAvatar avatar)
        {
            var viewPos  = Vector3.zero;
            var animator = avatar.Animator;
            var objTrans = avatar.Animator.transform;

            // leftEyeとRightEyeの位置からx, yを計算する
            var leftEyeTrans  = animator.GetBoneTransform(HumanBodyBones.LeftEye);
            var rightEyeTrans = animator.GetBoneTransform(HumanBodyBones.RightEye);

            viewPos = (leftEyeTrans.position + rightEyeTrans.position) / 2f;

            var renderer       = avatar.FaceMesh;
            var mesh           = renderer.sharedMesh;
            var vertices       = mesh.vertices;
            var local2WorldMat = renderer.transform.localToWorldMatrix;

            // 左目メッシュの頂点のうち, 左目ボーンから一番離れた頂点までの距離を計算する
            // 右目も同様に計算し, その平均距離+eyeBoneの平均z位置をzとする
            var leftMaxDistance  = CalcDistanceFromMaxFarVertexTo(leftEyeTrans, renderer);
            var rightMaxDistance = CalcDistanceFromMaxFarVertexTo(rightEyeTrans, renderer);

            viewPos.z += (leftMaxDistance + rightMaxDistance) / 2f;

            var leftEyeBoneIndex = Array.IndexOf(renderer.bones, leftEyeTrans);
            var boneWeights      = renderer.sharedMesh.boneWeights
                                   .Where(x => x.boneIndex0 == leftEyeBoneIndex ||
                                          x.boneIndex1 == leftEyeBoneIndex ||
                                          x.boneIndex2 == leftEyeBoneIndex ||
                                          x.boneIndex3 == leftEyeBoneIndex)
                                   .ToArray();

            // ローカル座標に変換
            viewPos = objTrans.worldToLocalMatrix.MultiplyPoint3x4(viewPos);

            return(viewPos);
        }
Пример #9
0
 public void Initinalize(VRCAvatar avatar)
 {
 }