Exemple #1
0
        private static void TransformGeometry(CharacterController collider)
        {
            Vector3 vOffset;
            float   fOffset        = HalfSphereOffset(collider, out vOffset);
            Vector3 vOffsetFlipped = vOffset * -1.0f;

            Vector3    scale = CylinderScale(collider, fOffset);
            Quaternion q     = CylinderQuat();

            for (int i = 0; i < cylinder.Length; i++)
            {
                xformCylinder[i] = TransformCylinderVert(cylinder[i], collider, scale, q);
            }

            Quaternion halfRot        = HalfSphereQuat();
            Quaternion halfRotFlipped = HalfSphereQuatFlipped();

            float radiusScale;
            float cylinderScale;

            CV_Common.CapsuleObjectScale(collider.transform, out radiusScale, out cylinderScale);
            float radius = collider.radius * radiusScale;

            for (int i = 0; i < halfSphere.Length; i++)
            {
                xformHalfSphere[i]        = TransformHalfSphereVert(halfSphere[i], collider, halfRot, vOffset, radius);
                xformHalfSphereFlipped[i] = TransformHalfSphereVert(halfSphere[i], collider, halfRotFlipped, vOffsetFlipped, radius);
            }
        }
Exemple #2
0
        private static float HalfSphereOffset(CapsuleCollider collider, out Vector3 vOffset)
        {
            float radiusScale;
            float cylinderScale;

            CV_Common.CapsuleObjectScale(collider.transform, out radiusScale, out cylinderScale);

            float radius = collider.radius * radiusScale;
            float offset = (collider.height / 2.0f) - radius;

            offset = (cylinderScale * radius) + (cylinderScale * offset) - radius;
            offset = Mathf.Max(0f, offset);

            vOffset = Vector3.zero;

            switch (collider.direction)
            {
            case DIRECTION_X_AXIS:
                vOffset = new Vector3(offset, 0.0f, 0.0f);
                break;

            case DIRECTION_Y_AXIS:
                vOffset = new Vector3(0.0f, offset, 0.0f);
                break;

            case DIRECTION_Z_AXIS:
                vOffset = new Vector3(0.0f, 0.0f, offset);
                break;
            }

            return(offset);
        }
Exemple #3
0
        private static void TransformGeometry(SphereCollider collider)
        {
            float scale = CV_Common.ObjectMaxScale(collider.transform);

            for (int i = 0; i < verts.Length; i++)
            {
                xformVerts[i] = Transform(verts[i], collider, scale);
            }
        }
Exemple #4
0
        private static Vector3 CylinderScale(CharacterController collider, float fOffset)
        {
            float radiusScale;
            float cylinderScale;

            CV_Common.CapsuleObjectScale(collider.transform, out radiusScale, out cylinderScale);

            float radius = collider.radius * radiusScale;
            float height = fOffset * 2.0f;

            return(new Vector3(radius, height, radius));
        }
Exemple #5
0
        private static float HalfSphereOffset(CharacterController collider, out Vector3 vOffset)
        {
            float radiusScale;
            float cylinderScale;

            CV_Common.CapsuleObjectScale(collider.transform, out radiusScale, out cylinderScale);

            float radius = collider.radius * radiusScale;
            float offset = (collider.height / 2.0f) - radius;

            offset = (cylinderScale * radius) + (cylinderScale * offset) - radius;
            offset = Mathf.Max(0f, offset);

            vOffset = new Vector3(0.0f, offset, 0.0f);

            return(offset);
        }
Exemple #6
0
		private static Vector3 CylinderScale( CapsuleCollider collider, float fOffset )
		{
			float radiusScale;
			float cylinderScale;
			CV_Common.CapsuleObjectScale( collider.transform, out radiusScale, out cylinderScale );

			float radius = collider.radius * radiusScale;
			float height = fOffset * 2.0f;

			switch( collider.direction )
			{
				case DIRECTION_X_AXIS:
					return new Vector3( height, radius, radius );
				
				case DIRECTION_Y_AXIS:
					return new Vector3( radius, height, radius );

				case DIRECTION_Z_AXIS:
					return new Vector3( radius, radius, height );
			}

			return Vector3.zero;
		}