using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Random = System.Random; public class PlayerController : MonoBehaviour { public float walkSpeed; public GameObject model; private float speedMulitplier; private Vector2 receivedInput; // Start is called before the first frame update void Start() { speedMulitplier = UnityEngine.Random.Range(0.8f, 1.2f); } public void SetMovement(Vector2 input) { receivedInput = input; } public void UpdatePosition() { float HorseX, HorseZ; HorseZ = receivedInput.y; HorseX = receivedInput.x; float rotateTo = RotateObject(HorseX, HorseZ); HorseZ *= Time.deltaTime * walkSpeed * speedMulitplier; HorseX *= Time.deltaTime * walkSpeed * speedMulitplier; transform.Translate(HorseX, 0, HorseZ); //Vector3 dir = Quaternion.Euler(-90, rotateTo, 0) * Vector3.forward; //model.transform.forward = dir; //LeanTween.rotateY(model, rotateTo, 0.1f); } public float RotateObject(float xInput, float zInput) { float to = model.transform.rotation.eulerAngles.y; //Debug.Log(to); if (receivedInput.x != 0 || receivedInput.y != 0) { if (zInput > 0 && xInput == 0) to = 0; else if (zInput < 0 && xInput == 0) to = 180; else if (zInput == 0 && xInput > 0) to = 90; else if (zInput == 0 && xInput < 0) to = 270; else if (zInput > 0 && xInput > 0) to = 45; else if (zInput < 0 && xInput > 0) to = 135; else if (zInput < 0 && xInput < 0) to = 225; else if (zInput > 0 && xInput < 0) to = 315; } return to; } public void MoveObject(float wait) { StartCoroutine(RandomWait(wait)); } public IEnumerator RandomWait(float wait) { yield return new WaitForSeconds(UnityEngine.Random.Range(0, wait/2)); Vector3 rotateDir = new Vector3(90 * Math.Sign(receivedInput.y), 0, -90 * Math.Sign(receivedInput.x)); model.transform.Rotate(rotateDir, Space.World); } // Update is called once per frame void Update() { UpdatePosition(); } }