Ejemplo n.º 1
0
        private void AddDynamicBonecollider(GameObject obj, VRMSpringBoneColliderGroup.SphereCollider collider)
        {
            var dynamicbonecollider = obj.AddComponent <DynamicBoneCollider>();

            dynamicbonecollider.m_Radius = collider.Radius;
            dynamicbonecollider.m_Center = collider.Offset;
        }
Ejemplo n.º 2
0
        /// <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();
        }