碰撞的产生与监听

1.collider -- 就是碰撞器,Unity中内置了许多的碰撞器组件

unity监听按键值_unity监听按键值

 每一个碰撞器组件的形状都是不一样的,而且也分为2d和3d两种类型

只有在物体挂载了碰撞器组件的时候这个物体才能够发生碰撞

碰撞器组件的基本模板都是差不多的,我们取其中一个模板来讲讲

unity监听按键值_游戏引擎_02

 从上往下分别是:碰撞编译器,是触发器,材质,碰撞中心(这个中心是可以被我们调整坐标移动的,如果不调整的话默认为游戏物体的中心坐标),碰撞半径,(胶囊碰撞器特有的胶囊高度和胶囊指向)

unity监听按键值_unity_03

 真正产生碰撞的是上面的绿色线框,我们调整的大小,半径,高度...等等参数都是对绿色线框的调整

2.两个物体产生碰撞的条件的条件是(这两个物体都有碰撞器组件),两个物体中至少有一个具有刚体组件

unity监听按键值_unity监听按键值_04

3.利用脚本监听碰撞 --- 假设物体A去碰撞物体B,我们该把脚本挂载到那个物体上来监听碰撞呢?

答案是那个物体都可以(a撞到b的时候a可以监听到碰撞,b也可以监听到碰撞,所以挂那个都一样) ,脚本中监听碰撞的方法有下面三种

unity监听按键值_编译器_05

 第一种会去监听两个物体碰撞的一瞬间,如果监听到了就执行自己的括号里的方法

第二种会去监听两个物体碰撞一瞬间之后是否发生连续碰撞(就一直挨在一起),如果监听到了就执行自己的括号里的方法

第三种会去监听两个物体结束碰撞的一瞬间,如果监听到了就执行自己的括号里的方法

函数里面的参数不需要我们去写,编译器会帮我们写的,这个参数承接的是当前脚本挂载的游戏物体a碰撞到的套在游戏物体b的碰撞体对象的信息对象,这个信息对象中存的是对应碰撞体对象的一系列信息

(谁的事情谁去做,代码逻辑分清楚,不要把代码都混在一个脚本中)

unity监听按键值_unity监听按键值_06

 通过编译器自动传进去的碰撞体对象的信息对象我们可以调用gameObject属性的name属性获取碰撞体对象碰对应的游戏物体的物体名


碰撞与触发的区别

1.当两个物体发生碰撞之后引起某一个操作的发生 --- 我们把这样一个过程称为触发

2.触发和碰撞检测不同的是,我们需要将两个发生碰撞的物体的其中一个的碰撞器组件的中的collider组件中的设为触发器选项打开

unity监听按键值_unity_07

 3.假设物体a要和物体b发生碰撞,我们把b的碰撞器组件中的is trigger打开后,a去碰b的时候就会直接穿过b而不会发生碰撞!

也就是说,碰撞器能够穿过触发器,二者之间不会发生碰撞

unity监听按键值_游戏引擎_08

 当一个物体a的碰撞器组件如上打开了is trigger后,这个物体a就变成了一个触发器,没打开is trigger的物体b去碰撞a的时候会直接穿过a

如果关闭了a的is trigger,a就会变回普通的碰撞器,又能够正常的和b碰撞了

设置触发器的流程:

1.创建一个游戏物体,在它的碰撞器组件中打开is trigger

2.我们常常希望触发器不被看到,所以我们再把这个游戏物体的mesh render关闭,使其不被渲染,这样的话我们就看不到这个触发器了

3.给触发器挂载一个监听脚本,监听触发的发生,持续和结束(这一部分和碰撞很相似)

unity监听按键值_编译器_09

 第一个方法在监听到触发发生的那一刻的时候会被执行

第二个方法在监听到触发发生后依然在进行的时候执行、

第三个方法在监听到触发结束的那一个的时候执行

unity监听按键值_unity_10

 函数里的参数是一个碰撞器对象,这个参数承接的是与触发器发生碰撞的套在游戏物体上的碰撞器