76 lines
1.7 KiB
C#
76 lines
1.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class PlayerMovementBehaviour : MonoBehaviour
|
|
{
|
|
|
|
[Header("Component References")]
|
|
public Rigidbody playerRigidbody;
|
|
|
|
[Header("Movement Settings")]
|
|
public float movementSpeed = 3f;
|
|
public float turnSpeed = 0.1f;
|
|
|
|
|
|
//Stored Values
|
|
private Camera mainCamera;
|
|
private Vector3 movementDirection;
|
|
|
|
|
|
public void SetupBehaviour()
|
|
{
|
|
SetGameplayCamera();
|
|
}
|
|
|
|
void SetGameplayCamera()
|
|
{
|
|
mainCamera = CameraManager.Instance.GetGameplayCamera();
|
|
}
|
|
|
|
public void UpdateMovementData(Vector3 newMovementDirection)
|
|
{
|
|
movementDirection = newMovementDirection;
|
|
}
|
|
|
|
void FixedUpdate()
|
|
{
|
|
MoveThePlayer();
|
|
TurnThePlayer();
|
|
}
|
|
|
|
void MoveThePlayer()
|
|
{
|
|
Vector3 movement = CameraDirection(movementDirection) * movementSpeed * Time.deltaTime;
|
|
playerRigidbody.MovePosition(transform.position + movement);
|
|
}
|
|
|
|
void TurnThePlayer()
|
|
{
|
|
if(movementDirection.sqrMagnitude > 0.01f)
|
|
{
|
|
|
|
Quaternion rotation = Quaternion.Slerp(playerRigidbody.rotation,
|
|
Quaternion.LookRotation (CameraDirection(movementDirection)),
|
|
turnSpeed);
|
|
|
|
playerRigidbody.MoveRotation(rotation);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
Vector3 CameraDirection(Vector3 movementDirection)
|
|
{
|
|
var cameraForward = mainCamera.transform.forward;
|
|
var cameraRight = mainCamera.transform.right;
|
|
|
|
cameraForward.y = 0f;
|
|
cameraRight.y = 0f;
|
|
|
|
return cameraForward * movementDirection.z + cameraRight * movementDirection.x;
|
|
|
|
}
|
|
|
|
}
|