Unity填坑-CullingGroup的运用

Unity填坑-CullingGroup的运用

可以使用CullingGroup动态剔除一些对性能有极大影响的脚本、及渲染的进行。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • Unity填坑-CullingGroup的运用
  • 前言
  • 二、示例代码如下
  • 总结


前言

CullingGroup可以提供对场景中对象的距离追踪,并提供回调效果。


二、示例代码如下

public class CullingGroupTest : MonoBehaviour
{public List<GameObject> Targets;public CullingGroup group;public BoundingSphere[] spheres;public GameObject Player;// Start is called before the first frame updatevoid Start(){group = new CullingGroup();group.targetCamera = Camera.main;group.SetDistanceReferencePoint(Player.transform);float[] distances = new float[5];for (int i = 0; i < 5; i++){distances[i] = 5f*i;}group.SetBoundingDistances(distances);spheres = new BoundingSphere[Targets.Count];for (int i = 0; i < Targets.Count; i++){spheres[i] = new BoundingSphere(Targets[i].transform.position, 1f);}group.SetBoundingSpheres(spheres);group.SetBoundingSphereCount(Targets.Count);group.onStateChanged = StateChangedMethod;}// Update is called once per framevoid Update(){for (int i = 0; i < Targets.Count; i++){spheres[i].position = Targets[i].transform.position;}}private void OnDestroy(){group.Dispose();}private void StateChangedMethod(CullingGroupEvent evt){if (evt.hasBecomeVisible){Debug.LogFormat("Sphere {0} has become visible!", evt.index);Targets[evt.index].SetActive(true);}if (evt.hasBecomeInvisible){Debug.LogFormat("Sphere {0} has become invisible!", evt.index);Targets[evt.index].SetActive(false);}Debug.LogFormat("Sphere {0} has become Change!", evt.index);}
}

使用起来很简单,如果只想对这些物体针对摄像机的可见性进行回调,那么去掉group.SetDistanceReferencePoint(Player.transform);以及group.SetBoundingDistances(distances);这两行代码即可。
效果就是:当追踪的物体(通过球体中心与半径判定是否在摄像机视野内)不在摄像机视角内时,触发回调。

如果想设定一个对摄像机的距离范围来进行回调,group.SetBoundingDistances(distances);保留这行代码即可达成目标,可以设置不同的范围区域来进行不同处理。

如果想要让这些追踪物体对另外一个目标进行追踪,则可以保留group.SetDistanceReferencePoint(Player.transform)代码(可以设置trasform,会自动实时改变位置,也可以传入Vector3的定点)。这样可以针对距离这个目标进行回调。


总结

当然完全可以使用自己的方法,去每帧进行距离计算,也可以到达相同的效果。不过利用CullingGroup,进行摄像机的裁减回调还是挺好用的。比如有些纯表现的场景物体,直接SetVisable为false,可以提升不少性能。

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

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

相关文章

【Linux驱动】设备树中指定中断 | 驱动中获得中断 | 按键中断实验

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;在设备树中指定中断&#x1f3c0;代码中获得中断&#x1f3c0;按键中断⚽驱动…

闪存剩下内容

1&#xff1a;通过Arduino IDE向闪存文件系统上传文件 1. 下载 Arduino-ESP8266闪存文件插件程序 2&#xff1a;使用闪存文件系统建立功能更加丰富的网络服务器 1&#xff1a;在网页中加载闪存文件系统中的图片、CSS和JavaScript index.html&#xff1a;ESP8266开发板建立的网…

SpringBoot+SSM项目实战 苍穹外卖(12) Apache POI

继续上一节的内容&#xff0c;本节是苍穹外卖后端开发的最后一节&#xff0c;本节学习Apache POI&#xff0c;完成工作台、数据导出功能。 目录 工作台Apache POI入门案例 导出运营数据Excel报表 工作台 工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c…

初识OpenCV

首先你得保证你的虚拟机Ubuntu能上网 可看 http://t.csdnimg.cn/bZs6c 打开终端输入 sudo apt-get install libopencv-dev 回车 输入密码 回车 遇到Y/N 回车 OpenCV在线文档 opencv 文档链接 点zip可以下载&#xff0c;点前面的直接在线浏览&#xff0c;但是很慢 https…

c# 视频流压缩

在C#中进行视频流的压缩通常涉及到使用第三方库来处理编解码工作&#xff0c;H.264是一种广泛应用且高效的视频编码标准。以下是一个简化的例子说明如何使用SharpAvi库&#xff08;一个用于生成AVI文件并支持H.264编码的.NET库&#xff09;创建包含H.264编码视频流的AVI文件&am…

Redis的实现四:事件循环和计时器

我们的服务器缺少了一个内容&#xff1a;超时。每个网络应用程序都需要处理超时&#xff0c;因为网络的另一边可能会消失。不要只进行持续的IO操作&#xff0c;如读/写需要超时&#xff0c;但启动空闲的TCP连接也是一个好主意。要实现超时&#xff0c;必须修改事件循环&#xf…

单元测试:Testing leads to failure, and failure leads to understanding

单元测试的概念可能多数读者都有接触过。作为开发人员&#xff0c;我们编写一个个测试用例&#xff0c;测试框架发现这些测试用例&#xff0c;将它们组装成测试 suite 并运行&#xff0c;收集测试报告&#xff0c;并且提供测试基础设施&#xff08;断言、mock、setup 和 teardo…

JAVAEE初阶 文件IO(一)

这里写目录标题 一. 计算机中存储数据的设备1.1 CPU1.2 内存1.3 硬盘1.4 三种存储的区别 二.文件系统2.1 相对路径2.2 绝对路径2.3 .和..的含义2.4 例子2.5 everything工具 三.文件3.1 文本文件3.2 二进制文件 四. JAVA对于文件的API4.1 getParent getName getPath getAbsolute…

Jest单元测试:玩转代码的小捉迷藏!

Jest Jest 是什么&#xff1f; Jest 是一个流行的 JavaScript 测试框架&#xff0c;专注于简化和改进代码的测试流程。它由 Facebook 开发并维护&#xff0c;具有以下特点&#xff1a; 1、易用性&#xff1a;Jest 提供了一个简单而强大的测试框架&#xff0c;使得编写和运行测…

【架构设计】单体软件向微服务化演变

单体软件 假设单体软件的各模块如下&#xff0c;其中服务包含许多功能模块&#xff0c;如用户管理模块、商品模块、订单模块、仓库模块; #mermaid-svg-MzWKwMCwfo3PWMGH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-…

uniapp h5 发行后 微信第二次打开网址 页面白屏

发行后把网址给客户&#xff0c;第一次可以正常登录打开&#xff0c;第二次打开白屏 原因&#xff1a;第一次打开时没有token&#xff0c;所以跳转登录页&#xff0c;可以正常访问 第二次打开时有token&#xff0c;但是网址根目录没有配置默认页面&#xff0c;所以白屏 解决…

Windows Server调整策略实现999999个远程用户用时登录

正文共&#xff1a;1234 字 23 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上篇文章中&#xff08;Windows Server 2019配置多用户远程桌面登录服务器&#xff09;&#xff0c;我们主要介绍了Windows Server 2019在配置远程桌面时&#xff0c;如何通过3种方式创建本地用户账…

微前端无界机制浅析

简介 随着项目的发展&#xff0c;前端SPA应用的规模不断加大、业务代码耦合、编译慢&#xff0c;导致日常的维护难度日益增加。同时前端技术的发展迅猛&#xff0c;导致功能扩展吃力&#xff0c;重构成本高&#xff0c;稳定性低。 为了能够将前端模块解耦&#xff0c;通过相关技…

使用Qt连接scrcpy-server控制手机

Qt连接scrcpy-server 测试环境如何启动scrcpy-server1. 连接设备2. 推送scrcpy-server到手机上3. 建立Adb隧道连接4. 启动服务5. 关闭服务 使用QTcpServer与scrcpy-server建立连接建立连接并视频推流完整流程1. 开启视频推流过程2. 关闭视频推流过程 视频流的解码1. 数据包协议…

python每日学17:控制推导逻辑的子表达式不要超过两个

背景&#xff1a;今天放假在家&#xff0c;《python学习手册》不在身边&#xff0c;所以今天学习《Effective Python: 编写高质量Python代码的90个有效方法》第28条《控制推导逻辑的子表达式不要超过两个》&#xff0c;这本书已经是第二版了&#xff0c;第一版是《编写高质量py…

shell脚本,ADB

Linux命令行命令是系统内置的命令或用户自定义的脚本&#xff08;shell 脚本&#xff0c;.sh扩展名结尾&#xff09;&#xff0c;可以通过终端输入命令来执行。这些命令通常存储在Linux系统的/bin、/usr/bin、/sbin、/usr/sbin等目录下&#xff0c;也可以在$PATH环境变量中指定…

NVMe系统内存结构 - Meta Data

NVMe系统内存结构 - Meta Data 1 为什么需要数据保护2 Meta Data定义3 Meta Data传输方式4 常见Meta Data使用场景4.1 不带数据保护信息4.2 带数据保护信息“数据写”流程4.3 带数据保护信息“数据读”流程4.4 SSD内部加入数据保护信息4.5 SSD内部根据数据保护信息验证数据 本文…

如何在你的网站接入QQ登录?

文章目录 准备阶段申请QQ登录的权限创建应用最后上传qqlogin.php代码 准备阶段 国内服务器和备案域名需要你有张独一无二本人的身份证你正面手持身份证的图片一张100px*100px的网站图标 申请QQ登录的权限 首先访问qq互联&#xff0c;点击我直接访问 登陆完成后我们点击面的…

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问&#xff0c;通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置&#xff0c; $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

Python新年文字烟花简单代码

简单的Python新年烟花代码示例&#xff1a; import random import timedef create_firework():colors [红色, 橙色, 黄色, 绿色, 蓝色, 紫色]flashes [爆裂, 闪光, 旋转, 流星, 喷射]color random.choice(colors)flash random.choice(flashes)print(f"发射一枚{color…