相机跟随其实就是让 Camera 跟 player 保持一定的距离,当 player 移动时距离不变,则视角就是跟着移动。
单个主角:
对于单个主角,只需要设置相机与主角相对距离即可。
public GameObject Player; //主角
private Vector3 offset ; //相对距离
void Start () {
offset = transform.position - Player.transform.position ; //获取初始相对距离
}
void Update () {
this.transform.position = Player.transform.position+ offset;//相对距离保持不变
}
两个主角:
对于两个主角的情况,除了需要设置相对距离外,还应该设置 Camera 的 size。当两主角之间的距离变大时,相机视角也应该相应增大,当两主角靠近时,视角应该减小。一般取两主角的中心点作为视野点,同时注意限制 Camera 的最小 size 和最大 size ,否则效果会不当。
public Transform Player1;
public Transform Player2;
public float minCameraSize = 10.0f; //相机最小 size
public float maxCameraSize = 30.0f; //相机最大 size
private Vector3 offset ; //距离差值
private Camera myCamera; //相机
void Start () {
offset = transform.position - (Player1.position + Player2.position)/2 ; //取两物体的中点
myCamera = this.GetComponent<Camera> ();
}
void Update () {
this.transform.position = (Player1.position + Player2.position)/2+ offset; //与两物体的中点保持差值
float size = Vector3.Distance (Player1.position, Player2.position) * 1.0f;//1.0f 为自定义比例
if (size < minCameraSize) {
size = minCameraSize;
}
if (size > maxCameraSize) {
size = maxCameraSize;
}
myCamera.orthographicSize = size;
}
这里有个细节,跟随两个物体时我们没有考虑当一个物体消失时的情况,例如一个玩家被消灭,此时会出现空指针异常。这里应该根据需要自己做一定的修改。需求不同实现也是不同,如果是两方对战,此时游戏结束,相机可以不跟随也可以给获胜玩家一个特写。如果是双人合作,那么可以将镜头跟随剩余的玩家。
不仅仅是相机的跟随,一个物体跟随另一个物体的原理都是一样的,都可以利用设置相对位置的方式。例如主角身上有 buff 的特效,跟踪导弹等等。具体的实现方式需要根据具体的要求。