void OnWizardUpdate() { if (BoneSettingName == null) { BoneSettingName = new string[boneObjects.Length]; for (int i = 0; i < boneObjects.Length; i++) { DynamicBoneSetting setting = (DynamicBoneSetting)boneObjects[i]; if (setting.m_Root != null) { BoneSettingName[i] = setting.m_Root.ToString(); } } } if (ColliderSettingName == null) { ColliderSettingName = new string[colliderObjects.Length]; for (int i = 0; i < colliderObjects.Length; i++) { DynamicBoneColliderSetting setting = (DynamicBoneColliderSetting)colliderObjects[i]; ColliderSettingName[i] = setting.TargetName; } } }
void ApplyVRMSpringBone() { for (int j = 0; j < boneObjects.Length; j++) { GameObject findObject = null; //設定データ DynamicBoneSetting settingData = (DynamicBoneSetting)boneObjects[j]; //対象のボーン GameObject targetObject = GameObject.Find(settingData.m_AttachObject); VRMSpringBone springbone = targetObject.AddComponent <VRMSpringBone>(); springbone.m_stiffnessForce = settingData.m_Stiffness * 4.0f; //重力の設定 大きさが0であればY方向-1に設定 //大きさは2以上は2にする springbone.m_gravityPower = settingData.m_Gravity.magnitude; if (springbone.m_gravityPower > 2.0f) { springbone.m_gravityPower = 2.0f; } if (springbone.m_gravityPower != 0) { springbone.m_gravityDir = settingData.m_Gravity / settingData.m_Gravity.magnitude; } else { springbone.m_gravityDir = new Vector3(0, -1.0f, 0); } springbone.RootBones = new List <Transform>(); findObject = GameObject.Find(settingData.m_Root); springbone.RootBones.Add(findObject.GetComponent <Transform>()); springbone.m_hitRadius = settingData.m_Radius; springbone.ColliderGroups = new VRMSpringBoneColliderGroup[settingData.m_Colliders.Count]; for (int i = 0; i < settingData.m_Colliders.Count; i++) { findObject = GameObject.Find(settingData.m_Colliders[i]); springbone.ColliderGroups[i] = findObject.GetComponent <VRMSpringBoneColliderGroup>(); } } }
void ExportDynamicBone() { DynamicBone[] bones = targetModel.GetComponentsInChildren <DynamicBone>(); //gizmo以外はエクスポート //transformは名前をエクスポートする(インポート時にFindで探す) for (int j = 0; j < bones.Length; j++) { DynamicBone dynamicbone = bones[j]; DynamicBoneSetting exportData = ScriptableObject.CreateInstance <DynamicBoneSetting>(); //フルパスを取得する exportData.m_AttachObject = m_Utility.GetHierarchyPath(dynamicbone.gameObject.transform); if (dynamicbone.m_Root != null) { exportData.m_Root = m_Utility.GetHierarchyPath(dynamicbone.m_Root); } exportData.m_UpdateRate = dynamicbone.m_UpdateRate; exportData.m_UpdateMode = dynamicbone.m_UpdateMode; exportData.m_Damping = dynamicbone.m_Damping; exportData.m_DampingDistrib = dynamicbone.m_DampingDistrib; exportData.m_Elasticity = dynamicbone.m_Elasticity; exportData.m_ElasticityDistrib = dynamicbone.m_ElasticityDistrib; exportData.m_Stiffness = dynamicbone.m_Stiffness; exportData.m_StiffnessDistrib = dynamicbone.m_StiffnessDistrib; exportData.m_Inert = dynamicbone.m_Inert; exportData.m_InertDistrib = dynamicbone.m_InertDistrib; exportData.m_Radius = dynamicbone.m_Radius; exportData.m_RadiusDistrib = dynamicbone.m_RadiusDistrib; exportData.m_EndLength = dynamicbone.m_EndLength; exportData.m_EndOffset = dynamicbone.m_EndOffset; exportData.m_Gravity = dynamicbone.m_Gravity; exportData.m_Force = dynamicbone.m_Force; exportData.m_Colliders = new List <string>(); foreach (DynamicBoneCollider collider in dynamicbone.m_Colliders) { if (collider == null) { Debug.Log(dynamicbone.gameObject.transform + "はcolliderがnullだからskipしたよ"); } else { string colliderName = m_Utility.GetHierarchyPath(collider.gameObject.transform); exportData.m_Colliders.Add(colliderName); //コライダーのついているオブジェクトの名前を登録する(重複なし、なければ追加) if (ColliderTergetName.Count == 0) { ColliderTergetName.Add(colliderName); } else { if (ColliderTergetName.IndexOf(colliderName) == -1) { ColliderTergetName.Add(colliderName); } ; } } } exportData.m_Exclusions = new List <string>(); if (dynamicbone.m_Exclusions != null) { foreach (Transform exclusion in dynamicbone.m_Exclusions) { exportData.m_Exclusions.Add(m_Utility.GetHierarchyPath(exclusion)); } } exportData.m_FreezeAxis = dynamicbone.m_FreezeAxis; exportData.m_DistantDisable = dynamicbone.m_DistantDisable; if (dynamicbone.m_ReferenceObject != null) { exportData.m_ReferenceObject = m_Utility.GetHierarchyPath(dynamicbone.m_ReferenceObject.transform); } exportData.m_DistanceToObject = dynamicbone.m_DistanceToObject; AssetDatabase.CreateAsset( exportData, "Assets/Models/Resources/DynamicBoneData/DynamicBone/DynamicBoneData_" + j + ".asset"); } }
void ApplyDynamicBone() { //gizmo以外は設定を反映 //transformはFind後したTransformを反映) for (int j = 0; j < boneObjects.Length; j++) { //設定データ DynamicBoneSetting settingData = (DynamicBoneSetting)boneObjects[j]; //内部変数の定義 GameObject findObject = null; //対象のボーン //m_Utility.ChangeRootPath 設定されたパスをターゲット対象に変更する GameObject targetObject = GameObject.Find(m_Utility.ChangeRootPath(settingData.m_AttachObject, targetModel.name)); DynamicBone dynamicbone = targetObject.AddComponent <DynamicBone>(); findObject = GameObject.Find(m_Utility.ChangeRootPath(settingData.m_Root, targetModel.name)); dynamicbone.m_Root = findObject.GetComponent <Transform>(); dynamicbone.m_UpdateRate = settingData.m_UpdateRate; dynamicbone.m_UpdateMode = settingData.m_UpdateMode; dynamicbone.m_Damping = settingData.m_Damping; dynamicbone.m_DampingDistrib = settingData.m_DampingDistrib; dynamicbone.m_Elasticity = settingData.m_Elasticity; dynamicbone.m_ElasticityDistrib = settingData.m_ElasticityDistrib; dynamicbone.m_Stiffness = settingData.m_Stiffness; dynamicbone.m_StiffnessDistrib = settingData.m_StiffnessDistrib; dynamicbone.m_Inert = settingData.m_Inert; dynamicbone.m_InertDistrib = settingData.m_InertDistrib; dynamicbone.m_Radius = settingData.m_Radius; dynamicbone.m_RadiusDistrib = settingData.m_RadiusDistrib; dynamicbone.m_EndLength = settingData.m_EndLength; dynamicbone.m_EndOffset = settingData.m_EndOffset; dynamicbone.m_Gravity = settingData.m_Gravity; dynamicbone.m_Force = settingData.m_Force; dynamicbone.m_Colliders = new List <DynamicBoneColliderBase>(); if (settingData.m_Colliders != null) { foreach (string collider in settingData.m_Colliders) { findObject = GameObject.Find(m_Utility.ChangeRootPath(collider, targetModel.name)); if (findObject != null) { dynamicbone.m_Colliders.Add(findObject.GetComponent <DynamicBoneCollider>()); } } } if (settingData.m_Exclusions != null) { dynamicbone.m_Exclusions = new List <Transform>(); foreach (string exclusion in settingData.m_Exclusions) { findObject = GameObject.Find(m_Utility.ChangeRootPath(exclusion, targetModel.name)); if (findObject != null) { dynamicbone.m_Exclusions.Add(findObject.GetComponent <Transform>()); } } } dynamicbone.m_FreezeAxis = settingData.m_FreezeAxis; dynamicbone.m_DistantDisable = settingData.m_DistantDisable; if (settingData.m_ReferenceObject != null) { findObject = GameObject.Find(m_Utility.ChangeRootPath(settingData.m_ReferenceObject, targetModel.name)); if (findObject != null) { dynamicbone.m_ReferenceObject = findObject.GetComponent <Transform>(); } } dynamicbone.m_DistanceToObject = settingData.m_DistanceToObject; } }