福感科技有限公司 欢迎您!
联系方式

    地址:北京市平谷区马坊镇金河北街17号院3号楼7层712

    电话:010-89968230

    网站:http://www.fgsense.com

unity的碰撞检测详细解释

2020-10-12 21:59:00      点击:
1.[AddComponentMenu("MyGame/Player")] //在Component菜单中加入“MyGame/Player”选项
2.Time.deltaTime表示每帧的经过时间,那些需要每帧做增减变动的数值都需要乘上Time.deltaTime
3.MonoBehaviour的派生类不能使用构造函数初始化
4.unity的游戏体只能使用Instantiate函数实例化,不能使用new
5.OnTriggerEnter函数触发条件:首先两个物体都要加碰撞体,被碰撞的物体必须勾选Is Trigger使其监测触发(不要加刚体),负责碰撞的物体必须加上刚体来触发被碰撞物体(加上刚体才拥有了触发别人的作用,不要勾选Is Trigger)。
或者负责碰撞的物体勾选Is Trigger使其监测触发(不要加刚体),然后被碰撞的物体加上刚体。(不要勾选Is Trigger)
6.OnCollisionEnter(碰撞瞬间)函数和OnCollisionExit(离开)调用条件:首先两个物体都要加碰撞体,且Is Trigger(因为勾选了它,则碰撞失效)都必须勾掉,另外:刚体碰非刚体会碰撞(这里碰撞指的是调用碰撞函数),非刚体碰刚体不会碰撞(详细来说就是:运动中的刚体碰非刚体,则会调用被撞物体和撞物体的OnCollisionEnter系列函数),OnCollisionStay(接触)函数调用条件:两个满足条件的物体挨着的时候就会调用OnCollisionStay
7.Is Trigger和Is Kinematic属性详解
Is Trigger:选中Is Trigger开启触发器(触发器的范围则是碰撞的范围),则碰撞属性失效了
Is Kinematic:选中Is Kinematic开启运动学状态(一切物体保持静止或保持匀速向前运动,除非有外力影响它的状态,这里的运动学状态指的是匀速向前运动,牛顿大侠的理论)。如选中,该物体不会受到外力,但是需要注意的是碰撞还在(碰撞不属于刚体组件,它是在碰撞体组件里)
注:1.角色控制器(即Character Controller)不发力不受力但是可以被由代码施加的力推动,,如果加Rigidbody组件,则这两个会冲突(这是unity中非自然的一部分)
2.运动学刚体发力不受力
3.刚体发力且受力
4.有时候碰撞可以产生反作用力,比如角色控制器可以通过碰撞给一个运动中的刚体反作用力
5.刚体静止时,则会进入休眠状态,休眠状态中刚体属性不生效,比如阻力,重力,摩擦力。如何激活刚体使其唤醒:给它力,让它平移等。(这是unity中非自然的一部分)
6.现实生活中,先有往某个方向的力才会有反方向的阻力,而且一般情况下阻力比该方向的力小,但在unity中,阻力是可以事先设置的,当阻力大于作用力时,物体会向阻力的方向运动,是不是很反自然?(这是unity中非自然的一部分)
7. 如果两个物体都不是刚体,都有碰撞体,结果穿透,都不会调用碰撞函数
8.物体1是动力学刚体且有碰撞体,物体2没有刚体有碰撞体,结果穿透,都不会调用碰撞函数
9.物体1是动力学刚体且有碰撞体,物体2有刚体有碰撞体,结果碰了,调用碰撞函数(不同情况调用不同函数。比如速度不同,调用函数不同[比如速度过快会穿过去])

表格:(针对于OnCollisionEnter系列函数,默认都有碰撞体,重力都取消了,表格列出的现象可能片面)

Cube

Sphere

现象

刚体

刚体

动力学

运动状态

刚体

刚体

动力学

运动状态

有

有

有

有

有

有

互相穿透不干扰

有

有

有

有

有

-

互相穿透不干扰

有

有

有

有

-

有

碰撞检测,且Cube不会被撞开

有

有

有

有

-

-

碰撞检测,且Cube不会被撞开

有

有

有

-

-

有

互相穿透不干扰

有

有

有

-

-

-

互相穿透不干扰

有

-

有

有

有

-

碰撞检测,且Sphere不会被撞开

有

-

有

有

-

有

碰撞检测,且相互撞开

有

-

有

有

-

-

碰撞检测,且Sphere随Cube动

有

-

有

-

-

有

碰撞检测,且Sphere不会被撞开

有

-

有

-

-

-

碰撞检测,且Sphere不会被撞开

有

有

-

有

-

有

碰撞检测,且Cube不会被撞开

有

有

-

有

-

-

嵌入时,碰撞检测,且Cube不会被撞开

有

有

-

-

-

有

互相穿透不干扰

有

有

-

-

-

-

嵌入时,互不干扰

有

-

-

有

-

-

嵌入时,碰撞检测,互相撞开

有

-

-

-

-

有

碰撞检测,且Cube随Sphere动

有

-

-

-

-

-

嵌入时,碰撞检测,Sphere不会被撞开

-

-

有

-

-

有

互相穿透不干扰

-

-

有

-

-

-

互相穿透不干扰

-

-

-

-

-

-

互相穿透不干扰

8.this.transform.parent = surface.transform; //改变该物体(this.transform)的父级,父物体为surface.transform处的物体

Copyright 2019 www.fgsense.com

福感科技有限公司 版权所有 All Rights Reserved

京ICP备20002031号

010-89968230