unity, 判断可见性
如果一个物体被unity判定为”退一万步讲也一定不可见“,则unity不会去渲染它,但是如果我们给此物体添加了逻辑,这个逻辑仍然会被执行。
因此,假如这个逻辑是巨耗性能的逻辑,比如说”mesh的每个顶点都按sin(t)波动“之类,那么我们需要手动根据可见性去优化这个逻辑,比如不可见就停了它,或者不可见时运行一个此逻辑的极简版等。
所以需要能获得物体的可见性。
方法1:
MeshRender.isVisible;
如果MeshRender.isVisible==true,说明unity认为这个mesh”退一万步讲也一定不可见“。
这个方法的好处是没有一点儿额外开销,因为在unity运行场景管理算法的时候这些东西都已经得到了,而且一般来讲最多也就是对数复杂度。
这个方法的局限性是如果gameObject没有MeshRender这个组件,例如是一个巨复杂的模型的根节点,那么这个方法没法直接用,只能把每个带MeshRender的子孙节点都遍历一遍。
方法2:
bool I_Can_See(GameObject Object) {
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(Camera);
if (GeometryUtility.TestPlanesAABB(planes , Object.collider.bounds))
return true;
else
return false;
}
参考: http://answers.unity3d.com/questions/8003/how-can-i-know-if-a-gameobject-is-seen-by-a-partic.html
这个方法好处是
1,不依赖于是否存在MeshRender组件。
2,可以自建包围盒,增加了灵活性,甚至可以故意造一个错误的包围盒来用(比如比模型实际范围大一倍或者小一倍)。比如在复杂模型的根节点上建一个名为boundingBox的切点,为它添加一个boxCollider,调节这个boxCollider让它包围整个模型。
3,不用遍历子孙节点,直接用视截体planes去判断这个collider.bounds是否可见即可。
缺点是:这个判断是有一小点儿开销的,如果物体成百上千可能会导致可察觉的开销。
unity, 判断可见性的更多相关文章
- Unity判断用户联网状态,WiFi/移动网络/无网络
Unity判断用户联网状态 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- Unity判断网络是否连接以及判断是否连接WiFi
由于项目中的核心模块需要用到网络连接,所以需要首先检测用户是否有网络百度了下,有人说通过连接自己的服务器进行测试的,也有人说通过延迟来判断的最后发现原来Unity是提供了网络判断的方法的.Networ ...
- unity 判断平台(安卓,iOS还是编辑器)
两种方式 --------------- C预处理器编译判断 --------------- #if UNITY_IOS // ... iOS项目才会编译 #elif UNITY_ANDROID // ...
- Unity判断网络连接类型
使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G using UnityEngine; using System.Collections; public ...
- Unity判断鼠标是否在UI(UGUI)上
"EventSystem.current.IsPointerOverGameObject()" UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了 ...
- Unity 判断Animatior是否播放完
public Animator animator; void Start() { animator = this.GetComponent<Animator>(); } void Upda ...
- unity 判断是安卓还是IOS平台
功能概述 储值功能,点击一个按钮(mSprites["Recharge"]),实现储值功能,在IOS平台上,该按钮下的功能全部隐藏,在安卓平台上正常显示按钮,实现相应功能 #if ...
- unity 判断物体是否在视角内(巧妙!)
public var isRendering:boolean=false; private var lastTime:float=0; private var curtTime:float=0; fu ...
- unity GPU bound or CPU bound
unity判断GPU CPUbound android 用unity profiler 里面的cpu时间 xcode有直接的显示
随机推荐
- 使用hosts.allow和hosts.deny实现简单的防火墙
说明:我建议学习防火墙只单一学习一种就够了,这种方式虽然简单和快速,但也有些不太灵活,所以如果要深入防火墙建议转iptables 一.背景简介 在Linux上多用iptables来限制ssh和tel ...
- HDU 4642 Fliping game (2013多校4 1011 简单博弈)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Delphi XE10下用FireDAC与SQLite连接要注意的问题 转
Delphi在XE的版本上,已经实现了安卓与苹果的移动跨平台,因此只需要一份代码,就可以统领两种手机平台,确实是一种高效的做法和节约的策略. 用Delphi XE7连接SQLite,主流使用Fir ...
- JSON Bean 相互转换工具(效率是Gson的两倍以上)
本帖最后由 xuehuayous 于 2015-12-24 08:44 编辑 前几天想封装一个自定义控件,用到Json解析,以前都使用Gson来解析Json数据的,但是想到一个简单的自定义控件就没必要 ...
- 教你u盘中毒后如何恢复被隐藏文件
方法1: 1)在桌面空白处单击鼠标右键,新建一个文本文档,如下图所示: 2) 然后将下列一段代码拷贝到文档中: for /f "delims=?" %%a in ('dir /a ...
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(转)
转自:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 前段时间学习和了解了下Google的开源C++单元测试框架Googl ...
- C++11常用特性的使用经验总结(转载)
C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结.本博客文章是在学习的基础上,加 ...
- Java笔记14:泛型初探
一.泛型简介 泛型是从Java SE 1.5开始出现的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- java线程总结(3/5)
一.线程同步和死锁问题 异步问题: package com.horizon.action; /** * 测试同步问题 * */ public class TestSync { public stati ...
- PHP面向对象之接口 (interface)
1.使用接口,接口中指定了某个类必须实现的某些方法,这些方法都是空的(不需要定义这些方法的具体内容) 2. 要实现一个接口用关键字implements,类中必须包含接口中所有的方法,否则会出现一个致命 ...