位置: 编程技术 - 正文

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局域网多人游戏)

  • 税收的作用是什么
  • 单位历史遗留问题
  • 年报的资产负债率在哪里
  • 金融类企业
  • 年平均资金占用额计算公式
  • 独资合伙企业的所有者用于承担企业财务风险的财产是
  • 房屋租赁可以开住宿费吗
  • 代扣代缴的增值税怎么做账
  • 城建税教育附加地方教育附加的税率
  • 向农户购买农产品如何入账
  • 税控系统服务质量调查报告
  • 公司缴纳电费
  • 收入纳税明细怎么打印
  • 分公司的款汇入总公司得出什么证明
  • 网上代开专票 附加税在哪看
  • 是否所有监控设备都录像
  • windows defender隔离区
  • 新版edge浏览器兼容性视图怎么设置
  • 网页不播放声音怎么设置
  • 全部投资内部收益率
  • 事业单位采购管理办法
  • 开发票时的数据可以四舍五入吗
  • windows 搜索工具
  • php获取文件列表并输出
  • 房地产企业哪些成本上升了
  • element-plus vue
  • ntfs文件夹权限高于文件权限
  • 麦克米伦anki
  • php traits
  • 金融保险业的营业税率为
  • 地下停车位是否符合国家安全标准咨询那个部门
  • yii2关联查询
  • 哪些费用报销可以不用发票
  • 实际出资大于注册资金
  • python return和yield有什么不同
  • 工程物资进项税额转出
  • 个人提供的劳务费要开发票,但是薪资不需要开发票
  • 预期信用损失率的确认依据和过程
  • 盖骑缝章的合同可以双面打印吗
  • 合并设立是什么意思
  • 商贸公司用什么软件好
  • 月末一般要结转哪些会计科目
  • 小规模纳税人进项票可以抵扣吗
  • 留底税额账上怎么体现
  • 资本金利润率正常范围
  • 计提工资时个税挂其他应收款
  • 开发间接费用怎么计算
  • 员工房屋租赁合同
  • 原材料暂估的业务包括
  • 股东分红需要
  • 固定资产的主要特征
  • 公司买车车辆购置税怎么交钱
  • 公司里的废品的处理一般是谁负责
  • 股票交易费用计算器小程序
  • mysql序列函数
  • windows7禁用usb
  • freebsd查看硬盘信息
  • 重装系统的简写
  • windows xp桌面图标
  • route.exe - route是什么进程 有什么用
  • edge新版浏览器
  • win8如何更改用户名字?
  • Linux网络抓包工具
  • 常用的linux系统版本有哪些
  • cocos2d schedule
  • javascript解析器
  • linux tcptraceroute
  • Node.js中的事件循环是什么
  • python中的is和==的区别
  • nodejs 加解密
  • android错误报告
  • javascript怎么样
  • 企业如何在网上申请缴税三方协议
  • 税务八项规定日期怎么写
  • 税盘注销了怎么申报增值税
  • 国家税务总局吕梁市税务局官网
  • 新办纳税人是什么多久之内
  • 辽宁国税征期日历
  • 云南省电子税务局登录入口
  • 贵阳市税务电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设