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); } }
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); }
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); } }
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)); }
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); }
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; }