SpritePlus 2021-02-21 01:52 采纳率: 0%
浏览 541

Unity 部分模型在动画播放时在Game窗口消失的诡异Bug

问题背景:

最近在写一个仿CSGO的第一人称射击Demo。为了实现第一人称视角下面壁时的手臂不怼到墙里的效果,我使用两个摄像机:FPCamera 和 GunCamera,使用Camera组件的Culling Mask属性让FPCamera拍摄除手臂之外的所有场景,GunCamera只拍摄手臂并且把手臂的图像覆盖在FPCamera画面上层。即:GunCamera的Culling Mask属性只有Arms层,FPCamera的Culling Mask属性是EveryThing除Arms之外。

问题描述:

在我播放手臂的检视动画(道具检视动作)时,模型的手会诡异的消失,只留下胳膊和道具模型,动画结束时又出现,并且只和我准星放置的高度也即摄像机的X轴旋转角度有关。当我把准星抬高到图片上红框内然后播放检视动画,手就会消失。最重要的是,手只在Game窗口消失,在Scene窗口显示正常(具体可以看下面的图片,手消失时Scene窗口显示正常)。

问题的进展:

首先可以确定不是Culling Mask设置不正确,我此前怀疑是某种原因改变了手模型的Layer设置(因为GunCamera看不到其他层),我甚至写了测试代码去验证这个想法,但并没有这回事。整个手臂模型的Layer设置在检视动画播放期间没有任何改变,都是Arms,GunCamera的Culling Mask也没有任何变化。

再后来我怀疑是遮蔽剔除的锅,关闭了GunCamera的遮蔽剔除属性,但是也没有用(实际上Unity的遮蔽剔除需要设置才能生效,我有点气昏了头)。

最后怀疑是Unity引擎的Bug,因此我尝试了另外一个版本的Unity。我的项目原版本是2019.4.19,我尝试了2018.4.32还是一样的结果。

我研究出两个有效的解决方案:

1. 把GunCamera的FOV调大,调高到一定的数值(FOV=70),这个BUG就会消失

2.将手臂模型向前移动一些距离,这个BUG就会消失,播放动画时手显示正常

这两个解决方案的共同点就是让GunCamera更容易拍摄到手臂的模型全貌,也即尽量让手臂模型纳入GunCamera的视锥范围中。但是总归时治标不治本,我完全不明白其中的原理,我也无法接受两种方案的任何一种(会导致手臂看起来很长或者穿帮,也许还会留下一些隐患)

希望各位有经验的前辈可以指点迷津,salute啊

准星在红框上显示正常

 

  • 写回答

4条回答 默认 最新

  • SpritePlus 2021-02-21 01:53
    关注

    准星在红框里手消失

     

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?