private void AddDynamicBonecollider(GameObject obj, VRMSpringBoneColliderGroup.SphereCollider collider) { var dynamicbonecollider = obj.AddComponent <DynamicBoneCollider>(); dynamicbonecollider.m_Radius = collider.Radius; dynamicbonecollider.m_Center = collider.Offset; }
/// <summary> /// 球の座標とサイズをコライダーに反映し、編集を終了します。 /// </summary> internal static void CommitEditedColliders(bool symmetrically = false) { var root = GetPrefabRootVRM(); if (root == null) { return; } var head = FindByName("J_Bip_C_Head"); if (head == null) { throw new Exception("J_Bip_C_Head が見つかりません"); } var cgrp = head.GetComponent <VRMSpringBoneColliderGroup>(); if (cgrp == null) { throw new Exception("J_Bip_C_Head に VRMSpringBoneColliderGroup がアタッチされていません"); } var clds = FindByName("_Colliders_"); if (clds == null) { throw new Exception("_Colliders_ が見つかりません"); } var result = Enumerable.Empty <VRMSpringBoneColliderGroup.SphereCollider>(); foreach (var cld in clds.GetComponentsInChildren <SphereCollider>()) { var t = cld.GetComponent <Transform>(); var radius = t.localScale.magnitude / Vector3.one.magnitude / 2; var offset = t.localPosition; var c = new VRMSpringBoneColliderGroup.SphereCollider { Radius = radius, Offset = offset }; result = result.Append(c); if (symmetrically && 0.001f <= Math.Abs(offset.x)) { var offset2 = new Vector3(-offset.x, offset.y, offset.z); var c2 = new VRMSpringBoneColliderGroup.SphereCollider { Radius = radius, Offset = offset2 }; result = result.Append(c2); } } if (result.Count() == 0) { throw new Exception("球が見つかりません"); } cgrp.Colliders = result.ToArray(); RevertVisibility(); EditorUtility.SetDirty(head); EditorUtility.SetDirty(root); AssetDatabase.SaveAssets(); }