RigidbodyFPSWalker

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
 
Line 1: Line 1:
{Javascript}
+
==Description==
var speed = 10.0;
+
This is a rigidbody based first person controller. Traditionally first person controllers are done using the character controller and this is the recommended way, but sometimes you want it to use real physics. So forces automatically affect the rigidbody, and joints can be used to eg. make a rope swinging game.
var gravity = 10.0;
+
var maxVelocityChange = 10.0;
+
var canJump = true;
+
var jumpHeight = 2.0;
+
private var grounded = false;
+
 
+
@script RequireComponent(Rigidbody)
+
 
+
function Awake ()
+
{
+
rigidbody.freezeRotation = true;
+
rigidbody.useGravity = false;
+
}
+
 
+
function FixedUpdate ()
+
{
+
if (grounded)
+
{
+
// Calculate how fast we should be moving
+
var targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
+
targetVelocity = transform.TransformDirection(targetVelocity);
+
targetVelocity *= speed;
+
+
// Apply a force that attempts to reach our target velocity
+
var velocity = rigidbody.velocity;
+
var velocityChange = (targetVelocity - velocity);
+
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
+
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
+
velocityChange.y = 0;
+
rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
+
+
// Jump
+
if (canJump && Input.GetButton("Jump"))
+
{
+
rigidbody.velocity = Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
+
}
+
}
+
+
// We apply gravity manually for more tuning control
+
rigidbody.AddForce(Vector3 (0, -gravity * rigidbody.mass, 0));
+
+
grounded = false;
+
}
+
 
+
function OnCollisionStay ()
+
{
+
grounded = true;
+
}
+
 
+
function CalculateJumpVerticalSpeed ()
+
{
+
// From the jump height and gravity we deduce the upwards speed
+
// for the character to reach at the apex.
+
return Mathf.Sqrt(2 * jumpHeight * gravity);
+
}
+
{Javascript}
+

Revision as of 16:36, 24 September 2006

Description

This is a rigidbody based first person controller. Traditionally first person controllers are done using the character controller and this is the recommended way, but sometimes you want it to use real physics. So forces automatically affect the rigidbody, and joints can be used to eg. make a rope swinging game.

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox