位置: 编程技术 - 正文
推荐整理分享Unity3d 物理碰撞de那点事(不是触发)(unity3d物体碰撞),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:unity碰撞函数,unity碰撞原理,unity物体碰撞后不能移动,unity2d物理碰撞,unity2d物理碰撞,unity物体碰撞检测,unity3d物体碰撞,unity2d物理碰撞,内容如对您有帮助,希望把文章链接给更多的朋友!
还是那句话 大神勿喷 不喜勿喷 若有不对的地方 欢迎指正 欢迎拍砖。。。
OK!! 其余的废话就不多说的了 直接进入正题。那么,今天要讲碰撞,碰撞 碰撞,怎么样才能算是有发生碰撞呢。再我看来,首先 至少得有两个物体,物体与物体之间才能产生碰撞,对吧,其次,物体身上得有碰撞器,不然 都没有一个标志的东西,那不是随随便便的物体就可以发生碰撞了,那怎么能行,对吧。。那么,可能有的读者看到这里就会说了,那碰撞器是一方有呐 还是 双方都要有呢? 这个 我也不知道,不过 我们可以做实验看看哟...(博主有点卖关子,抽他,狠狠的抽他)
我们新建一个场景,在该场景中摆放三个cube物体,并分别取名为red,yellow和blue,此时,可以从组件面板中看到他们都有Box Collider组件,接下来 我们编写一个脚本来移动控制blue物体, 代码很简单,就一句搞定 我就不粘贴出来了 使用Translate函数就可以了 。那么完事后,我们移动blue物体去撞击red和yellow物体 可以看到blue穿越了red和yellow物体,如图
显然,这样就没有发生碰撞,当然 为了更加的进一步证实这样是没有发生碰撞的 我们在blue物体身上的脚本中再次加入如下代码:
代码 的含义就是 检测是否有发生碰撞 若有发生碰撞 输出被碰撞物体的名称。运行游戏,可以看到效果和刚才是一样的,也并未见到控制台有debug语句的输出,所以 可以得出:若仅仅只有collider碰撞器的话,是无法发生物体之间的碰撞的.那么 ,怎么样才能发生碰撞呢,此时,我们想想现实当中的一切物体都是有重力的存在的,那么游戏当中我们是不是也加上重力试试看呐,那么,给谁加呐 红色cube, 蓝色cube还是黄色cube呢,我们不妨一个一个试试看,我们先将黄色cube加上rigidbody属性 和红色cube做一个对比,可以发现 最终的结果和上边是一样的,发生了穿越,黄色cube虽然有了重力属性,但,依旧是被蓝色cube穿越了,那么 此时 我们场景当中的cube碰撞器属性和重力属性的分布是:红色cube只有Box Collier,没有rigidbody属性,黄色cube既有Box Collider属性又有rigidbody属性,蓝色cube只有Box Collier 属性 没有rigidbody属性。 那么,从这里我们可以得出的结论是:在两个物体都有Box Collier的基础上 有且仅有一方有rigidbody属性,碰撞条件是不陈立的,也就是说他们之间碰撞的话是不会有碰撞的效果的。注意:这个结论 我不敢说是百分百的正确,但是 ,至少读者看到这里,可以暂时这么认为。 我们先把这条结论定为结论1。
那好,我们紧接着在蓝色cube上加上rigidbody属性,运行游戏 我们可以看到,此时,意想不到的结果出现了,不发生穿越现象了 如图,碰撞红色cube:
碰撞黄色cube:
控制台的输出信息:
Plane是我用来充当地面的一个面片...在这里是无关紧要的.
得注意的是:此时 蓝色cube和红色,黄色cube都发生了碰撞 而 红色cube身上只有Box Collider属性并没有重力属性,所以,刚才的结论1就被推翻了。。。有没有感到一点小兴奋,然而 这又能说明什么呢!!!!
说明的问题大发咯,当然 我们此时就先不拿什么静态碰撞器,刚体碰撞器的之类的词语来说事了,个人觉得那些没啥意思,只是唬人的。我换种方式来讲,首先 我们先分析分析 蓝色cube身上的组件 既有rigidbody 又有Box Collier,那 我们将这类游戏物体称之为A类游戏物体,那么由此得到的结论是什么:只要某一游戏物体身上有BoxCollider 那么我们用A类游戏物体去碰撞该游戏物体就一定会有碰撞效果,那,那,为了更加的肯定我们这一点,我将黄色cube身上添加一个脚本,脚本内容很简单,就一句主代码:
然后 将蓝色cube身上的脚本代码中的OnCollisionEnter()屏蔽掉;运行游戏可以发现 当我们 蓝色cube去碰撞黄色cube的时候,控制台输出了信息:blue。 从这你能看出点什么的么,此时,是不是就相当于蓝色cube被黄色cube代替的了,好了,看到这里,是更正名字的时候了,什么意思呢? 就是 ,我们称A类游戏物体为刚体碰撞器,而我们称红色cube这种只有BoxCollider的游戏物体为静态碰撞器,所以 我们这里 得出的结论是:刚体碰撞器去碰撞任何的静态碰撞器 都会有碰撞的发生. 当然, 同样,我也不敢说此时得到的结论是百分百的正确,不过,暂时我们就先这样的理解,那么 我们称这条结论为结论2。
那,实验结束了?你觉得结束了么,反正,我把我自己当成读者的话,我会觉得还不过瘾,为什么这么说呢? 你想想,我们不是得到结论2,那么结论2是说刚体碰撞器去碰撞任何静态碰撞器,都会有碰撞的发生,那好了,那再上边的基础之上,我如果将蓝色cube身上的rigidbody属性去掉,然后,去碰撞红色cube和黄色cube,按照我们的结论2,我们事先可以预测就是:与红色cube不会发生碰撞,与黄色cube会发生碰撞,没错吧!!!想想是不是,我们黄色cube此时就是充当刚体碰撞器的角色,所以,当我们的蓝色cube(此时的静态碰撞器)主动去碰撞黄色cube时,按结论2不就会发生碰撞效果。那结果会是这样的么,我们拭目以待。所以,我们走一个,将蓝色cube身上的rigidbody属性去掉,然后,运行游戏,可以发现:与红色cube和黄色cube均没有发生碰撞,也就是说,我们的结论再次被推翻了。。。此时,读者的心情是喜还是忧呢,不过,我猜想更多的应该是柳暗花明的感觉吧...,当然,这里的柳暗花明可能更多的指的是那种结构上的柳暗花明而不是结论上的柳暗花明。
ok,我们一鼓作气,乘热打铁,既然 蓝色cube去碰撞黄色cube没有碰撞效果,那么,反过来,我使用黄色cube去主动碰撞蓝色cube,那会不会有碰撞的反应呢?想想,按照结论2是可以,不过结论2已被推翻,其实,与其说结论2被推翻不如说在某些条件下结论2是成立的,不过 我们这里 先不讨论这个。那么,我们接着实验一下,看看到底有没有碰撞反应,我们在黄色cube身上的脚本中再次加入如下代码,代码很简单,我也不做过多的解释 就是控制黄色cube的旋转和移动。
我们移动黄色cube去碰撞蓝色cube,神奇的现象出现:碰撞“奇迹”般的发生了。怎么会这样呢?读者心里是不是一直在纠结,为什么会这样呢。。。。反过来居然就可以,同样,暂时不论,先给大家卖个关子,同时大家也可以自己想想能得到什么样的结论,因为,现象是如此了,结论是由人定的,自己定的结论,就是自己的经验了。那我们继续咯。说实话,通过上边的实验,能得到什么样的结论,我也不知道了,因为,得到的两条结论都被推翻了。此时,有读者能得到什么好的结论么。求分享,求分享。。。嘿嘿
当然,上边卖萌一下,文章还得继续(此文章非彼文章,you konw that).细心的读者,可能会发现上边我描述碰撞的时候,我使用了"主动碰撞"一词,又加上我们又实验了黄色cube碰撞蓝色cube这一血的事实。所以,我们大胆的来一个假设吧?也就是说在结论2的基础上稍做修改,变为:刚体碰撞器主动的去碰撞静态碰撞器才能发生物体之间的碰撞,而刚体碰撞器被动的接受碰撞静态碰撞器的碰撞是不会发生碰撞的。“主动的去碰撞”和“被动的接受碰撞”,这两个词语在假设的结论中形成鲜明的对比,我想此处应该是无声胜有声了吧!!!!
ok 也不再做更多的实验来证实这个结论的了,因为,再做下去文章就变得又臭又长的了,也是时候到尾声的了,当然,欢迎读者指出错,欢迎拍砖,而且是狠狠的拍。(我皮厚着呢).
ps:转载 请注明出处 谢谢....
一起来学u3d之圣典.7 一起来学u3d之圣典.7废话不多说,一针见血,go!一起来看API其中不懂的大家互相帮助哈英文部分版权属©Unity公司所有,中文部分©Unity圣典版权所有。
《Unity网络多玩家游戏开发教程(上册)》 欢迎大家到我们团队的官网上查看此书的详细介绍,下面是链接《Unity网络多玩家游戏开发教程(上册)》我们的宗旨是:我们只做最专业的技术传播者!
Unity3D与Android项目交互中无法监听back键返回的解决办法 这两天为解决unity3d与android项目整合中出现的无法监听真机back实体键的问题找了很多资料,网上也有很多人遇到了这个问题,但是乎都没找到有效的解
标签: unity3d物体碰撞
本文链接地址:https://www.jiuchutong.com/biancheng/375685.html 转载请保留说明!上一篇:[置顶] (八)Unity5.0新特性------IL2CPP Internals: 生成的代码之旅(置顶聊天折叠怎么开启)
下一篇:《Unity网络多玩家游戏开发教程(上册)》(unity局域网多人游戏)
友情链接: 武汉网站建设