コード例 #1
0
        public OBBBoxCollider(Vector3 center, Vector3 size, Quaternion rotation, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit)
        {
            colliderRead.isOpen = true;

            this.appendTransform        = appendTransform;
            colliderRead.staticRotation = appendTransform ? appendTransform.rotation * rotation:rotation;
            colliderRead.positionOffset = appendTransform ? appendTransform.InverseTransformPoint(center) : center;
            colliderRead.boxSize        = new Vector3(Mathf.Abs(size.x), Mathf.Abs(size.y), Mathf.Abs(size.z));
            colliderRead.colliderType   = ColliderType.OBB;
            colliderRead.collideFunc    = collideFunc;
            colliderRead.colliderChoice = colliderChoice;
        }
コード例 #2
0
 public void CheckValue()
 {
     radius          = radius < 0 ? 0 : radius;
     length          = length < 0 ? 0 : length;
     boxSize         = boxSize.normalized * boxSize.magnitude;
     staticDirection = staticDirection == Vector3.zero ? Vector3.up : staticDirection;
     staticRotation  = Quaternion.FromToRotation(Vector3.up, staticDirection);
     if (((int)colliderChoice) == 0)
     {
         colliderChoice = ColliderChoice.Other;
     }
 }
コード例 #3
0
 public OBBBox(Vector3 center, Vector3 range, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside)
 {
     OBBposition                 = appendTransform ? appendTransform.InverseTransformPoint(center) : center;
     OBBRotation                 = appendTransform ? appendTransform.rotation * Quaternion.FromToRotation(Vector3.up, direction) : Quaternion.FromToRotation(Vector3.up, direction);
     this.appendTransform        = appendTransform;
     colliderRead.staticNormal   = OBBRotation;
     colliderRead.positionOffset = OBBposition;
     colliderRead.boxSize        = range * 0.5f;
     colliderRead.colliderType   = ColliderType.OBB;
     colliderRead.collideFunc    = CollideFunc.Outside;
     colliderRead.colliderChoice = colliderChoice;
 }
コード例 #4
0
 public OBBBoxCollider(Vector3 center, Vector3 range, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit)
 {
     colliderRead.isOpen         = true;
     OBBposition                 = appendTransform ? appendTransform.InverseTransformPoint(center) : center;
     OBBRotation                 = appendTransform ? appendTransform.rotation * Quaternion.FromToRotation(Vector3.up, direction) : Quaternion.FromToRotation(Vector3.up, direction);
     this.appendTransform        = appendTransform;
     colliderRead.staticRotation = OBBRotation;
     colliderRead.positionOffset = OBBposition;
     colliderRead.boxSize        = new Vector3(Mathf.Abs(range.x * 0.5f), Mathf.Abs(range.y * 0.5f), Mathf.Abs(range.z * 0.5f));
     colliderRead.colliderType   = ColliderType.OBB;
     colliderRead.collideFunc    = CollideFunc.OutsideLimit;
     colliderRead.colliderChoice = colliderChoice;
 }
コード例 #5
0
 public void CheckValue()
 {
     radius = radius < 0 ? 0 : radius;
     length = length < 0 ? 0 : length;
     if (length == 0 && colliderType == ColliderType.Capsule)
     {
         colliderType = ColliderType.Sphere;
     }
     boxSize         = boxSize.normalized * boxSize.magnitude;//OYM:我当初为啥要写这一段啊...
     staticDirection = staticDirection == Vector3.zero ? Vector3.up : staticDirection;
     staticRotation  = Quaternion.FromToRotation(Vector3.up, staticDirection);
     if (((int)colliderChoice) == 0)
     {
         colliderChoice = ColliderChoice.Other;
     }
 }
コード例 #6
0
        public SphereCollider(float radius, Vector3 positionOffset, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside)
        {
            colliderRead.radius = radius;

            colliderRead.colliderType   = ColliderType.Sphere;
            colliderRead.collideFunc    = CollideFunc.Outside;
            colliderRead.colliderChoice = colliderChoice;
            if (appendTransform != null)
            {
                this.appendTransform        = appendTransform;
                colliderRead.positionOffset = Quaternion.Inverse(appendTransform.rotation) * positionOffset;
            }
            else
            {
                colliderRead.positionOffset = positionOffset;
            }
        }
コード例 #7
0
        public SphereCollider(float radius, Vector3 positionOffset, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit)
        {
            colliderRead.isOpen = true;
            colliderRead.radius = radius;

            colliderRead.colliderType   = ColliderType.Sphere;
            colliderRead.collideFunc    = CollideFunc.OutsideLimit;
            colliderRead.colliderChoice = colliderChoice;
            if (appendTransform != null)
            {
                this.appendTransform        = appendTransform;
                colliderRead.positionOffset = positionOffset;
            }
            else
            {
                colliderRead.positionOffset = positionOffset;
            }
        }
コード例 #8
0
 public void CheckValue()
 {
     radius = radius < 0 ? 0 : radius;
     length = length < 0 ? 0 : length;
     if (Application.isPlaying)
     {
         if (length == 0 && colliderType == ColliderType.Capsule)
         {
             colliderType = ColliderType.Sphere;
         }
     }
     staticDirection = math.all(staticDirection == float3.zero) ? new float3(0, 1, 0) : math.normalize(staticDirection); //OYM:float3.up
     staticRotation  = Quaternion.FromToRotation(Vector3.up, staticDirection);
     if (((int)colliderChoice) == 0)
     {
         colliderChoice = ColliderChoice.Other;
     }
 }
コード例 #9
0
 public CapsuleCollider(float radius, Vector3 pointHead, Vector3 pointTail, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside)
 {
     colliderRead.colliderType   = ColliderType.Capsule;
     colliderRead.collideFunc    = collideFunc;
     colliderRead.colliderChoice = colliderChoice;
     colliderRead.radius         = radius;
     colliderRead.length         = (pointHead - pointTail).magnitude;
     if (appendTransform != null)
     {
         this.appendTransform         = appendTransform;
         colliderRead.staticDirection = Quaternion.Inverse(appendTransform.rotation) * (pointTail - pointHead);
         colliderRead.positionOffset  = appendTransform.InverseTransformPoint(pointHead);
     }
     else
     {
         colliderRead.positionOffset  = pointHead;
         colliderRead.staticDirection = pointTail - pointHead;
     }
 }
コード例 #10
0
 public CapsuleCollider(float radius, float length, Vector3 positionOffset, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit)
 {
     colliderRead.isOpen         = true;
     colliderRead.colliderType   = ColliderType.Capsule;
     colliderRead.collideFunc    = collideFunc;
     colliderRead.colliderChoice = colliderChoice;
     colliderRead.radius         = radius;
     colliderRead.length         = length;
     if (appendTransform != null)
     {
         this.appendTransform         = appendTransform;
         colliderRead.staticDirection = Quaternion.Inverse(appendTransform.rotation) * (direction == Vector3.zero ? Vector3.up : direction);
         colliderRead.positionOffset  = Quaternion.Inverse(appendTransform.rotation) * positionOffset;
     }
     else
     {
         colliderRead.positionOffset  = positionOffset;
         colliderRead.staticDirection = direction == Vector3.zero?Vector3.up:direction;
     }
 }
コード例 #11
0
        public static float CheckNearstPointToSegment(float MaxLength, Vector3 position, Vector3 direction, ColliderChoice choice, List <ADBRuntimePoint> pointTrans)
        {
            if (pointTrans == null || pointTrans.Count == 0)
            {
                return(MaxLength);
            }
            for (int i = 0; i < pointTrans.Count; i++)
            {
                if ((pointTrans[i].pointRead.colliderChoice & choice) == 0)
                {
                    continue;
                }

                if (direction == Vector3.zero)
                {
                    MaxLength = Mathf.Min(MaxLength, (position - pointTrans[i].trans.position).magnitude);
                }
                else
                {
                    Vector3 nearstPoint = position + direction * Mathf.Clamp01(Vector3.Dot(pointTrans[i].trans.position - position, direction) / direction.sqrMagnitude);
                    MaxLength = Mathf.Min(MaxLength, (nearstPoint - pointTrans[i].trans.position).magnitude - 0.001f);
                }
            }
            return(MaxLength);
        }