这是一个Unity工程师编写的解决方案,描述如何在Unity中实ices一个在游戏中可见的第一人称玩家身体,并在inventoryUI中渲染这个玩家模型,而不使用两个不同的玩家模型。这解决了许多问题,包括避免使用两个玩家模型,能够正确地计算Foot IK,以及保持玩家头和胳膊仅渲染阴影,而不渲染网格。

这个解决方案通过使用Unity内置的OnPreRenderOnPostRender函数来实现的。这些函数分别在渲染开始和结束时被调用。我们在这些函数中执行的操作有:

OnPreRender函数中:我们将玩家模型的位置设置为目标位置,仅仅渲染某些渲染器的阴影。

OnPostRender函数中:我们将玩家模型的位置设置回零,恢复所有的渲染器。

这个解决方案使用了一个名为PlayerModelRenderer的脚本,它挂载在主相机上。这个脚本有以下成员变量:

  • playerRoot:玩家模型的根对象。
  • renderersToExclude:要排除的渲染器列表。
  • targetPlayerModelPos:目标玩家模型的位置。
  • playerRenderers:玩家模型的渲染器数组。
  • rendererCount:渲染器数组的长度。
  • finalRenderers:排除渲染器后剩下的渲染器数组。

这个脚本有两个函数:

  • RefreshRenderers:更新渲染器列表。
  • OnPreRender:设置渲染器为阴影模式。
  • OnPostRender:恢复渲染器。

通过在主相机上使用这个脚本,我们可以实现既渲染玩家模型又不渲染阴影的效果。