Unity学习笔记2:物理引擎和碰撞
来源:互联网 发布:安卓编程 编辑:程序博客网 时间:2024/06/12 01:18
本小节主要是Unity物理引擎,刚体碰撞方面的散记。
Character Controller的一些特性:
本身不受physics影响,需要接受外力作用时,使用onCharacterColliderHit().
Skin width:最好设置为radius的10%,防止角色经常卡住。
step offset:对于2meter高的Character最好设为0.1到0.4
min move distance设为0即可。
Rigidbody的属性设置:
Is Kinematic:打开后物体不受物理引擎影响,只受transform的控制。比如制作一个上升的平台,本身是rigidbody,且不受物理引擎影响,打开Is Kinematic.
Interpolate:使运动更光滑。
Freeze Rotation:使旋转不受碰撞或由script里定义施加的外力影响。只受tranform控制。
对rigidbody使用力的script方法:AddForce(),AddTorque().当使用physics时不要直接修改transform.
collision detection:高速运动的碰撞体应设为continuous,防止出现上一帧在其他碰撞物体的这边,下一帧已经穿过碰撞物体到达另一边的情形。默认为discrete.只有box,sphere和capsule的collider才能设置为continuous.
对于rigidbody,size是个比mass更重要的属性,所以在建模的时候强烈建议总是参考实际标准大小(unity中单位长度是米)。实时instantiate一个物体并修改它的大小,会影响其物理属性,因而会降低游戏性能。
两个rigidbody自由下落的速度不受mass影响,而是用drag(空气阻力)这个参数来控制。drag值越大,看起来感觉物体重量越轻(典型的0.001-金属块,10-羽毛)。
对rigidbody使用constant force组件来设置一个constant force,这个力可以是force或torque。
对物体施加constant force时,设置一个drag值可让物体加速到一个特定的最大速度以后不再加速。drag值越大这个速度越小。
某带有rigidbody的collider碰撞时会发送三个消息给该collider的对象,分别是Collider.OnCollisionEnter,Collider.OnCollisionExit和Collider.OnCollisionStay,这些事件可以在script里选择利用NVIDIA PhysX engine进行特别处理。
打开collider的Is trigger选项,碰撞就不受到物理引擎影响,而是通过发送三个消息变成某个事件的trigger。(同样的,发生碰撞的两个collider中至少有一个必须是rigidbody)这三个消息函数分别是:Collider.OnTriggerEnter,Collider.OnTriggerExit和Collider.OnTriggerStay.引发的事件可以是切换场景,开门,播放教程等等,自由发挥你的想象力。
总结下来:三种collider:
1.static collider: 带有collider却没有rigidbody的对象,最好用于静止物体如环境地理。
2.rigidbody collider:带有rigidbody的collider对象,能够根据物理引擎很好的响应外力和碰撞作用。
3.kinematic rigidbody collider:带有rigidbody的collider对象,开启Is kinematic之后,等效于可以频繁使用insform来移动(而非rigidbody collider利用外力或碰撞的物理效应)的static collider,用于需要rigidbody但不希望响应物理效果的对象。另外就是可以给其设置Is trigger,作为某些事件的触发器,但Is trigger的设置对象必须是rigidbody,但你又不希望其受物理定律约束的情形。
注:kinematic还常用来创造ragdoll.由于kinematic可以方便的开关,通常情况下开启kinematic方便角色移动等,但遇到碰撞、爆炸冲击等情况,可以在脚本里添加代码使其关闭kinematic变为普通的rigidbody接受物理作用。
Collision Action Matirx(各种碰撞属性对象碰撞的消息发送标准):
- Unity学习系列笔记2:物理引擎和碰撞
- Unity学习笔记2:物理引擎和碰撞
- Unity学习笔记2:物理引擎和碰撞
- 【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠
- Unity3D物理引擎和碰撞
- HGE引擎学习笔记1 : 如何模拟物理碰撞
- Unity3D学习笔记(十)物理引擎:碰撞器
- Unity3D学习笔记(十)物理引擎:碰撞器
- Unity3D学习笔记(十)物理引擎:碰撞器
- Unity笔记——物理引擎中碰撞器(Collider)的运用
- 关于碰撞检测和物理引擎
- cocos2dx物理引擎和碰撞检测(一)
- cocos2dx物理引擎和碰撞检测(二)
- cocos2dx物理引擎和碰撞检测(三)
- [Unity 3D] 物理引擎学习笔记(一)
- Unity 物理引擎学习笔记。。很基础。很实用哦。。。
- [Unity 3D] 物理引擎学习笔记(一)
- Unity 3D 物理引擎之刚体与碰撞器
- loaded the nib but view outlet was not set
- oracle常用服务含义
- friends 103 The One With the Thumb
- 找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}。
- QTP的描述性编程与正则表达式
- Unity学习笔记2:物理引擎和碰撞
- (x&y)+((x^y)>>1)(面试宝典)
- RQNOJ 698(矩形计数-圆内接矩形数)
- pat 1496 数列区间//线段树
- Unity学习笔记3:随机数和动画脚本
- 两个Lader对象共享bottom
- QTP的脚本Action模板
- hdu - 1892 - See you~(二维树状数组(单点修改))
- 输入一个字符串,将其中连续的数字作为一个整数,一次存放到另一个整型数组,设计一个函数,把指向字符串的指针和指向整数的指针作为函数形参