软件工程个人技术总结

222000312彭季菖 学生 2023-06-07 21:37:19
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践寒假作业
这个作业的目标软件工程实践和个人技术总结
其他参考文献...

目录

  • 技术概述
  • 技术详述
  • 使用Unity自带的插件
  • 代码实现
  • 技术使用中遇到的问题和解决过程
  • 总结

技术概述

在2D游戏制作过程中,摄像机的跟随主角移动是必不可少的。有代码实现,也有插件实现。

技术详述

使用Unity自带的插件

需要先导入插件

img


之后在菜单栏中,选择Cinemachine > Create Virtual Camera。Unity会在场景中添加一个GameObject,上面有一个Virtual Camera组件。如果你的Unity相机上没有CinemachineBrain脚本,Cinemachine也会自动添加CinemachineBrain脚本到Unity相机上

同时左侧会出现CM vam1

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

img

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

img

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

img

接着回到虚拟相机中添加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 方法调用后被调用,这样就解决了人物在移动过程中,摄像机抖动的现象。

总结

 软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观。

...全文
54 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

688

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • 张书旖
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧