- Home /
Rigid Body Velocity max
Im trying to figure out how to change the velocity of the rigidbody back to "0" when im not pressing the direction key im using unity 5 and have tried :
Rigidbody.velocity = Vector3.ClampMagnitude (Rigidbody.velocity, 5);
but im getting errors from it on my script. anyone know a velocity rest to 0 when not pressing anything? here is my code in c#
using UnityEngine;
using System.Collections;
public class BoatController : MonoBehaviour {
CharacterController cc;
CharacterMotor cm;
ThirdPersonController tp;
GameObject player;
Transform defaultPlayerTransform;
bool isDriving=false;
// Use this for initialization
void Start () {
cc = GameObject.FindObjectOfType<CharacterController> ();
cm = GameObject.FindObjectOfType<CharacterMotor> ();
tp = GameObject.FindObjectOfType<ThirdPersonController> ();
player = cm.gameObject;
defaultPlayerTransform = player.transform.parent;
}
bool IsPlayerCloseToboat()
{
return Vector3.Distance (gameObject.transform.position,
player.transform.position)<5;
}
void SetDriving(bool isDriving)
{
this.isDriving = isDriving;
cm.enabled = !isDriving;
cc.enabled = !isDriving;
tp.enabled = !isDriving;
if (isDriving)
player.transform.parent = gameObject.transform;
else
player.transform.parent = defaultPlayerTransform;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.F)&& IsPlayerCloseToboat ())
SetDriving (!isDriving);
if (isDriving)
{
float forwardThrust = 0;
if(Input.GetKey(KeyCode.W))
forwardThrust = 1;
if(Input.GetKey(KeyCode.S))
forwardThrust = -1;
GetComponent<Rigidbody>().AddForce(gameObject.transform.forward*forwardThrust);
float turnThrust = 0;
if(Input.GetKey(KeyCode.A))
turnThrust = -1;
if(Input.GetKey(KeyCode.D))
turnThrust = 1;
GetComponent<Rigidbody>().AddRelativeTorque(Vector3.up*turnThrust);
}
Rigidbody.velocity = Vector3.ClampMagnitude (Rigidbody.velocity, 5);
}
}
Answer by Baste · Sep 03, 2015 at 05:31 PM
You're trying to clamp the velocity of the Rigidbody class instead of your rigidbody. This:
Rigidbody.velocity = Vector3.ClampMagnitude (Rigidbody.velocity, 5);
should be this:
GetComponent<Rigidbody>().velocity = Vector3.ClampMagnitude (Rigidbody.velocity, 5);
That just makes your rigibody never move faster than 5m/s, so that won't stop it when you stop pressing the input.
If you want your rigidbody to insta-stop, you can just set the velocity to zero:
GetComponent<Rigidbody>().velocity = new Vector3(0,0,0);
A better alternative is probably to increase the drag of your rigidbody, which makes it slow down faster.
Your answer
Follow this Question
Related Questions
How to set velocity to a previouse value 1 Answer
Slow down a character while they are midair while keeping their original velocity 0 Answers
Changing 1 parameter of rigidbody.velocity (Vector3) 2 Answers
Rigidbody.velocity Not working on parent rigidbody with four child rigidbodies attached to it 1 Answer
What is wrong with this rigidbody? 2 Answers