Basically, if I move my reticle to the top of the screen, the player looks down and vice versa. This also applies horizontally. I am making a top down shooter. Take a look at what I mean:
And here is my code. Very simple.
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class PlayerController : MonoBehaviour
{
public float speed;
public Texture2D reticle;
public float reticleSensitivity;
private CharacterController player;
private Vector3 moveDir;
private Transform myTransform;
private Camera mainCam;
private Vector3 lookDir;
private float camDif;
private Vector2 reticlePos;
void Awake()
{
mainCam = Camera.main;
myTransform = transform;
camDif = mainCam.transform.position.y - myTransform.transform.position.y;
player = GetComponent<CharacterController>();
}
void Update()
{
movement();
}
void movement()
{
reticlePos += new Vector2(Input.GetAxisRaw("360_RightStickHorizontal") * reticleSensitivity * Time.deltaTime, Input.GetAxisRaw("360_RightStickVertical") * reticleSensitivity * Time.deltaTime);
reticlePos = new Vector2(Mathf.Clamp(reticlePos.x, 0, Screen.width), Mathf.Clamp(reticlePos.y, 0, Screen.height));
lookDir = new Vector3(reticlePos.x, reticlePos.y, camDif);
lookDir = mainCam.ScreenToWorldPoint(lookDir);
myTransform.LookAt(lookDir);
moveDir = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
moveDir *= speed;
player.Move(moveDir * Time.deltaTime);
}
void OnGUI()
{
GUI.DrawTexture(new Rect(reticlePos.x - 32, reticlePos.y - 32, 64, 64), reticle);
}
}