void OnWizardUpdate() { if (BoneSettingName == null) { BoneSettingName = new string[boneObjects.Length]; for (int i = 0; i < boneObjects.Length; i++) { SpringBoneSetting setting = (SpringBoneSetting)boneObjects[i]; if (setting.m_comment == "") { foreach (string name in setting.RootBones) { BoneSettingName[i] = "右のボーンを含む→" + name; break; } } else { BoneSettingName[i] = setting.m_comment; } } } if (ColliderSettingName == null) { ColliderSettingName = new string[colliderObjects.Length]; for (int i = 0; i < colliderObjects.Length; i++) { SpringBoneColliderSetting setting = (SpringBoneColliderSetting)colliderObjects[i]; ColliderSettingName[i] = setting.TargetName; } } }
void ExportSpringBone() { Object[] objects = targetModel.GetComponentsInChildren <SpringBone>(); //gizmo以外はエクスポート //transformは名前をエクスポートする(インポート時にFindで探す) for (int j = 0; j < objects.Length; j++) { SpringBone springbone = (SpringBone)objects[j]; SpringBoneSetting exportData = ScriptableObject.CreateInstance <SpringBoneSetting>(); 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/SpringBoneData_" + j + ".asset"); } }
void ApplySpringBone() { //gizmo以外は設定を反映 //transformはFind後したTransformを反映) for (int j = 0; j < boneObjects.Length; j++) { //設定データ SpringBoneSetting settingData = (SpringBoneSetting)boneObjects[j]; //対象のボーン //m_Utility.ChangeRootPath 設定されたパスをターゲット対象に変更する GameObject targetObject = GameObject.Find(m_Utility.ChangeRootPath(settingData.m_AttachObject, targetModel.name)); SpringBone springbone = targetObject.AddComponent <SpringBone>(); 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 SpringBoneColliderGroup[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 <SpringBoneColliderGroup>(); } } }