# How to limit the speed of a rigidBody ?

Hi,I have checked several other question on this topic already and tried to copy some of the solutions but it doesn’t speed to be working.I can’t tell what i am doing wrong i have tried only adding force when the velocity.Magnitude is below maxspeed that doesn’t work and i have also tried subtracting force/adding force in oppisite direction like in the script below that doesn’t work either

``````using UnityEngine;
using System.Collections;

public class Wander : MonoBehaviour {

Vector3 targetPosition,direction;
Rigidbody2D rbSelf;
public float changeDirectionTimer,timeBeforeDirectionChange,magnitude;
public float wanderSpeed,maxSpeed,wanderSpeedLerp;
public bool usingRigidBody;

void Start ()
{
targetPosition = transform.position + new Vector3 (Random.Range (-magnitude,magnitude),Random.Range (-magnitude,magnitude));
rbSelf = GetComponent<Rigidbody2D>();
direction = targetPosition - transform.position;
}

void FixedUpdate ()
{
if(usingRigidBody == true)
{

if(rbSelf.velocity.magnitude > maxSpeed)
{
}
}

if(usingRigidBody == false)
{
transform.position = Vector3.MoveTowards(transform.position,targetPosition,wanderSpeedLerp);
}

changeDirectionTimer++;

if(Mathf.RoundToInt( transform.position.x ) == Mathf.RoundToInt( targetPosition.x))
{
if(Mathf.RoundToInt( transform.position.y ) == Mathf.RoundToInt( targetPosition.y))
{
ChangePoisition();
}
}

if(changeDirectionTimer >= Random.Range( timeBeforeDirectionChange - 20 , timeBeforeDirectionChange+ 20))
{
ChangePoisition();
}

Vector3 rayDirection = targetPosition - transform.position;
RaycastHit2D hit = Physics2D.Raycast (transform.position,rayDirection,Vector3.Distance(transform.position,targetPosition) + 0.1f,mask);
Debug.DrawRay(transform.position ,rayDirection ,Color.blue);
Debug.Log (hit.collider.tag);

if(hit.collider.tag == "Walls")
{
ChangePoisition ();
}
}

void ChangePoisition()
{
targetPosition = transform.position + new Vector3 (Random.Range (-magnitude,magnitude),Random.Range (-magnitude,magnitude));
changeDirectionTimer=0;
direction = targetPosition - transform.position;
}

void OnCollisionStay2D()
{
ChangePoisition ();
}
}
``````

An easy solution would be:

``````FixedUpdate(){
rigidbody.velocity = Vector3.ClampMagnitude(rigidbody.velocity, maxVelocity);
}
``````