找回密码
 注册帐号

扫一扫,访问微社区

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

3
回复
301
查看
[ 复制链接 ]

1

主题

4

帖子

9

积分

Rank: 1

UID
68034
好友
0
蛮牛币
10
威望
0
注册时间
2015-1-13
在线时间
6 小时
最后登录
2021-2-22
20蛮牛币
问题背景:

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

问题描述:

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

问题的进展:

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

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

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

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

1. 把GunCamera的FOV调大,调高到一定的数值(FOV=70),这个BUG就会消失
2.将手臂模型向前移动一些距离,这个BUG就会消失,播放动画时手显示正常

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

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





准星在红框上显示正常

准星在红框上显示正常

准星抬高到红框里手消失

准星抬高到红框里手消失

准星在红框下显示正常

准星在红框下显示正常
回复

使用道具 举报

7日久生情
1714/5000

7

主题

90

帖子

1714

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
326081
好友
1
蛮牛币
1202
威望
0
注册时间
2019-7-1
在线时间
1617 小时
最后登录
2021-2-25
7 天前 显示全部楼层
相机近裁剪平面(near)搞得鬼?调小一点试试
回复

使用道具 举报

1

主题

4

帖子

9

积分

Rank: 1

UID
68034
好友
0
蛮牛币
10
威望
0
注册时间
2015-1-13
在线时间
6 小时
最后登录
2021-2-22
楼主 7 天前 显示全部楼层
白侠 发表于 2021-2-21 11:31
相机近裁剪平面(near)搞得鬼?调小一点试试

如果是剪切平面也应该是手臂先消失的,而且是一点点消失,不过我还是调整了near属性,没有任何用。。。
回复

使用道具 举报

5熟悉之中
508/1000
排名
9110
昨日变化

2

主题

169

帖子

508

积分

Rank: 5Rank: 5

UID
208862
好友
0
蛮牛币
246
威望
0
注册时间
2017-2-27
在线时间
219 小时
最后登录
2021-2-27
4 天前 显示全部楼层
场景里的视角调到和game里的视角一致,看下场景里的摄像机是不是一样的效果。如果不是说明game里的摄像机有问题,如果是,说明摄像机有问题或者模型有处理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则