网站公告 | [优惠活动] 泰课在线11.11持续7天抢楼帖【优惠码放送】
查看: 940|回复: 22
收起左侧

[问答活动] n个物体可能与主角发生碰撞减少碰撞检测思路

[复制链接]

[问答活动] n个物体可能与主角发生碰撞减少碰撞检测思路[复制链接]

泰课_robin 发表于 2017-8-31 09:57:45 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式 回复:  20 浏览:  940
回帖奖励 28 泰斗币 回复本帖可获得 2 泰斗币奖励! 每人限 1 次(中奖概率 80%)
这是从我们的VIP活跃群发起的一个常规解答活动。
Unity3d解答活动,问:场景中有 n个物体可能与主角发生碰撞,有多少路思路可以减少我们的主角与这些物体的碰撞的检测?开发中有哪些处理碰撞的做法会增加性能的开销?

这是一个解答活动帖,请大家自行占楼解答,答案只有管理员与你自己可见。
活动周期:四天,周日结束。
活动奖励:只要好好解答每人奖励10泰斗币。优秀全面的解答20泰斗币。(泰斗币可换书,换泰课代金券)

--------------分割线-------------------

n个物体可能与主角发生碰撞减少碰撞检测思路

n个物体可能与主角发生碰撞减少碰撞检测思路

前200个免费进,这个群是为了活跃交流,解决不了的问题也会记录到论坛尽量找人帮忙。经常会有小练习,小问题,小福利发起,适合初中级学习人。不活跃屏蔽群聊不要进。
+1
951°C
20
  • feiyi55555
  • 夜猫子丶
  • ziyang
  • BingoX
  • yuanyiyanan
过: 他们
因分享而快乐,学习以自强!
feiyi55555 发表于 2017-8-31 10:08:35 来自手机 显示全部楼层

回帖奖励 +2 泰斗币

沙发,其实就是想问球球大作战这类io游戏是怎么减少碰撞运算的是吧,可以考虑用树

点评

这是解答活动哦,能把思路说详细点嘛  发表于 2017-8-31 10:11

免费评分

参与人数 1泰斗币 +10 收起 理由
泰课_robin + 10 是个思路

查看全部评分

因分享而快乐,学习以自强!
夜猫子丶 发表于 2017-8-31 10:12:35 显示全部楼层

回帖奖励 +2 泰斗币

占楼!!!!!
因分享而快乐,学习以自强!
ziyang 发表于 2017-8-31 10:12:43 显示全部楼层

回帖奖励 +2 泰斗币

萌新不太懂  占个楼
因分享而快乐,学习以自强!
BingoX 发表于 2017-8-31 10:14:12 显示全部楼层

回帖奖励 +2 泰斗币

占楼占楼!!!!!
因分享而快乐,学习以自强!
yuanyiyanan 发表于 2017-8-31 10:15:12 显示全部楼层

回帖奖励 +2 泰斗币

使用基础碰撞体减少性能开销
OnTriggerEnter检测
Vector3.Distance 检测

增加性能开销:
使用Mesh Collider

免费评分

参与人数 1泰斗币 +20 收起 理由
泰课_robin + 20 靠谱

查看全部评分

因分享而快乐,学习以自强!
qewi 发表于 2017-8-31 10:18:21 显示全部楼层

回帖奖励 +2 泰斗币

1,可以在editor->project setting->physics里面设置撞碰层.
2,使用tag,只与某些tag碰撞。

免费评分

参与人数 1泰斗币 +20 收起 理由
泰课_robin + 20 基本是这样

查看全部评分

因分享而快乐,学习以自强!
BingoX 发表于 2017-8-31 10:35:52 显示全部楼层
唔,可以使用平衡二叉树吧,每个要查询的物体都是都是一个叶子节点,2个叶子拥有共同的一个空的父物体,两个父物体再有一个空的父物体。。。。,然后从根节点下面的左孩子节点开始进行判断是否碰撞到了主角,碰撞到了进入左子树,没碰撞到进入右子树,以此类推,直到最后查找到
因分享而快乐,学习以自强!
lxj1996 发表于 2017-8-31 10:48:31 显示全部楼层

回帖奖励 +2 泰斗币

缩小碰撞器大小,去掉不必要的碰撞器

免费评分

参与人数 1泰斗币 +10 收起 理由
泰课_robin + 10 这是简单的处理方法

查看全部评分

因分享而快乐,学习以自强!
xiaoxinde 发表于 2017-8-31 10:56:41 显示全部楼层

回帖奖励 +2 泰斗币

在主角身上加1.5倍大圆球的碰撞体,通过检测碰撞体和其他的碰撞体的触发事件来调整路线!
因分享而快乐,学习以自强!
无敌了咋办 发表于 2017-8-31 10:58:57 显示全部楼层
C:\Users\Administrator\Desktop1.给物体设置Tag,只有特定的Tag才能与主角发生触发检测。
2.菜单Edit-ProjectSettings-physics 可以设置主角与哪些物体能够触发检测。

3.当与一个物体发生触发检测时,将Is Trigger设置为false,也可以过段时间再设置为true开启检测。
)6K5N47VK82%L9H(R{5LWWE.png

免费评分

参与人数 2泰斗币 +20 收起 理由
admin + 10 第三点,也是思路,需要完善
泰课_robin + 10 开启一定距离的检测更好,如果只是碰到了不.

查看全部评分

因分享而快乐,学习以自强!
直隶总督0312 发表于 2017-8-31 11:23:58 显示全部楼层
1、用简单的规则形状(比如球)碰撞体代替多边形碰撞体;
2、禁用一定距离外的碰撞体,激活距离内的碰撞体;
3、不用真实的物理碰撞过程,用算法模拟。

使用多边形碰撞体、提高碰撞检测的迭代次数等会增加性能开销。

免费评分

参与人数 1泰斗币 +20 收起 理由
泰课_robin + 20 赞一个!

查看全部评分

因分享而快乐,学习以自强!
kx88 发表于 2017-8-31 12:38:07 显示全部楼层

回帖奖励 +2 泰斗币

以前做贪吃蛇大作战2d版本的时候,由于场景中有大量的gameobject,蛇头和蛇身,15条AI蛇,同时移动又要检查蛇身和食物的碰撞情况。刚开始的时候采用unity自带的collider和射线进行检查碰撞。性能明显不行,FPS只有10-20。可能是我的手机比较渣,用的红米2增强版测试的。后来将碰撞检测改为传统的2D碰撞测试方法,就是循环迭代所有gameobject圆与圆相交的方式。FPS有明显提升40-50几。但是随着蛇身越来越长,gameobject越来越多2000以上,FPS下降到30-40几了。后来又加入空间划分四叉树,提升不明显,有时FPS还会下降。因为屏幕上除了食物之外所有蛇都是同时运动和旋转中的,需要频繁更新四叉树中的位置信息,然后移动蛇身的时候发现有大量时间都花在了SetPositionAndRotation方法中。至于大量同时移动gameobject我也不知道怎么优化。所以就没有继续优化下去了。
因为我也是个菜鸟,刚学不久,一直是一个人开发嘛,又只开发移动平台的app,难免有说得不对的情况。
我个人总结:
1.对少量的不是非常频繁的碰撞用unity自带的就行了。在Physics中配置好他们的碰撞关系减少不必要的碰撞。
2.大量碰撞的无论是2d或者3d游戏,我自己是使用的传的2d方式进行碰撞检测的。
3.还有其他的一些优化工作如图集合并,mesh合并,减少dc,对象池等等太多了。
4.学会分析Profiler,里面有好多信息能够帮你分析性能瓶颈在哪。

免费评分

参与人数 1泰斗币 +20 收起 理由
泰课_robin + 20 很给力!

查看全部评分

因分享而快乐,学习以自强!
XIAOWEN 发表于 2017-8-31 13:06:27 显示全部楼层

回帖奖励 +2 泰斗币

可以将同类型的碰撞放在一起。
因分享而快乐,学习以自强!
bzyzhang 发表于 2017-8-31 19:26:05 显示全部楼层

回帖奖励 +2 泰斗币

主角使用public static Collider[] OverlapSphere(Vector3 position, float radius, int layerMask);检测。其中layerMask设置为要检测物体的层级。调整适当的radius即可。

免费评分

参与人数 1泰斗币 +10 收起 理由
泰课_robin + 10 赞一个!

查看全部评分

因分享而快乐,学习以自强!
12下一页

本版积分规则

VR/AR版块|Unity3d|Unreal4|新手报道|小黑屋|站点地图|沪ICP备14023207号-9|【泰斗社区】-专注互联网游戏和应用的开发者平台 ( 沪ICP备14023207号-9 )|网站地图

© 2001-2013 Comsenz Inc.  Powered by Discuz! X3.2

1
QQ