XLT的unity3D学习笔记(四)

  • 写在前面:谈到游戏引擎,就不得不谈碰撞。碰撞可谓是所有物理特效中最基础,最实用的了。今天这篇笔记记录的就是我最近实用unity引擎中遇到的和碰撞有关的一些内容。

Unity碰撞发生条件:

在unity中,两个物体要想发生碰撞,必须满足以下2个前提条件:
1.两个物体都具有collider或继承了collider的组件
2.其中一个物体具有rigibody(刚体)组件

Unity碰撞过程:

在unity引擎中提供和碰撞相关的API有这样几个:OnCollisionEnter(),OnCollisionExecute(),OnCollisionExit()。从字面意义上看,三个函数似乎是表示碰撞前,碰撞时,碰撞后的瞬间,因此如果我们想要对碰撞做一些修改似乎是可以在这几个函数中实现。

然而事实却并非如此!!!!!

经过我多次试验发现,无论在Enter,Execute还是Exit中,当你想要调用函数获取当前的各项物理属性(速度,位置等),这时候拿到的物理属性都是碰撞过后的属性!!!天坑啊!!!
为什么会是这样呢,其实我后来想了想,unity这么做也是有一定道理的。至于为什么,可以用这么一句话来解释“因为在引擎中,除非两个物体真的发生碰撞了,不然unity无法判断两个物体到底有没有碰撞!”试想一下,当两个物体离得很近很近的时候,看上去是有可能要发生碰撞了,但是没有人知道下一秒这两个物体会不会就相对静止!没有发生的事情怎么预测呢!人可以凭借直觉,但是目前来看,unity是做不到这一点的。所以就目前我了解到的来看,无论是执行Enter,Execute还是Exit函数,都是在unity计算好了碰撞后的物理属性以后才执行的。

如果我就想拿到碰撞前的速度呢?

那么问题来了,如果我们想拿到碰撞前的一些属性怎么办呢?比如我就是想拿到碰撞前一瞬间两个物体的速度应该怎么办呢?我也想到了一个野路子方法:给其中一个物体挂一个脚本,让它复制一个这个物体的meshcollider,并把它放大一点点,比如scale乘上个1.01这种,然后再把这个meshcollider设置成OnTrigger,只用作触发,这样的话在这个“放大”了一点点的meshcollider与另一个物体触发时,我们就可以拿到另一个物体的速度了是不是?这个速度就可以认为是碰撞前的速度了。

PS:其实我认为unity引擎应该是可以提供碰撞前的速度的,因为引擎本身计算碰撞效果的时候肯定是需要用到碰撞前的速度的,但是为什么unity没有对外开放这个接口,我也不知道为什么。说不定在以后版本的unity就可以见到了(反正目前的5.4版本我是没见到)!

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值