位置: 编程技术 - 正文

Unity3d 物理碰撞de那点事(不是触发)(unity3d物体碰撞)

编辑:rootadmin

推荐整理分享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是我用来充当地面的一个面片...在这里是无关紧要的.

Unity3d 物理碰撞de那点事(不是触发)(unity3d物体碰撞)

&#;得注意的是:此时 蓝色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局域网多人游戏)

  • 业务往来中接受礼品道德吗
  • 建筑企业有哪些
  • 财政部监制章可以报销吗
  • 处置长投时其他权益变动
  • 待抵扣进项税什么时候抵扣
  • 核定征收企业股权转让的税收
  • 委托加工什么时候代收代缴消费税
  • 机动车发票申请流程
  • 差旅费报销会计科目
  • 顾客退货补差价怎么做账?
  • 公众号注册验证方式
  • 应收而未收的装修款如何做账务处理?
  • 企业所得税中的不征税收入有哪些
  • 事业单位乱报销出纳怎么办?
  • 子公司员工向母公司申请党员
  • 个人账户付款可以开公司发票吗
  • 抄税忘记了怎么办
  • 工信部联企业[2011]300号 小型企业
  • 单位参加城镇职工基本养老保险缴费基数怎么填写
  • 委外加工企业怎么样降本
  • 公司购买房屋涉税问题
  • 历年亏损企业开什么发票
  • 符合条件的小型微利企业减按多少的税率征收企业所得税
  • 生产企业成本会计科目
  • 公司接受承兑汇票的风险
  • 个体户对私账户
  • 购物卡怎么给
  • 企业房产税如何计算方法
  • 无销售发票的基本户收入?
  • 利用php计算1+2+3+...+100
  • framework怎么用
  • 生产经营个人所得税速算扣除数表
  • 学生个人网站制作html代码
  • 企业接受投资会导致所有者权益增加吗
  • 能单独打一张发票的软件
  • 增值税申报表中销售额
  • 以前年度收入少计如何做帐
  • for循环语法结构是什么
  • phpcms默认密码
  • 2022年我们国家将举行什么样的盛会
  • 工程结算如何做会计分录
  • 进项抵扣了还要交附加嘛
  • 各人所得税法规定
  • mysql索引失效的几个场景
  • 外购的商品
  • 公司购买手表入什么科目
  • 核定征收所得税税率是多少
  • 冲红发票如何做账务处理
  • 国库集中支付业务包括哪些
  • 防伪税控服务费全额抵扣申报表怎么填
  • 给业务员的佣金怎么做账
  • 购买农产品进行销售要交税吗
  • 小规模纳税人发票可以抵扣吗
  • 电子发票服务平台怎么下载发票
  • 收到现金支票没有盖章
  • 通过备份记录获取文件
  • windows10pc游戏无法全屏
  • mac 显示器
  • mac的虚拟机
  • win8禁用网络之后如何开启
  • 快捷图标小箭头怎么恢复
  • mac的mail登不上
  • windows xp.exe
  • centos6.10安装
  • win7系统电脑开机黑屏
  • redhat linux安装
  • win10资源管理器频繁无响应
  • jquery生成网页内容
  • node.js 模块
  • android入门书
  • c#在unity的作用
  • shell脚本-lt
  • vue vue cli
  • 使用驱动器u盘之前需要格式化
  • javascript高级程序设计pdf下载
  • javascript基础教程pdf下载
  • 农村医保网上如何查询
  • 社保申报后多久缴费
  • 残疾人贷款买房
  • 环保税2018年开征文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设