unity3d 在OnPreRender中调整骨骼大小不会在Unity中调整当前摄像头的大小

mklgxw1f  于 2023-02-09  发布在  其他
关注(0)|答案(2)|浏览(149)

我正在为我的Unity3D游戏创建一个自定义化身系统,让玩家能够上传自己的化身。由于我的游戏是虚拟现实的,我当然希望向用户显示身体,在这个过程中隐藏头部。我想将头部骨骼缩小到零,只有虚拟现实摄像头才能看到,这样镜子和其他摄像头仍然可以看到头部。
我已经尝试了各种不同的方法,包括Update,LateUpdate,OnPreCull。其中一些实际上缩小了头部,但随后针对场景中的每台相机,而不仅仅是我想要的那台。

private void OnPreRender()
{
    Original = head.localScale;
    head.localScale = Vector3.zero;
}

private void OnPostRender()
{
    head.localScale = Original;
}

我希望头部缩放到0(无),但唯一发生的事情是骨骼的子对象移动到缩小的位置,但实际上不缩放。
编辑:经过进一步的测试,我注意到gameObject.SetActive的工作效果和预期的一样。整个虚拟角色对于附加了脚本的摄像头来说是不可见的。缩放功能似乎不起作用。我猜测缩放可能需要更多的帧来处理。当渲染函数执行时,它只完成了缩放的一半。

wljmcqd8

wljmcqd81#

这不是一个有效的方法。你最好把手放在不同的层上,然后在VR摄像头上关闭对该层的剔除。这样你就不需要触摸变换,而且这是一个更少的本机-〉管理的调用(层在本机端处理)

ctrmrzij

ctrmrzij2#

默认情况下,Unity显示为逐帧缓存蒙皮网格的矩阵。
通过在每个角色网格上设置该属性,可以强制蒙皮网格在每次渲染时重新计算矩阵。

SkinnedMeshRenderer.forceMatrixRecalculationPerRender = true;

Unity Reference
在所有角色网格上将该特性设置为true将使您能够仅在特定摄影机上控制骨骼比例。

相关问题