切换角色衣服时,重叠网格区域出现“透明洞”问题求助

  • Creator 版本: 3.8.4

我的角色 Prefab 里有多套“衣服”节点(yifu[ ]),运行时根据玩家选择通过 node. Active = true/false 来切换衣服。

但每次切换时, 新衣服与旧衣服在重叠区域会出现“洞”/“穿帮” ,看起来像那部分变成半透明,甚至能透视到身体网格下面。
image

复现步骤

  1. 在角色 Prefab 上挂载多套衣服(每套衣服都是一个子节点,包含 MeshRenderer + BoxCollider + RigidBody)。
  2. 运行场景,默认让第 1 套衣服 active = true ,其余 false
  3. 在游戏中玩家切换到第 2 套:
this.yifu.forEach((node, idx) => {
  node.active = (idx === selectedIndex);
});
  1. 切换后,第 1 套虽然在层级里显示 active=false ,但新旧网格重叠处出现“透明洞”。

材质选择

有没有更优雅的开关网格方法,能保证切换时能 彻底移除深度缓存不影响批次 ,并且能随时切换回去?

帮你顶一下

谢谢谢谢,顶:up:

我的理解是,在切换服装之前,服装1就已经绘画好了,然后切换服装2的时候,也绘制好了服装2的数据,但此时服装1部分遮盖了服装2,导致服装2被遮盖的部分没有绘制,然后服装1的active被设为了false,绘画数据不可见了,服装2被遮盖的部分也未能重新绘制,不知道这个理解对不对

不是,怎么没人啊, :sob:,这个问题解决不了了吗 :sob:

和深度被覆盖有关,检查一下摄像机有没有正确清理深度。
照理说active = false 不会再渲染,那么就看看是不是上一帧的深度残留。或者看看有没有其他的透明mesh干扰。

怎么看摄像机有没有正确清理深度呢?怎么看是不是上一帧的深度残留呢?确定没有其他的透明mesh干扰了。

我的理解是,在切换服装之前,服装1就已经绘画好了,然后切换服装2的时候,也绘制好了服装2的数据,但此时服装1部分遮盖了服装2,导致服装2被遮盖的部分没有绘制,然后服装1的active被设为了false,绘画数据不可见了,服装2被遮盖的部分也未能重新绘制,不知道这个理解对不对

看摄像机的clear flag 是不是清理了深度。另外这个active = false 的active方法,有没有被子类重载,例如会设置成透明度 = 1之类的。

默认选择的就是Depth_Only啊
image

active方法是从数据里读取,id匹配才为true,否则为false,并没有设置透明度之类的
image

那就不太清楚了。

有无大佬啊,这个问题不知道怎么解决啊,连替代方案都没有 :sob: :sob: :sob:

你要么把所有的摄像机(不只是你上面UI的摄像机)设置都贴一下,然后把你使用RenderTarget 的情况说一下。
总感觉你在3d场景这里,深度清除有问题。

我分了场景,出现问题的场景里只有一个UI相机,没有其他的相机了

你只有UI相机,那你的3D模型是UI相机渲染的吗?

一个是检查材质的深度测试开了没
image

另一个就是检查楼上说的摄像机
https://docs.cocos.com/creator/3.7/manual/zh/ui-system/components/engine/priority.html#注意事项

是的,通过UIMeshRenderer渲染到UI里的

开了image