unity3d碰撞之character control与rigidbody

一、碰撞

Unity3d中参与碰撞的物体分2种类型:
a、发起碰撞的物体。b、接收碰撞的物体。

1. 参与发起碰撞物体:Rigodbody, CharacterController (角色碰撞器)。
2. 参与接收碰撞的物体:所有Collider(如果打开Istrigger,则不发生实际碰撞,而是调用trigger函数)。
Character Controller本身自带一个碰撞器,无需刚体即可完成触发(Trigger)和碰撞(Collision)功能:character一般用于主角这类用户控制的物体,它不会受到scene的重力影响,不会被其他物体推。 程序中可以使用它的move方法移动它,当他碰到静态物体时,会停下来,遇到动态物体时会推开他,当然,这些都是可以通过activegroup来控制的。若要他推开其他物体,则使用OnControllerColliderHit 函数。

工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。


比如:两面墙都只用BoxCollider ,所以墙与墙之间无反应。
比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。
比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。


几个类型碰撞器:

http://docs.unity3d.com/Manual/CollidersOverview.html

1. 静态碰撞器: 就是个Collider,只有碰撞器,但没有刚体的

2.刚体碰撞器: 带Rigidbody的碰撞器,这个是最基本的碰撞器(只有它可以和其他3个产生现实环境中的碰撞)

3.运动学刚体碰撞器: 带Rigidbody, 而且RigidbodyIsKinematic打勾的,注意这个碰撞器是不能加力的,只能修改他的transform才能移动

相应的,如果打开Istrigger属性选择框,则不会发生实际的碰撞,而只会调用检测函数。


二、Collider
在所有Collider上有一个Is Trigger 的boolean型参数。
(If enabled, this Collider is used for triggering events, and is ignored by the physics engine.)


当发生碰撞反应的时候,会先检查此属性是否为true。
当激活此选项时,会调用碰撞双方的脚本 OnTrigger, 反之,脚本方面没有任何反应。
当激活is trigger = true,不会发生后续物理的反应。反之,发生后续的物理反应。


总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。


三、Rididbody
在Rigidbody 上有一个Use Gravity 的boolean型参数.


(Controls whether gravity affects this rigidbody.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值