1
0
mirror of https://github.com/Cardidi/dotween-upm-fork.git synced 2025-12-20 17:26:03 +08:00
2020-01-17 00:11:15 +09:00

42 lines
1.7 KiB
C#

using UnityEngine;
using System.Collections;
public class FollowCamTopDown : MonoBehaviour
{
public Transform player;
public Transform cam;
// Speed of the player
public float speedXSecond = 4;
// Camera offset when moving
public float camOffset = 2;
// Speed when animating camera offset
public float camOffsetSpeed = 2;
// Speed when returning camera to original position (when player is not moving).
// You will want to keep this lower than the camOffsetSpeed to allow for better game feel ;)
public float camResetSpeed = 1;
Vector3 _moveDirection;
void Update()
{
_moveDirection = Vector3.zero;
if (Input.GetKey(KeyCode.UpArrow)) _moveDirection.z = 1;
else if (Input.GetKey(KeyCode.DownArrow)) _moveDirection.z = -1;
if (Input.GetKey(KeyCode.RightArrow)) _moveDirection.x = 1;
else if (Input.GetKey(KeyCode.LeftArrow)) _moveDirection.x = -1;
if (_moveDirection.sqrMagnitude > 0) {
// The player is moving
player.position += _moveDirection * speedXSecond * Time.deltaTime;
// Determine camera's ideal position and lerp there
Vector3 optimalCamPos = _moveDirection * camOffset;
optimalCamPos.y = cam.localPosition.y;
cam.localPosition = Vector3.Slerp(cam.localPosition, optimalCamPos, Time.deltaTime * camOffsetSpeed);
} else {
// Not moving. Just control camera
Vector3 optimalCamPos = Vector3.zero;
optimalCamPos.y = cam.localPosition.y;
cam.localPosition = Vector3.Slerp(cam.localPosition, optimalCamPos, Time.deltaTime * camResetSpeed);
}
}
}