(评论区已解决)多碰撞盒继承下的子子物体碰撞——手机测试时碰撞消失不完全(附工程

[复制链接]
1598 |9
脑的研发记录 发表于 2023-8-20 09:55:27 | 显示全部楼层 |阅读模式
本帖最后由 脑的研发记录 于 2023-8-21 21:39 编辑

(评论区已解决)多碰撞盒继承下的子子物体碰撞电脑手机端差异——手机测试时碰撞消失不完全(附工程)
二次编辑注:bug版本0.25.0.4,现已能绕过,方法在评论区的最后

子物体关系如图:
360截图20230820090542427.jpg
做了一个消失环,功能是无论在环的哪个位置进入,环都会消失,环的碰撞也会消失

电脑端正常,手机二维码测试就消失不完全。
子物体,子子物体等的碰撞继承都开了。
原来以为是不支持多个同级子物体,然后又做了一个小预制体,只放了一个方块看看能不能绕过啥机制,结果还是不行。

附件里有两个测试点:
一个是出生平台的蓝色方块,分别从三个不同位置进入,中间的蓝色方块都会消失,PC测试时,碰撞也都消失,但是手机测试时,中间的蓝色方块的碰撞不一定消失。
另一个测试点是出生平台旁边的环,电脑端正常。手机测试时,走两三步进去环,环消失,碰撞不消失,虽然环的某一侧的方块确实消失了,可是消失1/4还是不大办呢。

总之:
以为是不支持碰撞继承,结果电脑咋跑都符合预期,手机上就白瞎,奇奇怪怪的。
好像理由充分,可以安排一下代码同学(bushi)。
这是最小bug复现的附件,预制体的子物体可以换成其他方块。
bugDemo.zip (240.5 KB, 下载次数: 141)
回复

使用道具 举报

喵喵哭唧唧 发表于 2023-8-20 11:36:57 | 显示全部楼层
本帖最后由 哭唧唧的细狗 于 2023-8-20 13:50 编辑

你好,我这边写了一个最小demo,发现功能是完全正常的,怀疑是预制体制作过程中由于某些原因产生了bug导致的

劳烦请重新制作一下相关预制体(我这边普通对象,生成了预制体,预制体中使用打组,都没有出现问题)
回复

使用道具 举报

脑的研发记录楼主 发表于 2023-8-20 14:04:12 | 显示全部楼层
喵喵哭唧唧 发表于 2023-8-20 11:36
你好,我这边写了一个最小demo,发现功能是完全正常的,怀疑是预制体制作过程中由于某些原因产生了bug导致 ...

谢谢你啦。我解除了group,然后实例化了这些对象测试。不过手机上还是这个情况,然后不用预制体搭了一个小的,也还是只在手机上碰撞不消失。
可以麻烦给一下那个最小demo吗?如果这个demo手机上测试没有问题的话,我就用阁下的demo当环境慢慢搭起来然后合并到游戏里
回复

使用道具 举报

脑的研发记录楼主 发表于 2023-8-20 14:27:33 | 显示全部楼层
脑的研发记录 发表于 2023-8-20 14:04
谢谢你啦。我解除了group,然后实例化了这些对象测试。不过手机上还是这个情况,然后不用预制体搭了一个 ...

我这里是用这个方法做一点其他形状的碰撞体,这样做出来碰撞体之后,把物品绑到最子层的碰撞体,这样就可以实现做各种形状的碰撞体了。但这些形状碰撞体做啥用没想好,也就目前做个圆圈用吧。
回复

使用道具 举报

哭唧唧的细狗 发表于 2023-8-20 15:47:34 | 显示全部楼层
脑的研发记录 发表于 2023-8-20 14:04
谢谢你啦。我解除了group,然后实例化了这些对象测试。不过手机上还是这个情况,然后不用预制体搭了一个 ...

bugDemo.rar (255.04 KB, 下载次数: 140)
回复

使用道具 举报

脑的研发记录楼主 发表于 2023-8-20 16:53:48 | 显示全部楼层
哭唧唧的细狗 发表于 2023-8-20 15:47
这个就是在你的项目里重新做了一点的最小demo了,手机上稳定可以掉下去的
...


我好像明白了,但是0.25.0.5还没有更新日志文档,估计是得等更新了。谢谢你
360截图20230820164449483.jpg
回复

使用道具 举报

哭唧唧的细狗 发表于 2023-8-20 17:01:19 | 显示全部楼层
可以等一下026哈,估计快要上线了,另外即使是025.0.4也是可以正常的
回复

使用道具 举报

脑的研发记录楼主 发表于 2023-8-20 22:35:29 | 显示全部楼层
本帖最后由 脑的研发记录 于 2023-8-20 22:53 编辑
哭唧唧的细狗 发表于 2023-8-20 17:01
可以等一下026哈,估计快要上线了,另外即使是025.0.4也是可以正常的

多谢哩,不过最小demo还是有一点差别的,
用这个方法做奇形怪状的碰撞体,关键在于多个触发器控制同一个物体,如果没有API代码脚本,就只能用物体与子物体这种的去继承了,但是如上例子的最小demo其实触发器-1不能完成对另一个触发器方块的控制。就是踩上右侧的方块,左侧不消失。
360截图20230820211556951.jpg



不过要是说最小demo的话,就是去掉如图的蓝色选中的方块就是。不过我们要检测一下这个方块究竟有没有被继承控制,然后把下面的方块拉长,如图所示。 360截图20230820214038035.jpg

然后电脑正常,手机还是不行的,从左侧踩上去方块碰撞还不会消失。但是右侧可以。这就说明实际上手机运行时,触发器与触发器是没有继承的,但是为什么原来demo可以呢?由于右侧有个触发器,所以实际上右侧掉落,还是触发器在作用。不过其实也可以检测,就是在原demo里从右边消失的时候跑到左边,左边和右边同时消失,理应是掉下去,但是还能通过左边再跑回平台。只有不同时消失,才能形成这个情况,只要不同时消失,一定是没有继承。

其实也比较好理解,我又刚才翻了翻触发器的属性,碰撞只有盒体和球体。我猜触发器的碰撞一定是开的,而且内部实现没有继承代码这一说,设计的时候肯定没有考虑到这种情况。“怎么触发器的碰撞还得继承呢?用到触发器的时候,触发器的碰撞一定是开着的。”可能代码同学就给忽略了这个“继承”。本地测试,编辑器把触发器当普通方块,运许继承,但是上传游戏,服务器就去掉了编辑器把触发器当可继承的方块这个默认,所以就导致电脑能跑触发器继承,手机跑不了触发器继承。

但现在我有了新的想法,要么就用方块搓一个,我发现正方体的碰撞属性有个“仅查询碰撞”,我想着用这个属性搓一个新触发器,这些方块一个继承一个,形成一个触发链,当其中一个触发的时候,脚本运行dispatchlocal,使得这个触发链最底下的子物体碰撞属性都变成off,其他相关物体继承这个子物体的碰撞。这样就完成多个触发器控制同一个物体,再解这一个物体控制其他次一级的全部物体,最后,物体的碰撞都消失了。至于可见性的设置,再参考补上代码就行。
不过问题在于如何获取这个进查询碰撞这个函数,触发器有个trigg.onEnter.add(),可以写事件,但是这种方块是要设置了以后, this.gameobject as trigger ,再用那个函数就行吗?,会不会as trigger了以后还会有继承限制呢?


PS.其实最小demo是做一个消失环:无论从环的哪里进去,环都会消失。不过从原理上来说,其实还就是触发器继承。简单来讲触发器和环不是同胚的,不能靠变形来实现消失环,环中间有孔,但是碰撞盒不是。所以采用围起来的方法,又要求每个碰撞盒都控制这个环,要么继承改变:代码脚本子物体碰撞改变;要么并列改变:代码脚本各自dispatch给目标物体去改变属性。
回复

使用道具 举报

哭唧唧的细狗 发表于 2023-8-21 13:23:54 | 显示全部楼层
脑的研发记录 发表于 2023-8-20 22:35
多谢哩,不过最小demo还是有一点差别的,
用这个方法做奇形怪状的碰撞体,关键在于多个触发器控制同一个物 ...

你项目里的案例确实存在bug哈,这边已经修复了,但是发版要等待027版本才能修复,目前只能想办法绕过一下
回复

使用道具 举报

脑的研发记录楼主 发表于 2023-8-21 21:18:44 | 显示全部楼层
本帖最后由 脑的研发记录 于 2023-8-21 21:41 编辑
哭唧唧的细狗 发表于 2023-8-21 13:23
你项目里的案例确实存在bug哈,这边已经修复了,但是发版要等待027版本才能修复,目前只能想办法绕过一下 ...

绕过去哩,我给最下边的子物体加了个脚本,每隔100毫秒检测一次物体的可见性状态,检测到物体不可见时,就把物体的碰撞关闭,然后再把环挂在这个物体下面,继承碰撞属性和可见性。这样一个额外脚本控制根物体就行,即使是规模大一点,这个补丁脚本对性能影响不大。幸亏可见性继承还是可以利用的。
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表