688
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践寒假作业 |
| 这个作业的目标 | 软件工程实践和个人技术总结 |
| 其他参考文献 | ... |
在2D游戏制作过程中,摄像机的跟随主角移动是必不可少的。有代码实现,也有插件实现。
需要先导入插件

同时左侧会出现CM vam1
如果相机需要跟随物体移动,指定一个物体到Follow属性上。虚拟相机会自动将Unity相机的位置和Follow物体保持相对位置,包括Follow物体移动的时候。只需要将所需要跟随的物体拖拽到此即可

控制相机的拍摄范围,不希望相机拍摄到tilemap之外的背景:需要添加Cinemachine Confiner组件,并且创建一个空物体来进行Polygon Collider的存放:

还需要新建一个Collider 2D,还定义相机的边界,这里选择使用Polygon Collider 2D 来自定义边界

接着回到虚拟相机中添加Confiner组件并将控制可视范围的空物体拖拽其上面:
但问题在这个插件太久未更新,后续可能不再支持无法使用
其原理是将摄像机固定在一定范围,并且利用Lerp函数进行跟随目标移动
//定义两个位置进行限制相机移动
public Vector2 minPosition;
public Vector2 maxPosition;
...
void LateUpdate()
{
if (target != null)
{
Vector3 targetPos = target.position;
targetPos.x = Mathf.Clamp(targetPos.x, minPosition.x, maxPosition.x);
targetPos.y = Mathf.Clamp(targetPos.y, minPosition.y, maxPosition.y);
transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
}
}
使用代码实现的过程中很常见的一个错误就是项目在运行过程中出现屏幕抖动的现象,一个常见的原因就是你的摄像机跟随和人物的移动都写在了 Update 函数中,我们希望的是摄像机在人物移动后跟随,但 Update 更新之间的频率是不固定的,所以相机可能会偏离人物导致屏幕抖动。解决方法就是把摄像机的跟随写到 LateUpdate 函数里,因为 LateUpdate 是在所有 Update 方法调用后被调用,这样就解决了人物在移动过程中,摄像机抖动的现象。
软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。