Unity中Camera.main和Camera.current的区别

news2024/11/13 18:38:16

在Unity中,Camera.main和Camera.current都是用来获取相机,那到底有什么区别呢?

一、异同及注意事项

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,因此需要进行空值检查。
  • 在使用Camera.main时,需要注意性能开销。由于需要在场景中查找激活的相机,因此Camera.main的使用应该尽量避免在频繁调用的代码中。如果需要在多个位置获取当前活动的相机,建议将其缓存到变量中,并在需要时使用该变量。

二、官方文档附录

附录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”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】Redis set类型实现点赞功能

文章目录 set 数据类型介绍不排序实现排序实现 set 数据类型介绍 Redis中的set类型是一组无序的字符串值。 set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令: SADD key member1 [member2]&a…

国产 API 工具天花板,用来搞项目真的不错

一、API爆炸的时代 随着最近行业的移动化、物联网化、数字化转型、微服务等多种概念的提出,对应的 API 数量已经呈现出爆炸式增长,由此带来的问题就是前后端的接口对接问题越来越来突出,我们能很难找到一个合适的技术工具提高我们的效率。由此…

irq_domain msi_domain 的 使用和关系

文章目录 如何创建一个 irq_domain如何创建一个 msi_domainirq domain 和 msi domain 的关系MSI对IRQdomain打的补丁变量结构体API初始化时的API申请IRQ时的API 实例 GICV3-ITS & GICV3-ITS-PCI 相关结构体变量所在文件 如何创建一个 irq_domain 内核文档说,我们可以调用如…

基于 FPGA 的彩色图像灰度化的设计实现

文章目录 前言一、系统整体设计二、各模块的功能三、彩色图像灰度化处理模块的设计1.基本原理2.彩色图像灰度化处理方法介绍方法 1:分量法方法 2:最大值法方法 3:平均值法平均值法的实现方法 4 加权平均法加权平均法的实现rgb2gray 模块rgb2g…

LeetCode965. 单值二叉树,100. 相同的树

965. 单值二叉树,100. 相同的树 965描述示例解题思路以及代码 100描述示例解题思路以及代码 965 描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 fals…

获得GitHub Copilot并结合VS Code使用

一、什么是GitHub Copilot GitHub Copilot是一种基于AI的代码生成工具。它使用OpenAI的GPT(生成式预训练Transformer)技术来提供建议。它可以根据您正在编写的代码上下文建议代码片段甚至整个函数。 要使用GitHub Copilot,您需要在编辑器中…

(四)Photon Voice2 的使用

一、入门 1.Voice简介 Photon Voice 2 是一个 SDK,可以轻松地向 Unity 应用程序添加高质量的低延迟语音聊天。它建立在 Photon Realtime 之上,并继承了它的所有功能,包括配对和兴趣小组。客户端加入房间并创建传出流(本地语音&a…

双目、结构光、tof,三种深度相机的原理区别看这一篇就够了!

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

win10屏幕录像哪个好用?这2款录屏软件值得推荐!

案例:win10电脑如何录屏? 【我使用的电脑是win10系统,我想对它进行屏幕录制。有没有小伙伴知道win10电脑如何录屏?win10录屏软件哪款比较好用?】 在如今互联网时代,屏幕录像是一项非常实用的功能&#xf…

【大数据之Hadoop】三十二、MapReduce生产经验

1 MapReduce跑的慢的原因 MapReduce程序效率的瓶颈在于两点: 1)计算机性能:CPU、内存、磁盘、网络 2)I/O操作优化 (1)数据倾斜 (2)Map运行时间太长,导致Reduce等待过久 …

高斯-约旦消元法

1,思想 该算法基于高斯消元,但是思想是把矩阵化为对角阵,从而避免回代的操作思路是一列一列处理,每次选为处理过的行中主元最大(极大避免精度损失)的行处理。把这一列除了主元这一行的元素,其余该列的其他…

c#笔记-委托

委托 委托是方法的类型。 有了类型就可以声明方法的变量,参数,字段。然后再调用他。 很多新人很困惑,为什么要把方法做成变量,不直接去调用它呢? 这是因为在目前你的认知里,代码都是你一个人写出来的。 如…

计算机图形学-GAMES101-5

一、观测变换 通过Viewing(观测)transformation,最终我们将世界坐标系中的物体投影到了一个xyz都处于【-1,1】的立方体中。那么接下来,我们该做什么? 二、光栅化(Rasterization) (1)透视投影的定义 定义透视投影的视…

〖大学生·技术人必学的职业规划白宝书 - 职业规划篇①〗- 大学生选择职业前的自我认知与剖析

历时18个月,采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴,该专栏有你想要的职业规划、简历、面试的答案。说明:该文属于 大学生技术人职业规划白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

linux之线程同步

1. 互斥锁 定义锁: pthread_mutex_t 初始化锁函数: int pthread_mutex_init(pthread_mutex_t* mutex,pthread_mutexattr_t* attr); 第一个参数是定义的互斥锁的地址,第二个参数是锁的属性,一般传NULL 互斥锁的属性在创建…

(C语言版)力扣(LeetCode)+牛客网(nowcoder)二叉树基础oj练习

二叉树基础oj练习 965. 单值二叉树题目解法 100. 相同的树题目解法 101. 对称二叉树题目解法 144. 二叉树的前序遍历题目解法 94. 二叉树的中序遍历题目解法 145. 二叉树的后序遍历题目解法 572. 另一棵树的子树题目解法 KY11 二叉树遍历题目解法 结语 965. 单值二叉树 题目 …

Linux安装MongoDB数据库并内网穿透在外远程访问

文章目录 前言1.配置Mongodb源2.安装MongoDB数据库3.局域网连接测试4.安装cpolar内网穿透5.配置公网访问地址6.公网远程连接7.固定连接公网地址8.使用固定公网地址连接 转发自CSDN cpolarlisa的文章:Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透…

LeetCode572. 另一棵树的子树LeetCode

572. 另一棵树的子树 描述示例解题思路以及代码 描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节…

数据库|SQL调优案例之TiFlash帮倒忙该怎么办?

一、背景 早上收到某系统的告警tidb节点挂掉无法访问,情况十万火急。登录中控机查了一下display信息,4个TiDB、Prometheus、Grafana全挂了,某台机器hang死无法连接,经过快速重启后集群恢复,经排查后是昨天上线的某个S…

Flink消费pubsub问题

我看网上flink消费pubsub的资料并不多,最近跑通了,大家有问题的可以给我留言。 一、基本资料 1.flink官网接入方式 Google Cloud PubSub | Apache Flink StreamExecutionEnvironment streamExecEnv StreamExecutionEnvironment.getExecutionEnviron…