Unity3d 踩坑
在学习和使用 unity3d 时,我们时常会遇到一些奇怪的问题,大家习惯称之为“坑”。我们在刚开始用unity做项目时,也同样踩到了一些坑,历经千辛万苦才爬出来。
无法解决,只能绕道的坑
- 用 addComponent 向 prefab 的 clone 添加组件会被保存到 prefab 的定义中
- 对于应用分辨率和窗口模式的设置会悄悄保存在系统注册表,无论如何重新打包,都无法改变注册表中的设定
- unity 会将上次运行的分辨率记录在注册表,如果是全屏模式,Screen.currentResolution 将获取到记录在注册表中的分辨率,而非桌面分辨率。切换到窗口模式,退出游戏,再打开游戏,默认会以窗口模式启动,这时才能获取到正常的桌面分辨率。改用 Display.main.systemWidth
- 帧率不稳,摄像机位移用 lerp 总是会有卡顿和抖动 (jitter and stutter)
- 动态修改 camera 的 viewport rect 属性会引起强烈卡顿
可以小心通过的坑
- AudioSource 和 Listener 的 velocityUpdateMode 都要设置为 AudioVelocityUpdateMode.Fixed ,否则会有奇怪的声音
- 修改过 transform 的 rigidBody.position 和 rotation 要在一次 update 之后才会更新,gameObject 估计也一样,计算时一定要用 transform 中的位移和旋转
- 获取刚体的 position 总是慢一帧,需要 postion + velocity * deltaTime
- dll 文件一旦加载,就无法更新,需要重开unity3d
- 将一个实例放入类的静态变量,切换场景后,变量中的数值还在,但组件无效
Blender 和 unity 共同制造的坑
- 两个软件的世界坐标系不同,对应关系是 bx =-ux, by=-uz, bz=uy
- 导出 fbx 时,在导出选项中不管如何修改轴向,都不会改变 mesh 顶点数据,也都会被 unity 忽略
- 导出摄像机动画,特别是多个摄像机动画一起导出时,会随机出现某些动画数据不正确的情况,令人抓狂,而且无解
{{comment.name}}{{comment.time | fDateTime}}
{{reply.name}}{{reply.time | fDateTime}}