Unity | C# | Когда хожу при передвижении всё равно иду в одну и туже сторону
Хочу написать игру от 1 лица
Учусь Unity 2 дня. Хочу написать нормальную ходьбу и передвижение камеры. Получается не очень. Крутится камера ну прекрасно. Но когда хожу даже при повороте камеры. Персонаж идёт в 1 сторону. Т.е. Я иду вперёд на w, поворачиваюсь вправо на 90 градусов, и персонаж идёт налево. Насколько я понял объект игрока не крутится.
Код ходьбы :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player_Go : MonoBehaviour
{
public float speed = 7f;
private void Update()
{
GetInput();
}
private void GetInput()
{
if (Input.GetKey(KeyCode.W))
{
transform.localPosition += transform.forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
transform.localPosition += -transform.forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.localPosition += -transform.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.D))
{
transform.localPosition += transform.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.Space))
{
transform.localPosition += transform.up * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.E))
{
transform.localPosition += -transform.up * speed * Time.deltaTime;
}
}
}
Код камеры :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[AddComponentMenu("Camera-Control/MouseLook")]
public class Camera : MonoBehaviour
{
public enum RotationAxes { MouseXandY = 0, MouseX = 1, MouseY = 2 };
public RotationAxes axes = RotationAxes.MouseXandY;
public float sensitivityX = 2f;
public float sensitivityY = 2f;
public float minimuX = -360f;
public float maximumX = 360f;
public float minimuY = -360f;
public float maximumY = 360f;
float rotationX = 0f;
float rotationY = 0f;
Quaternion originalRotation;
void Start()
{
if (GetComponent<Rigidbody>())
{
GetComponent<Rigidbody>().freezeRotation = true;
}
originalRotation = transform.localRotation;
}
public static float ClampAngle (float angle, float min, float max)
{
if (angle < -360f) angle += 360f;
if (angle > 360f) angle -= 360f;
return Mathf.Clamp(angle, min, max);
}
void Update()
{
if(axes == RotationAxes.MouseXandY)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle(rotationX, minimuX, maximumX);
rotationY = ClampAngle(rotationY, minimuY, maximumY);
Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if(axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle(rotationX, minimuX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else if (axes == RotationAxes.MouseY)
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle(rotationY, minimuY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
transform.localRotation = originalRotation * yQuaternion;
}
}
}