74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using UnityEngine;
|
|
|
|
public class PlayerMovement : MonoBehaviour
|
|
{
|
|
public float WalkSpeed = 10;
|
|
public float rotationSpeed = 10f;
|
|
|
|
public Animator animator;
|
|
public Transform cameraTransform;
|
|
|
|
private Rigidbody m_rigidbody;
|
|
private PlayerInputController input;
|
|
private PlayerHeadController headController;
|
|
|
|
private Vector3 moveDirection;
|
|
|
|
private void Awake()
|
|
{
|
|
m_rigidbody = GetComponent<Rigidbody>();
|
|
input = GetComponent<PlayerInputController>();
|
|
animator = GetComponent<Animator>();
|
|
headController = GetComponent<PlayerHeadController>();
|
|
|
|
if (m_rigidbody != null)
|
|
{
|
|
m_rigidbody.freezeRotation = true;
|
|
}
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
Vector2 m_moveAmt = input.MoveAmount;
|
|
|
|
float horizontal = m_moveAmt.x;
|
|
float vertical = m_moveAmt.y;
|
|
|
|
Vector3 cameraForward = cameraTransform.forward;
|
|
Vector3 cameraRight = cameraTransform.right;
|
|
|
|
cameraForward.y = 0f;
|
|
cameraRight.y = 0f;
|
|
|
|
cameraForward.Normalize();
|
|
cameraRight.Normalize();
|
|
|
|
moveDirection = (cameraForward * vertical + cameraRight * horizontal).normalized;
|
|
|
|
if (headController.isHoldingHead)
|
|
{
|
|
m_rigidbody.MovePosition(
|
|
m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
|
|
);
|
|
}
|
|
else
|
|
{
|
|
if (moveDirection.magnitude >= 0.1f)
|
|
{
|
|
m_rigidbody.MovePosition(
|
|
m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
|
|
);
|
|
|
|
Quaternion targetRotation = Quaternion.LookRotation(moveDirection);
|
|
transform.rotation = Quaternion.Slerp(
|
|
transform.rotation,
|
|
targetRotation,
|
|
rotationSpeed * Time.deltaTime
|
|
);
|
|
}
|
|
}
|
|
|
|
bool isMoving = m_moveAmt.magnitude > 0.1f;
|
|
animator.SetBool("isWalking", isMoving);
|
|
}
|
|
} |