Search code examples
c#debugginggame-physicsunity-game-engine

Debug character movement backwards in Unity 5


I have a character(robot Kyle) and I can move the character from side to side, and forwards. When the character begins to move backwards it disappears for no reason.

Also, how would I move the character in the direction of the mouse? I have it so it faces in direction of the mouse, but the camera angle distorts that a little bit.

using UnityEngine;
using System.Collections;

public class PlayerScript : MonoBehaviour {

    public GameControlScript control;

    float strafeSpeed = 2;
    Animator anim;

    bool jumping = false;

    void Start () {
        anim = GetComponent<Animator>();
    }

    void Update () {
        if (Input.GetKey(KeyCode.RightArrow)){

            Vector3 newPosition = this.transform.position;
            newPosition.x++;
            this.transform.position = newPosition;

        }
        if (Input.GetKey(KeyCode.LeftArrow)){

            Vector3 newPosition = this.transform.position;
            newPosition.x--;
            this.transform.position = newPosition;

        }
        if (Input.GetKey(KeyCode.UpArrow)){

            Vector3 newPosition = this.transform.position;
            newPosition.z++;
            this.transform.position = newPosition;


        }
        if (Input.GetKey(KeyCode.DownArrow)){

            Vector3 newPosition = this.transform.position;
            newPosition.z--;
            this.transform.position -= newPosition;

        }
        Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1000);
        Vector3 lookPos = Camera.main.ScreenToWorldPoint(mousePos);
        lookPos = lookPos - this.transform.position;
        float angle = Mathf.Atan2(lookPos.z, lookPos.x) * Mathf.Rad2Deg;
        this.transform.rotation = Quaternion.AngleAxis(angle, Vector3.down);

    }

    void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.name == "Powerup(Clone)")
        {
            control.PowerupCollected();
        }
        else if(other.gameObject.name == "Obstacle(Clone)" &&
            jumping == false)
        {
            control.SlowWorldDown();
        }

        Destroy(other.gameObject);
    }
}

Solution

  • ScreenToWorldPoint may be your problem because you are fixing 1000 as the distance between the camera and your object.

    Checkout out this link and try to log your lookPos variable.