Rigidbody(刚体)和Colider(触发器)的定义官方manual和CSDN上的其他文章已经有很多,就不再赘述。个人来说,即使读完了各种资料,还是对两者的区别和用途有些不理解,所以自己梳理了一下,在此记录。
1. 如果一个Sprite只有Rigidbody没有Colider会怎样?
因为有Rigidbody,也就是基本的物理属性,Sprite会受到重力影响落下。
因为没有Colider对Sprite之间的相互作用(碰撞)进行监测,没有Colider的Sprite和场景内的其他Sprite在同一位置时会直接无视对方(具体表现可能为穿过)。
2. 如果一个Sprite只有Colider没有Rigidbody会怎么样?
没有Rigidbody的Sprite不具备物理属性,不受重力等的影响,所以在场景内如同”幽灵”一样固定不动、可被“穿过”。
因为具备Colider,和其他Sprite在同一位置时能够被监测到,触发碰撞。作为Trigger时只需要监测而不需要碰撞,可以用isTrigger实现。
3. 这种设计令人(我)困惑的点在于什么?其合理性在于什么?
Unity将现实世界中的碰撞拆分成了两个部分,刚体和触发器。刚体用来定义Sprite的存在状态,触发器用来监测是否存在触发。
其合理性在于:
a. 因为复杂性等原因,游戏世界所呈现的物理碰撞是对现实世界的模仿/假装而非复制。比如为了假装物体在地面上滚动,物体需要同时拥有Rigidbody和Colider,但是地面则不需要Rigidbody(否则地面会受重力影响落下)。
b. 游戏中会出现现实世界中不存在的机制,如Trigger。没有Rigidbody的Trigger可以更灵活地存在在场景中的任意位置。