您的位置:首页 > 移动开发 > Unity3D

Unity3D 摄像机平滑跟随角色

2015-12-15 10:43 387 查看
摄像机跟随主角移动有多种方式,第一人称视角的话摄像机保持和主角一直的位置和朝向,并增加一些平滑移动即可。第三人称的(包括越肩和斜45读视角),就复杂一些,因为有时候会导致摄像机和主角之间有东西挡着,照不到主角。

这种情况可以用射线来判断和主角之间是否有遮挡物,并设置多个位置,便利寻找不会被遮挡的位置。

以下是官方示例中的跟随例子:

void Awake() {
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
offset = transform.position - player.position;
offset = new Vector3(0, offset.y, offset.z);
}

void UpdateCamePos () {
Vector3 beginPos = player.position + offset;
Vector3 endPos = player.position + offset.magnitude * Vector3.up;
Vector3 pos1 = Vector3.Lerp(beginPos, endPos, 0.25f);
Vector3 pos2 = Vector3.Lerp(beginPos, endPos, 0.5f);
Vector3 pos3 = Vector3.Lerp(beginPos, endPos, 0.75f);
Vector3[] posArray = new Vector3[] { beginPos, pos1, pos2, pos3, endPos };

Vector3 targetPos = posArray[0];
for (int i = 0; i < 5; i++) {
RaycastHit hitinfo;
if (Physics.Raycast(posArray[i], player.position - posArray[i], out hitinfo)) {
if (hitinfo.collider.tag != Tags.player) {
continue;
} else {
targetPos = posArray[i];
break;
}
} else {
targetPos = posArray[i];
break;
}
}


这个函数在Update()中调用,可以更新摄像机的位置。这里的offset 即使初始情况下摄像机和主角的位置差,是在编辑场景的时候调整的。



这是平滑移动摄像机朝向,对准主角的函数,同样在Update()中调用。

第三人称越肩视角和上面的方法类似,不过endPos 应该是离主角更近的位置而不是取主角的正上方,效果就是在一些射击游戏中,当玩家背靠墙的时候摄像机会离主角很近,而不会在墙的后面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: