从2D游戏到3D游戏的进化,最重要的就是游戏视角的控制。奠定了3D游戏操作模式的1998年的神话级游戏《塞尔达传说:时之笛》中,对3D下游戏视角设计的关键即在于“镜头跟随”与“视角锁定”。本文将在unity中实现该效果。
实现过程
实现的思路非常简单:
- 在初始化时设定摄像机和人物之间的相对位置和相对旋转角;
- 在需要锁定时找到人物最近的单位,使人物转向该单位,并将摄像机的水平面的旋转角设置至和人物相同;
- 如果一定范围内没有单位,则人物不需转向,摄像机仍然执行;
这里设置了positionTarget和angleTarget两个变量,用来表示移动的目标状态,同时使用Lerp函数实现平滑运动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public GameObject player;
Vector3 distanceToPlayer;
Vector3 positionTarget,angleTarget;
LayerMask enemyLayer;
float temp;
// Start is called before the first frame update
void Start()
{
distanceToPlayer = this.transform.position - player.transform.position;
enemyLayer = LayerMask.GetMask("Enemy");
angleTarget = this.transform.eulerAngles;
}
// Update is called once per frame
void Update()
{
CameraFollow();
if (Input.GetKey(KeyCode.Space))
{
CameraAngle();
}
this.transform.eulerAngles = Vector3.Lerp(this.transform.eulerAngles, angleTarget, 0.3f)