示例#1
0
 public BoundingBoxVoxelBounds3(Collider collider, IgnoreAxis ignoreAxis = IgnoreAxis.none)
 {
     if (collider is MeshCollider meshCollider)
     {
         Bounds meshBounds = meshCollider.sharedMesh.bounds;
         center   = collider.transform.localToWorldMatrix.MultiplyPoint(meshBounds.center);
         scale    = Vector3.Scale(collider.transform.lossyScale, meshBounds.size);
         rotation = collider.transform.rotation;
     }
     else if (collider is BoxCollider boxCollider)
     {
         center   = collider.transform.localToWorldMatrix.MultiplyPoint(boxCollider.center);
         scale    = Vector3.Scale(collider.transform.lossyScale, boxCollider.size);
         rotation = collider.transform.rotation;
     }
     else if (collider is SphereCollider sphereCollider)
     {
         center   = collider.transform.localToWorldMatrix.MultiplyPoint(sphereCollider.center);
         scale    = Vector3.Scale(collider.transform.lossyScale, Vector3.one * sphereCollider.radius * 2f);
         rotation = collider.transform.rotation;
     }
     else
     {
         center   = collider.bounds.center;
         scale    = collider.bounds.size;
         rotation = Quaternion.identity;
     }
     this.ignoreAxis = ignoreAxis;
 }
示例#2
0
 public BoundingBoxVoxelBounds3(Vector3 center, Vector3 scale, Quaternion rotation, IgnoreAxis ignoreAxis = IgnoreAxis.none)
 {
     this.center     = center;
     this.scale      = scale;
     this.rotation   = rotation;
     this.ignoreAxis = ignoreAxis;
 }
        /// <summary>
        /// Already calculates delta-time, no need to use in function call.
        /// </summary>
        public static Transform LookAtOverTime(this Transform transform, Transform target, float speed, IgnoreAxis ignoreAxi = IgnoreAxis.none)
        {
            Vector3 targetDirection = target.position - transform.position;

            switch (ignoreAxi)
            {
            case IgnoreAxis.x:
                targetDirection.x = 0;
                break;

            case IgnoreAxis.y:
                targetDirection.y = 0;
                break;

            case IgnoreAxis.z:
                targetDirection.z = 0;
                break;

            default:
                break;
            }
            var targetRotation = Quaternion.LookRotation(targetDirection);
            var deltaAngle     = Quaternion.Angle(transform.rotation, targetRotation);

            if (deltaAngle != 0.00F)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime / deltaAngle);
            }

            return(transform);
        }
示例#4
0
 public bool IsIgnoringAxis(IgnoreAxis axis)
 {
     return((axis & ignoreAxis) != IgnoreAxis.none);
 }