unity做手游,用到了碰撞检测,消耗unity3d光源性能消耗厉害吗?

unity3d碰撞检测和触发
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。
碰撞器:一群组件,它包含了很多种类,比如:Box
Collider(盒碰撞体),Mesh
Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
触发信息检测:
1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器
2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collision) 当逗留碰撞器
两个物体相接触时到底执行OnTriggerEnter还是执行OnCollisionEnter方法,这两个又有什么区别呢?
为了验证碰撞器与触发器的区别,现设计一个简单的游戏,让小汽车与小球发生碰撞。新建一个C#脚本文件,把它拖给小汽车对象,双击该脚本文件进入脚本编辑器,在该脚本中加入如下两个方法,并分别设置一个断点:
void OnTriggerEnter(Collider collider)
//进入触发器执行的代码
void OnCollisionEnter(Collision collision)
//进入碰撞器执行的代码
当未勾选碰撞器的Is
Trigger选项时汽车与球体发生碰撞,进入方法OnCollisionEnter,碰撞之后汽车产生被球体撞飞的效果:
如果将碰撞器的Is
Trigger属性选中,再次启动游戏让球体与汽车产生接触,这时进入方法OnTriggerEnter。之后球体直接穿过汽车,但球体与汽车都没有产生碰撞效果:
unity3d中的碰撞器和触发器的区别?
碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性
Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器
碰撞器:汽车被撞飞、皮球掉在地上又弹起效果
触发器:人站在靠近门的位置门自动打开效果
来源:cnblogs 作者:Infly
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置:&&&&&正文
找好玩手机游戏,上&
UWA发布Unity游戏性能数据分析报告:性能问题消耗严重
在好游快爆上浏览
安装好游快爆,资讯随身看
扫描右侧二维码下载,您可以
· 掌握好玩新游资讯· 查找热门手游攻略· 强大工具助你成功
上海侑虎科技有限公司旗下的游戏/VR应用诊断与资源监测品牌UWA于今日发布了今年的Unity游戏性能数据分析报告。根据官方介绍,该报告的制作过程中,UWA进行了高达1015次测评,生成并分析了1461万帧的性能数据,对不同平台,不同客户机以及游戏结构的表现进行了深入化的测试,收集与分析汇总。
根据报告显示,今年使用Unity开发的3D游戏数量远超2D游戏,但Unity引擎的频繁更新换代,未能影响到游戏开发团队的选择,绝大多数游戏开发商依然在使用老版本的引擎进行开发。
这种现象也是意料之中的,引擎的更换必然会带来对接兼容等问题,即使是同一种引擎,不同的版本,在具体的算法逻辑,图形渲染,解释器脚本以及材质解析上都会有所优化与变动,而这种变动就会导致游戏开发商一定的时间成本来重新适配,从而拖慢项目进度。因此及时更新引擎,对于已经完成前期工作以及正在执行项目的开发商来说并不是合适的选择。
在游戏项目类型方面,今年基于Unity引擎设计的移动游戏以ARPG与MMORPG占主导地位。顺应着此前多方大数据报告所呈现的移动游戏越来越&重&的趋势,已经从简单,快速的手游规则转为向精品化游戏品质发展,步入了游戏发展的第三阶段。
随着硬件水平的提高,游戏内容与模式的饱和化,继续维持现状的游戏设计模式显然是难以具有竞争力了,所以重度化手游是目前比较实际可行的发展方向,也是游戏产业必然要经历的发展阶段。而且Unity引擎的定位已经为移动游戏的重度化提供了完备的基础,最近频繁的更新也在不断对引擎构造进行改善与加强,以实现更加优秀,多元化的游戏功能逻辑支持。
但重度化游戏所带来的直接挑战就是性能开销表现。根据UWA的报告显示,我们可以发现在这一块,现在的大多数游戏都不是做的非常优秀。在游戏CPU开销分布上,Android平台上遇到的性能问题更为严重,而在内存泄露问题上,Android与IOS的内存泄露均占有较高的比重,尤其是IOS泄露占比高达58.7%。
造成这种表现的原因一方面是由于各自系统底层问题所带来的性能利用率不高(例如Android的内存与CPU管理机制对比IOS系统依然存在不足),而另一方面则是大多数游戏团队都是初步涉猎重度游戏的研发,在对纹理、网格渲染,大型素材压缩等环节的处理上优化不到位。
事实上,目前的游戏表现力与图形水平相比已经发展较为成熟的主机平台与PC平台还有着相当的差距,而如果在这样的层次上就已经出现了严重的优化问题,导致大量性能资源不能得到合理的管控,造成丢失。那么当游戏内容与表现进一步进化后,所面临的问题将更加严重,最终将会阻碍重度手机游戏的表现期望。因此如何更好地根据平台特性对资源利用与转化进行优化是目前所有重度游戏开发商刻不容缓,需要立即去解决的问题。
热门游戏推荐
热门关键字
热门游戏专区
扫描二维码,关注4399手游微信1917人阅读
Unity3D(30)
问题:假设现在A物体以非常高的速度移动,而unity每一帧的检测时间大概是0.02秒,也就是说如果物体A速度过快,在不用0.02秒的时间就已经穿过了其他物体,那么这个时候是无法检测A与其他物体之间的碰撞信息的,解决方法如下
void Update ()
Vector3 oriPos = transform.//记录原来的位置
transform.Translate (Vector3.forward * speed * Time.deltaTime); //移动
float length = (transform.position - oriPos).//射线的长度
Vector3 direction = transform.position - oriP//方向
bool isCollider = Physics.Raycast (oriPos, direction,out hitinfo,length);//在两个位置之间发起一条射线,然后通过这条射线去检测有没有发生碰撞
if(isCollider)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:48042次
积分:1627
积分:1627
排名:千里之外
原创:119篇
(1)(1)(1)(1)(1)(1)(3)(1)(1)(1)(17)(20)(19)(17)(10)(3)(19)(8)& &大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei。
& &今天我们来一起来学习Unity3D中一个很重要的概念:碰撞。为什么说碰撞很重要呢?因为在游戏中无时无刻不充满碰撞啊,在飞行类游戏中我们需要判断炮弹是否击中了敌人,在RPG游戏中我们需要判断玩家是否对敌人造成了伤害,在射击类游戏中我们需要判断子弹是否打中了敌人.......总而言之,在游戏中所谓的打击感就是我们今天要讲的碰撞,从概念上来说,一个物体受到来自其它物体的力的影响并发生位置或者状态上的改变,我们就可以称为碰撞。在Unity3D中系统已经提供了碰撞检测的相关方法,这里我们介绍两种碰撞检测的方法:
& &1、Collision检测:使用Collision检测需要用到下面三个重要的方法:OnCollisionEnter()在刚体与刚体接触时立即调用此方法、OnCollisionStay()在刚体与刚体碰撞中调用此方法、OnCollisionExit()在刚体与刚体碰撞结束时调用此方法。
& &2、Trigger检测:使用Trigger检测需要勾选IsTrigger属性,并用到下面的三个重要方法:OnTriggerEnter():开始碰撞、OnTriggerStay():碰撞中&、
OnTriggerExit():结束碰撞。
& &那么两种检测方法的区别是什么呢?Collision将造成物理碰撞,Trigger将造成非物理碰撞&。于此同时,请牢记下面的碰撞原则:
& &a、发生接触(Trigger)的前提是:双方都有碰撞器,且至少一方有刚体,且至少一方勾选了IsTrigger属性。
& &b、发生碰撞(Collision)的前提是:双方都有碰撞器,且至少一方有刚体。
& &下面我们来看一个演示项目,首先创建如图所示的场景。
& &这里我们对碰撞的目标做了判断,如果我们碰撞的对象的Sphere,则会执行目标对象的脚本中的方法,并输出碰撞信息。目标对象Sphere的脚本和Cube类似,这里就不给出了。最后我们来看结果,如我们所预期的那样,屏幕上打印出了碰撞信息,控制台同样输出了相应的信息。
& &在这个演示项目中,我们将使用键盘来控制左边的Cube来碰撞右边的球体,然后再屏幕上打印碰撞信息,在控制台中输出脚本的调用情况。
& &首先我们来看为Cube编写的部分脚本代码:
//一个控制台输出方法
public void Log(string msg)
Debug.Log(msg);
//碰撞开始
void OnCollisionEnter(Collision collision)
if(collision.gameObject.name==&Sphere&)
Message=&进入碰撞,碰撞名称:&+collision.gameObject.
collision.gameObject.GetComponent&TargetScript&().Log(Message);
void OnCollisionStay(Collision collision)
if(collision.gameObject.name==&Sphere&)
Message=&碰撞中,碰撞名称:&+collision.gameObject.
collision.gameObject.GetComponent&TargetScript&().Log(Message);
//碰撞结束
void OnCollisionExit(Collision collision)
if(collision.gameObject.name==&Sphere&)
Message=&碰撞结束,碰撞名称:&+collision.gameObject.
collision.gameObject.GetComponent&TargetScript&().Log(Message);
collision.gameObject.rigidbody.Sleep();
& & 为什么这里要编写两个输出到控制台的方法呢?因为在实际的游戏开发中,当发生碰撞的时候,我们可能需要作出一些更为实际的事情,比如给敌人减血啦,给我方加血啦,这里只是简单地了解了Unity3D的碰撞机制,Trigger检测和这个基本类似,这里就不再赘述啦,谢谢大家,今天的内容就是这样啦!
阅读(...) 评论()你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
用unity3d做手游,子弹射击用到了碰撞检测,OnCollisionEnter、OnTriggerEnter,请问这两个方法消耗性能吗?怕用了,到时手机跑不动。如果不行,有别的解决方案吗?
求大神解释下~~
机体用刚体,碰撞最好用box,子弹只有个boxcollide,这样能减少运算消耗。。
另外他们都用触发器ontrigger。这样就少很多物理计算。。
楼上说的如果是秒中,可以用射线
如果你的子弹都是直线并且是秒中的,可以用射线做一次检测是否击中,然后就不再做检测,只做移动的动画就行了。这样会好很多
如果子弹是比较慢或是转弯的,就只能用碰撞检测,但这样就会比较消耗性能,并且尽量少使用或者不使用刚体。
如果你的子弹都是直线并且是秒中的,可以用射线做一次检测是否击中,然后就不再做检测,只做移动的动画就行 ...如果不用刚体的话,碰撞检测能检测到吗?昨天试着用了一下碰撞检测,不用刚体的话OncolliderEnter()函数不执行
如果不用刚体的话,碰撞检测能检测到吗?昨天试着用了一下碰撞检测,不用刚体的话OncolliderEnter()函 ...不加刚体检测不到的,所以才建议你少加刚体,或者用自己的方式检测是否碰到,比如自己计算距离等
unity3d 就是专门用来做手游端的 你别把它当婴儿哄着好吗?
该用啥就用啥
这有啥, 不就是拿来这么用的么...{:88:}尽管弄,没那么娇气....
谢谢大家,最后还是没用碰撞,自己写了检测算法
谢谢大家,最后还是没用碰撞,自己写了检测算法问下,你自己写的检测算法思路是什么?用开源的还是自己封装?
问下,你自己写的检测算法思路是什么?用开源的还是自己封装?敌人面前有个扇形探测区域,主角进入探测区域,就触发。
就是一个简单的逻辑判断
敌人面前有个扇形探测区域,主角进入探测区域,就触发。
就是一个简单的逻辑判断 ...哦!我还以为是你自己写的算法,重新计算碰撞检测呢!
要回复问题请先或
关注: 0 人}

我要回帖

更多关于 unity3d碰撞检测 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信