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 "

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

Upvotes: 0

Views: 664

Answers (1)

Tigran
Tigran

Reputation: 62265

From the code provided it looks like that those variable are define limits of velocity, that assigned to the rigidbody2D.velocity.x (the call to abs is to compare absolute vectors magnitudes and not just coordinates).

It's not clear were the rigidbody2D.velocity.x is set, but the code presumes that somehow it may be bigger then 3 and program breaks on that maximum.

Upvotes: 0

Related Questions