Also my fix for using a non integer SPEED less than 1 (my speed is 0.1 using this and works great!) and adjusting for deltaTime/frame rate lag.
*** I used a speed value of 0.1 because I think using a speed of 5 and then multiplying by deltaTime is a bit sloppy. Just my opinion. But seems like you would have to tweak it much more than being able to set a static value as opposed to a ever changing ratio against deltaTime. ***
Also, I’m used to WASD, so I’m using A/D to move and put in a handler for if you pressed down both keys at once in order to “cancel each other out”.
I’ve reduced “repeating code” and I’ve also clamped the movement value as that was already covered in previous lessons.
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
private float adjSpeed;
private float playerX;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
// Frame rate compensation
print (Time.deltaTime);
adjSpeed = speed;
if (Time.deltaTime > 0){adjSpeed = speed - (speed * Time.deltaTime);}
print (adjSpeed);
// Check input and add movement values
if (Input.GetKey(KeyCode.A) && (!Input.GetKey(KeyCode.D))) {playerX -= adjSpeed;}
else if (Input.GetKey(KeyCode.D) && (!Input.GetKey(KeyCode.A))) {playerX += adjSpeed;}
// Constrain to playfield
playerX = Mathf.Clamp(playerX, -6.5f, 6.5f);
// Move player
gameObject.transform.position = new Vector2(playerX, transform.position.y);
// Console debug
print (transform.position);
}
}