- Home /
c# player move in Unity
the code is working very well to move a rigidbody with Right and Left arrows , but i can't understand what is the point of using maxVelocity and absVelX , i don't know their job in the code .. when i remove both it works very well , but it seems i will need both in the advanced game level . this is a course form lynda called " Unity 2d essential training by jesse freeman " .. please help
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public float speed=10f;
public Vector2 maxVelocity=new Vector2(3,5);
public bool standing;
public float jetSpeed=15f;
// Update is called once per frame
void Update () {
//Force resetted each frame
var forceX = 0f;
var forceY = 0f;
var absVelX = Mathf.Abs (rigidbody2D.velocity.x);
var absVelY = Mathf.Abs (rigidbody2D.velocity.y);
if (Input.GetKey ("right")) {
if (absVelX < maxVelocity.x)
forceX = speed;
transform.localScale=new Vector3(1,1,1);//Sprite orignal pose
} else if (Input.GetKey ("left")) {
if (absVelX < maxVelocity.x)
forceX = -speed;
transform.localScale=new Vector3(-1,1,1);//Sprite reversal pose
}
rigidbody2D.AddForce(new Vector2(forceX,forceY));
}
}
Answer by moviemastersdk · Dec 10, 2014 at 03:14 AM
Since you're adding a force to a rigid body. you need to make sure you're not adding force if you've hit the desired velocity.
think of an object in zero gravity, if you continue to add force to the object, it will accelerate infinitely.
So the maxVelocity is basically there so that you don't exceed the desired movement speed
absVelX and absVelX are just the rigidbodys current velocity.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
I can't change a variable that is in another script. 1 Answer
how to use / simulate a using declaration in unityscript 1 Answer
why Raycast2D doesn't work properly? 0 Answers