void OnWizardUpdate()
        {
            if (BoneSettingName == null)
            {
                BoneSettingName = new string[boneObjects.Length];
                for (int i = 0; i < boneObjects.Length; i++)
                {
                    VRMSpringBoneSetting setting = (VRMSpringBoneSetting)boneObjects[i];
                    BoneSettingName[i] = setting.RootBones[0];

                    if (setting.m_comment == "")
                    {
                        BoneSettingName[i] = "右のボーンを含む→" + setting.RootBones[0];
                    }
                    else
                    {
                        BoneSettingName[i] = setting.m_comment;
                    }
                }
            }
            if (ColliderSettingName == null)
            {
                ColliderSettingName = new string[colliderObjects.Length];
                for (int i = 0; i < colliderObjects.Length; i++)
                {
                    VRMSpringBoneColliderSetting setting
                        = (VRMSpringBoneColliderSetting)colliderObjects[i];
                    ColliderSettingName[i] = setting.TargetName;
                }
            }
        }
        void ApplyDynamicBone()
        {
            //gizmo以外は設定を反映
            //transformはFind後したTransformを反映)
            for (int j = 0; j < boneObjects.Length; j++)
            {
                //設定データ
                VRMSpringBoneSetting settingData = (VRMSpringBoneSetting)boneObjects[j];
                //対象のボーン
                GameObject targetObject = GameObject.Find(settingData.m_AttachObject);

                //settingData.m_comment; 反映しない
                //settingData.m_center 反映しない
                //settingData.m_dragForce 反映しない

                for (int i = 0; i < settingData.RootBones.Length; i++)
                {
                    //対象のボーン
                    DynamicBone dynamicbone = targetObject.AddComponent <DynamicBone>();
                    dynamicbone.m_Colliders = new List <DynamicBoneColliderBase>();
                    dynamicbone.m_Stiffness = settingData.m_stiffnessForce * 0.25f;
                    dynamicbone.m_Gravity   = settingData.m_gravityDir * settingData.m_gravityPower;
                    GameObject findObject = GameObject.Find(settingData.RootBones[i]);
                    dynamicbone.m_Root   = findObject.GetComponent <Transform>();
                    dynamicbone.m_Radius = settingData.m_hitRadius;

                    for (int k = 0; k < settingData.ColliderGroups.Length; k++)
                    {
                        findObject = GameObject.Find(settingData.ColliderGroups[k]);
                        dynamicbone.m_Colliders.Add(findObject.GetComponent <DynamicBoneCollider>());
                    }
                }
            }
        }
        void ExportVRMSpringBone()
        {
            Object[] objects = targetModel.GetComponentsInChildren <VRMSpringBone>();

            //gizmo以外はエクスポート 
            //transformは名前をエクスポートする(インポート時にFindで探す)
            for (int j = 0; j < objects.Length; j++)
            {
                VRMSpringBone springbone = (VRMSpringBone)objects[j];

                VRMSpringBoneSetting exportData
                    = ScriptableObject.CreateInstance <VRMSpringBoneSetting>();

                exportData.m_AttachObject = m_Utility.GetHierarchyPath(springbone.gameObject.transform);

                exportData.m_comment        = springbone.m_comment;
                exportData.m_stiffnessForce = springbone.m_stiffnessForce;
                exportData.m_gravityPower   = springbone.m_gravityPower;
                exportData.m_gravityDir     = springbone.m_gravityDir;
                exportData.m_dragForce      = springbone.m_dragForce;
                if (springbone.m_center != null)
                {
                    exportData.m_center = m_Utility.GetHierarchyPath(springbone.m_center.transform);
                }
                exportData.RootBones = new string[springbone.RootBones.Count];
                for (int i = 0; i < springbone.RootBones.Count; i++)
                {
                    exportData.RootBones[i] = m_Utility.GetHierarchyPath(springbone.RootBones[i].transform);
                }
                exportData.m_hitRadius = springbone.m_hitRadius;

                exportData.ColliderGroups = new string[springbone.ColliderGroups.Length];
                for (int i = 0; i < springbone.ColliderGroups.Length; i++)
                {
                    exportData.ColliderGroups[i]
                        = m_Utility.GetHierarchyPath(springbone.ColliderGroups[i].transform);

                    if (ColliderTergetName.Count == 0)
                    {
                        ColliderTergetName.Add(exportData.ColliderGroups[i]);
                    }
                    else
                    {
                        if (ColliderTergetName.IndexOf(exportData.ColliderGroups[i]) == -1)
                        {
                            ColliderTergetName.Add(exportData.ColliderGroups[i]);
                        }
                        ;
                    }
                }

                AssetDatabase.CreateAsset(
                    exportData, "Assets/Models/Resources/SpringBoneData/SpringBone/VRMSpringBoneData_" + j + ".asset");
            }
        }
Example #4
0
        void ApplyVRMSpringBone()
        {
            //モデル上でsecondaryの部分を探す
            GameObject targetObject = GameObject.Find("secondary");

            //すべて削除してからスプリングボーンをつける
            VRMSpringBone[] removeComponents = targetObject.GetComponents <VRMSpringBone>();
            foreach (VRMSpringBone removeComponent in removeComponents)
            {
                DestroyImmediate(removeComponent);
            }

            //gizmo以外は設定を反映
            //transformはFind後したTransformを反映)
            for (int j = 0; j < boneObjects.Length; j++)
            {
                //設定データ
                VRMSpringBoneSetting settingData = (VRMSpringBoneSetting)boneObjects[j];
                //対象のボーン


                VRMSpringBone springbone = targetObject.AddComponent <VRMSpringBone>();

                springbone.m_comment        = settingData.m_comment;
                springbone.m_stiffnessForce = settingData.m_stiffnessForce;
                springbone.m_gravityPower   = settingData.m_gravityPower;
                springbone.m_gravityDir     = settingData.m_gravityDir;
                springbone.m_dragForce      = settingData.m_dragForce;
                if (settingData.m_center != null)
                {
                    GameObject findObject = GameObject.Find(settingData.m_center);
                    if (findObject != null)
                    {
                        springbone.m_center = findObject.GetComponent <Transform>();
                    }
                }
                springbone.RootBones = new List <Transform>();
                for (int i = 0; i < settingData.RootBones.Length; i++)
                {
                    GameObject findObject = GameObject.Find(settingData.RootBones[i]);
                    springbone.RootBones.Add(findObject.GetComponent <Transform>());
                }
                springbone.m_hitRadius    = settingData.m_hitRadius;
                springbone.ColliderGroups = new VRMSpringBoneColliderGroup[settingData.ColliderGroups.Length];
                for (int i = 0; i < settingData.ColliderGroups.Length; i++)
                {
                    GameObject findObject = GameObject.Find(settingData.ColliderGroups[i]);
                    springbone.ColliderGroups[i] = findObject.GetComponent <VRMSpringBoneColliderGroup>();
                }
            }
        }
        void ApplyVRMSpringBone()
        {
            //gizmo以外は設定を反映
            //transformはFind後したTransformを反映)
            for (int j = 0; j < boneObjects.Length; j++)
            {
                //設定データ
                VRMSpringBoneSetting settingData = (VRMSpringBoneSetting)boneObjects[j];

                //対象のボーン
                //m_Utility.ChangeRootPath 設定されたパスをターゲット対象に変更する
                GameObject targetObject
                    = GameObject.Find(m_Utility.ChangeRootPath(settingData.m_AttachObject, targetModel.name));

                VRMSpringBone springbone = targetObject.AddComponent <VRMSpringBone>();

                springbone.m_comment        = settingData.m_comment;
                springbone.m_stiffnessForce = settingData.m_stiffnessForce;
                springbone.m_gravityPower   = settingData.m_gravityPower;
                springbone.m_gravityDir     = settingData.m_gravityDir;
                springbone.m_dragForce      = settingData.m_dragForce;
                if (settingData.m_center != null)
                {
                    GameObject findObject = GameObject.Find(settingData.m_center);
                    if (findObject != null)
                    {
                        springbone.m_center = findObject.GetComponent <Transform>();
                    }
                }
                springbone.RootBones = new List <Transform>();
                for (int i = 0; i < settingData.RootBones.Length; i++)
                {
                    GameObject findObject
                        = GameObject.Find(m_Utility.ChangeRootPath(settingData.RootBones[i], targetModel.name));

                    springbone.RootBones.Add(findObject.GetComponent <Transform>());
                }
                springbone.m_hitRadius    = settingData.m_hitRadius;
                springbone.ColliderGroups = new VRMSpringBoneColliderGroup[settingData.ColliderGroups.Length];
                for (int i = 0; i < settingData.ColliderGroups.Length; i++)
                {
                    GameObject findObject
                        = GameObject.Find(m_Utility.ChangeRootPath(settingData.ColliderGroups[i], targetModel.name));

                    springbone.ColliderGroups[i] = findObject.GetComponent <VRMSpringBoneColliderGroup>();
                }
            }
        }