新装unity渲染问题
阴影
在灯光的inspector中,设置Shadow Type为Soft Shadows,并适当调整参数

光照烘焙
Windows —— Lightning中,设为Auto

抗锯齿
Edit —— Project Settings —— Quality中,调整抗锯齿等级 Anti Aliasing

碰撞器和触发器
API
触发信息检测:
1.MonoBehaviour.OnTriggerEnter(Collider collider) 当进入触发器
2.MonoBehaviour.OnTriggerExit(Collider collider) 当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider collider) 当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collision) 当逗留碰撞器
区别
碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性
当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果
当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果
使用场景
如果既要检测到物体的接触,又不想让碰撞检测影响物体移动;或要检测一个物件是否经过空间中的某个区域时,就可以用到触发器
碰撞器:汽车被撞飞、皮球掉在地上又弹起效果
触发器:人站在靠近门的位置门自动打开效果
Tips
Roll a ball 中,当旋转方块没有设置IsTrigger时,应使用OnCollisionEnter,但当碰撞发生时,会先处理碰撞(小球撞停)。当设置了IsTrigger=true时,应使用OnTriggerEnter,当碰撞发生时,小球不会被处理碰撞,而是顺畅通过并拾取
FixedUpdate() 和 Update()
背景和由来
游戏是运行在电脑里的世界,帧是最小时间单位。当只有一种update方法时,如果电脑流畅还行,如果比较卡,导致帧延后了,那么每帧时间就不固定了,就会造成时间间隔不稳定,这会影响世界的真实模拟
区别
FixedUpdate():固定时间间隔执行
Update():时间间隔不固定,取决于电脑性能,以及游戏设置的帧数、显示器刷新率等
使用
FixedUpdate():这里进行世界的模拟运转、以及对采样率有要求的操作,比如给物体施加力,摄像机平滑插值移动等
Update():只用于与显示画面有关的操作,比如移动物体到指定位置
UGUI
渲染顺序
原则:
1.canvas中的控件,严格按照hierarchy中的顺序叠放,排在下面的,叠在最上
2.控件与其他游戏对象的遮挡顺序,严格按照世界坐标中,与相机的距离来渲染

摄像机抖动
摄像机与移动目标的相对位置抖动
通常抖动是由于,摄像机与被观察物体的相对位置抖动
应当检查摄像机的位置刷新频率,是否与被观察物体的位置刷新频率保持了同步
疑问
如果在Update中调用rigidBody.MovePosition,在Update中移动摄像机,则会抖动;在FixedUpdate中移动摄像机,则不会抖动。怀疑rigidBody.MovePosition只是用于计算刚体碰撞,具体移动操作,是通过被添加到了事件队列中的方式,最终实际在FixedUpdate中pop出来执行更新位置的
解疑
在Update中调用rigidBody.MovePosition,并输出调用前后的位置坐标

可以看出,调用前后,位置坐标并没有变化

换在FixedUpdate中调用rigidBody.MovePosition,可看出,位置坐标也没有发生变化

结论
上述截图表明,rigidBody.MovePosition函数中,并没有直接改变位置坐标,那么事件队列的猜测,至少是合理的,所以,我认为rigidBody.MovePosition函数应该在FixedUpdate中显示调用,以便直观地让摄像机与之保持一致
transform.position和RigidBody.MovePosition()
背景和由来
父空物体带动子物体旋转,子物体使用RigidBody.MovePosition()进行移动,最终只有移动生效,旋转未生效(父空物体正值旋转,子物体负值旋转,相互抵消)
解决
移动改用transform.position
原因
待续,目测是RigidBody.MovePosition()基于物理,所以阻止了旋转