Разница между Camera.main и Camera.current в Unity

В Unity для получения камеры используются и Camera.main, и Camera.current, так в чем же разница?

1. Сходства и различия и меры предосторожности

1. Те ​​же пункты:

  • И Camera.main, и Camera.current используются для получения свойств камеры.
  • Все они являются статическими свойствами и могут быть доступны через класс Camera.
  • Оба они возвращают объект камеры.

2. Отличия:

  • Camera.main возвращает активную камеру в текущей сцене (или одну из них, если существует несколько камер), а Camera.current возвращает камеру, отображающую в данный момент графику.
  • Camera.main обычно используется для получения текущей активной камеры в коде, а Camera.current обычно используется для получения свойств и состояния текущей камеры при рендеринге графики.
  • Camera.current допустим только во время рендеринга графики, а в коде вне рендеринга графики значение свойства Camera.current равно null. И Camera.main можно использовать в любое время, но вам нужно обратить внимание на накладные расходы на производительность.

3. Вопросы, требующие внимания:

  • Следует избегать использования Camera.main в кодах, которые вызываются часто, поскольку ему необходимо найти активированную камеру в сцене, поэтому его накладные расходы на производительность могут быть относительно высокими. Если вам нужно получить текущую активную камеру в нескольких местах, рекомендуется кэшировать ее в переменной и использовать эту переменную при необходимости.
  • Camera.current допустим только во время рендеринга графики, поэтому в коде вне рендеринга графики использование свойства Camera.current приведет к возврату значения null. Если вам нужно получить свойства и состояние камеры в коде вне рендеринга графики, вы должны использовать свойство Camera.main.
  • При использовании Camera.current необходимо соблюдать осторожность, чтобы использовать его в правильном контексте. Например, в методе OnRenderImage Camera.current была задана как камера, отображающая в данный момент графику, поэтому Camera.current можно использовать напрямую. Но в других контекстах Camera.current может иметь значение null, поэтому требуется проверка null.
  • При использовании Camera.main необходимо помнить о накладных расходах на производительность. Поскольку необходимо найти активированную камеру в сцене, следует избегать использования Camera.main в часто вызываемых кодах. Если вам нужно получить текущую активную камеру в нескольких местах, рекомендуется кэшировать ее в переменной и использовать эту переменную при необходимости.

2. Приложение к официальному документу

Приложение 1: Официальное описание Camera.current
вставьте сюда описание изображения

Unity关于Camera.current属性的官方文档解释:
1】Camera.current属性是一个静态属性,用于获取当前使用的相机对象,仅用于低级别的渲染控制(只读)。
2】大多数情况下,您应该使用Camera.main属性来获取场景中的主相机对象。只有在实现以下事件时才应该使用Camera.current属性:MonoBehaviour.OnRenderImage、MonoBehaviour.OnPreRender、MonoBehaviour.OnPostRender。
3】在大多数情况下,建议使用Camera.main属性来获取场景中的主相机对象。只有在需要执行特殊的渲染操作时才应使用Camera.current属性。例如,在实现自定义后期处理效果时,您可以使用Camera.current属性来访问当前渲染的相机对象并进行特殊的图像处理操作。

【注意事项】:Camera.current属性只在特定的渲染事件中才能正常工作,并且在其他情况下将返回null。因此,在使用Camera.current属性时,您应该确保它是在正确的上下文中使用,并且已正确初始化。

Приложение 2: Официальное описание Camer.main
вставьте сюда описание изображения

Camera.main属性的官方文档解释:
1】Camera.main属性是一个只读属性,用于获取场景中被标记为“MainCamera”且启用的第一个相机组件。
2】如果场景中没有被标记为“MainCamera”且启用的相机组件,则Camera.main属性将返回null
3】在内部,Unity缓存了所有被标记为“MainCamera”的GameObject对象。当您访问Camera.main属性时,Unity会从其缓存中返回第一个有效结果。访问此属性会产生一些CPU开销,与调用GameObject.GetComponent类似。在需要考虑CPU性能的情况下,可以考虑缓存此属性。

【注意事项】:Camera.main属性通常用于获取场景中的主相机对象,因为它提供了一种简单而方便的方式来访问主相机。但是,如果场景中有多个相机对象被标记为“MainCamera”,则Camera.main属性将返回其中一个相机对象,但您无法确定它是哪个相机对象。因此,在使用Camera.main属性时,您应该确保场景中只有一个相机对象被标记为“MainCamera”。

Supongo que te gusta

Origin blog.csdn.net/dzj2021/article/details/130719478
Recomendado
Clasificación