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"); } }
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>(); } } }