| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using System.Collections;
- using System.Collections.Generic;
- using Cinemachine;
- using UnityEngine;
- using UnityEngine.InputSystem;
- public class CameraManager : MonoBehaviour {
- [SerializeField] private float speed;
- [SerializeField] private float maxSpeed = 5f;
- [SerializeField] private float acceleration = 10f;
- [SerializeField] private float damping = 15f;
- [SerializeField] private CinemachineVirtualCamera camera;
- RoomBuilder roomBuilder;
- InputAction movement;
- Transform cameraTransform;
- private Vector3 lastPosition;
- private Vector3 horizontalVelocity;
- private Vector3 targetPosition;
- private void Awake() {
- roomBuilder = new RoomBuilder();
- cameraTransform = camera.transform;
- }
- private void OnEnable() {
- cameraTransform.LookAt(this.transform);
- lastPosition = this.transform.position;
- movement = roomBuilder.Camera.Movement;
- roomBuilder.Camera.Enable();
- }
- private void OnDisable() {
- roomBuilder.Camera.Disable();
- }
- private Vector3 GetCameraForward() {
- Vector3 forward = cameraTransform.forward;
- forward.y = 0f;
- return forward;
- }
- private Vector3 GetCameraRight() {
- Vector3 right = cameraTransform.right;
- right.y = 0f;
- return right;
- }
- private void UpdateVelocity() {
- horizontalVelocity = (this.transform.position - lastPosition) / Time.deltaTime;
- horizontalVelocity.y = 0;
- lastPosition = this.transform.position;
- }
- private void GetKeyboardMovement() {
- Vector3 inputValue = movement.ReadValue<Vector2>().x * GetCameraRight() + movement.ReadValue<Vector2>().y * GetCameraForward();
- inputValue = inputValue.normalized;
- if (inputValue.sqrMagnitude > 0.1f) {
- targetPosition = inputValue;
- }
- }
- private void UpdateBasePosition() {
- if (targetPosition.sqrMagnitude > 0.1f) {
- speed = Mathf.Lerp(speed, maxSpeed, Time.deltaTime * acceleration);
- transform.position += targetPosition * speed * Time.deltaTime;
- } else {
- horizontalVelocity = Vector3.Lerp(horizontalVelocity, targetPosition, Time.deltaTime * damping);
- transform.position += horizontalVelocity * Time.deltaTime;
- }
- targetPosition = Vector3.zero;
- }
- private void Update() {
- GetKeyboardMovement();
- UpdateVelocity();
- UpdateBasePosition();
- }
- }
|