在游戏中手动管理视距,但仅选择性地将其应用于对象
Manually managing a view distance in a game, but only selectively applying it to objects
我目前正在开发一款开放世界游戏,因此我必须对其进行大量优化,因为有很多内容需要渲染。在游戏中,我手动实现了一个视距,这样我就可以隐藏远处的物体(以节省渲染时间)。但是,我只想像这样隐藏某些对象。
为了确定哪些对象应该有这种行为,我目前正在考虑添加一个新的静态设置类型(到 GameObject 的静态下拉列表中),这样我就可以检查该对象是否具有该静态设置以及它应该有选择地呈现。这能做到吗?
我认为您无法更改“静态”下拉列表中可用的选项 - 这些选项内置于 Unity 引擎中。但是,没有必要,因为您有许多其他选项来识别对象。
您似乎已经尝试过使用标签,但表示您需要比这更大的灵活性 - 所以我建议向您希望受此选择性视图距离影响的任何环境对象添加 class .然后,在您的玩家对象周围添加一个触发器碰撞器,并 运行 GetComponent()
以在环境对象进入碰撞器时识别它们。在他们进入对撞机时启用 objects/renderers,在他们离开时禁用它们。
为了获得更大的灵活性,您可以将 enum
添加到 class,这样您就可以让环境对象在进入玩家的触发碰撞器时表现不同 - 例如,如果您最终要设置动画在对象中(而不是弹出它们),您可能希望一个从透明淡入,而另一个从地面弹出,等等。
编辑:
我查找的另一种方法是 Camera.layerCullDistances
变量,它允许您设置相机渲染图层的不同距离。根据您的要求,这也适用于您 - 例如,地形可能在一层上而树木在另一层上,因此在远距离您仍然可以保持地形可见,但植被不可见。
这种方法应该比 class/collider-based 方法便宜,所以如果您的目标是移动设备,它会很方便。但是,如果您有更强大的硬件可用,这不是(可以说)最好的方法,因为对象会弹出 in/out 并且您将无法将它们平滑地过渡到可见性。
我目前正在开发一款开放世界游戏,因此我必须对其进行大量优化,因为有很多内容需要渲染。在游戏中,我手动实现了一个视距,这样我就可以隐藏远处的物体(以节省渲染时间)。但是,我只想像这样隐藏某些对象。
为了确定哪些对象应该有这种行为,我目前正在考虑添加一个新的静态设置类型(到 GameObject 的静态下拉列表中),这样我就可以检查该对象是否具有该静态设置以及它应该有选择地呈现。这能做到吗?
我认为您无法更改“静态”下拉列表中可用的选项 - 这些选项内置于 Unity 引擎中。但是,没有必要,因为您有许多其他选项来识别对象。
您似乎已经尝试过使用标签,但表示您需要比这更大的灵活性 - 所以我建议向您希望受此选择性视图距离影响的任何环境对象添加 class .然后,在您的玩家对象周围添加一个触发器碰撞器,并 运行 GetComponent()
以在环境对象进入碰撞器时识别它们。在他们进入对撞机时启用 objects/renderers,在他们离开时禁用它们。
为了获得更大的灵活性,您可以将 enum
添加到 class,这样您就可以让环境对象在进入玩家的触发碰撞器时表现不同 - 例如,如果您最终要设置动画在对象中(而不是弹出它们),您可能希望一个从透明淡入,而另一个从地面弹出,等等。
编辑:
我查找的另一种方法是 Camera.layerCullDistances
变量,它允许您设置相机渲染图层的不同距离。根据您的要求,这也适用于您 - 例如,地形可能在一层上而树木在另一层上,因此在远距离您仍然可以保持地形可见,但植被不可见。
这种方法应该比 class/collider-based 方法便宜,所以如果您的目标是移动设备,它会很方便。但是,如果您有更强大的硬件可用,这不是(可以说)最好的方法,因为对象会弹出 in/out 并且您将无法将它们平滑地过渡到可见性。