Ejemplo n.º 1
0
        /// <summary>
        /// 제공된 설정으로 꼬리에 콜리 더 생성하기
        /// </summary>
        private void AddColliders()
        {
            collisionOffsets  = new List <Vector3>();
            collisionFlags    = new List <float>();
            collisionContacts = new List <Collision>();

            collisionOffsets.Add(Vector3.zero);
            collisionFlags.Add(0f);
            collisionContacts.Add(null);

            for (int i = 1; i < TailTransforms.Count; i++)
            {
                collisionOffsets.Add(Vector3.zero);
                collisionContacts.Add(null);
                collisionFlags.Add(0f);
                if (CollidersSameLayer)
                {
                    TailTransforms[i].gameObject.layer = gameObject.layer;
                }
                else
                {
                    TailTransforms[i].gameObject.layer = CollidersLayer;
                }
            }

            if (CollidersType == FTailColliders.Boxes)
            {
                for (int i = 1; i < TailTransforms.Count; i++)
                {
                    BoxCollider           b    = TailTransforms[i].gameObject.AddComponent <BoxCollider>();
                    FTail_CollisionHelper tcol = TailTransforms[i].gameObject.AddComponent <FTail_CollisionHelper>().Init(CollidersAddRigidbody);
                    tcol.index      = i;
                    tcol.ParentTail = this;
                    b.size          = GetColliderBoxSizeFor(TailTransforms, i);
                }
            }
            else
            {
                for (int i = 1; i < TailTransforms.Count; i++)
                {
                    SphereCollider        b    = TailTransforms[i].gameObject.AddComponent <SphereCollider>();
                    FTail_CollisionHelper tcol = TailTransforms[i].gameObject.AddComponent <FTail_CollisionHelper>().Init(CollidersAddRigidbody);
                    tcol.index      = i;
                    tcol.ParentTail = this;
                    b.radius        = GetColliderSphereRadiusFor(TailTransforms, i);
                }
            }
        }
        private void OnCollisionEnter(Collision collision)
        {
            if (ParentTail == null)
            {
                GameObject.Destroy(this);
                return;
            }


            FTail_CollisionHelper helper = collision.transform.GetComponent <FTail_CollisionHelper>();

            if (helper)
            {
                if (ParentTail.CollideWithOtherTails == false)
                {
                    return;
                }
                if (helper.ParentTail == ParentTail)
                {
                    return;
                }
            }

            //if (ParentTail.TailTransforms.Contains(collision.transform)) return;

            if (previousCollision != null)
            {
                return;
            }

            if (ParentTail.IgnoredColliders.Contains(collision.collider))
            {
                return;
            }

            //if (ParentTail.CollideWithOtherTails == false) if (collision.transform.GetComponent<FTail_CollisionHelper>()) return;

            ParentTail.CollisionDetection(index, collision);
            previousCollision = collision.transform;
        }