Unity2D激光发射误切割自身手臂问题解决方案问询
修复方案(两种低改动方案,适合编程基础薄弱的场景)
方案一:图层屏蔽法(推荐,几乎不用改代码,稳定性最高)
- 打开Unity编辑器右上角的
Layers下拉菜单,选择「Edit Layers」,新建一个自定义图层,命名为自身角色 - 选中当前角色下的所有部位对象(躯干、手臂、头部等所有属于玩家自身的物体),将它们的图层统一改为刚才新建的「自身角色」图层
- 找到代码中
layers变量对应的Inspector面板配置项,取消勾选「自身角色」图层即可,原代码逻辑无需修改,激光后续会自动忽略所有属于自身图层的碰撞体,不会再触发手臂切断逻辑。
方案二:代码过滤法(不想调整图层配置时使用,仅需新增3行代码)
找到原代码中处理碰撞检测的循环块,新增判断逻辑过滤掉属于玩家自身的碰撞体即可,修改后的代码如下:
for (int n = 0; n < victimCount; n++) { var victim = victimBuffer[n]; // 新增判断:碰撞对象属于玩家自身时直接跳过 if (victim.transform.root.CompareTag("Player")) { continue; } victim.transform.SendMessage("Slice", SendMessageOptions.DontRequireReceiver); }
- 注意提前给玩家角色的根GameObject设置
Tag为Player即可,该逻辑会自动判断碰撞到的物体是否属于玩家自身,属于的话直接跳过切片逻辑。
内容的提问来源于stack exchange,提问作者Dennis Does Stuff
相关产品推荐
相关产品推荐

