unity中判断渲染物体是否在摄像机内渲染

1、先声明我们的变量:

<span style="font-size:14px;">/// <summary>
    /// isRender 为true则表示在摄像机内,为false则相反
    /// </summary>
    private bool isRender;
    private float lastTime;
    private float currentTime;
    /// <summary>
    /// controlUpdate 控制update内isRender为false时的开关
    /// </summary>
    private bool controlUpdate;</span>

2、写一个方法对这些变量进行初始化:

<span style="font-size:14px;">void Init()
    {
        controlUpdate = false;
        isRender = true;
        lastTime = 0;
        currentTime = 0;
    }</span>

并在Start()函数中调用

3、在OnWillRenderObject()函数中对currentTime进行赋值:

void OnWillRenderObject()
    {
        if (Camera.current.name == Camera.main.name)//是需要渲染的摄像机
        {
            currentTime = Time.time;
        }
    }

点击  查看文档可对OnWillRenderObject() 做进一步了解

4、最后在Update函数中对lastTime赋值并对isRender进行判断:

void Update()
    {
        if (!controlUpdate && currentTime != 0)
        {
            isRender = currentTime != lastTime ? true : false;
            lastTime = currentTime;
            if (!isRender)
            {
                controlUpdate = true;
                //TODO:
            }
        }

    }

5、最后也可以再写一个函数来对脱离摄像机渲染的物体进行其它操作,比如为了对内存的考虑,对不需要用到的物体进行销毁。

时间: 2024-11-01 21:03:47

unity中判断渲染物体是否在摄像机内渲染的相关文章

关于Unity中鼠标选取物体的解决方案

今天修改了之前写的飞机大战的代码,原来的不足之处是点击屏幕的任意一点都可以移动飞机,也就是没有检测鼠标到底有没有点到飞机上. 我先是用之前的3D拾取技术,发现没有反应,才意识到我这个plane飞机节点挂载的是Box Collier2D的碰撞器组件,不是Box Collier,3D射线拾取技术在2D游戏里面还用不了. 后来我百度了一下,才知道用UGUI写的2D游戏用鼠标选取物体不用射线检测,要用事件系统.但是我不会用OnMouseEnter()和OnPointerEnter(),所以还是想用射线来

unity3d中检测一个物体是否在摄像机视野范围内

这个脚本最好是把模型对象的锚点设置在最低点.好了直接上脚本.可以直接复制代码,把CS文件拖到一个Camera上,然后把目标拖到targetTran中去就行了. using UnityEngine; using System.Collections; public class CameraT3 : MonoBehaviour { // public public Transform targetTran; // private private Rect screenRect; private Ca

判断物体是否在摄像机内

void Start(){ Rect screenRect = new Rect(0, 0, Screen.width, Screen.Height); } void Update{ Vector3 screenPos = targetCamera.WorldToScreenPoint(objTrans.position); if(!screenRect.Contains(screenPos)){ //do what you want Debug.log("Obj has gone out of

Unity中Mesh分解与边缘高亮加上深度检测

一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMesh对应的Material.如一个桌子的Mesh,其实有二个材质,分别对应二个SubMesh,一个桌面和一个桌脚,点击桌面后,只有这个桌面高光,而不是整个桌子,并且能单独更换这个桌面的Material. 我们知道Unity中,Mesh和Ogre一样,也是可以有多个SubMesh,每个SubMesh有

Unity中的坐标系--屏幕转世界坐标

Camera.ScreenToWorldPointVector3 ScreenToWorldPoint(Vector3 position); 将屏幕坐标转换为世界坐标. 如何转换?假如给定一个所谓的屏幕坐标(x,y,z),如何将其转换为世界坐标? 首先,我们要理解摄像机是如何渲染物体的: 摄像机对游戏世界的渲染范围是一个平截头体,渲染边界是一个矩形,用与near clippingplane或者far clippingplane平行的平面截取这个平截头体,可以获得无数个平行的矩形面,也就是我们看到

2019.9.27 Unity中Sprite和UI Image的区别

来源:https://blog.csdn.net/coffeecato/article/details/78536488 coffeecato写在前面:本文确实不错,作者用以说明自动生成网格的示图非常具有代表性,从drawcall的生成过程分析性能开销的重点,引出了overdraw和达到GPU像素填充率限制的原因,从中也可以看出作者对这个主题的理解颇有深度.查看作者的个人自述,居然是个2012年毕业的小伙子,后生可畏啊!翻译本文对自己也是个考验.英文水平捉急,如果错误请多多指正. 原文:UNIT

用体渲染的方法在Unity中渲染云

最近在知乎上看到一篇文章讲云层的渲染(https://zhuanlan.zhihu.com/p/34836881?utm_medium=social&utm_source=qq) 原文简单的讲了噪声生成云体的办法,以及一个光照模型. 看了之后很感兴趣,加上本科毕设做的就是体渲染,于是打算在unity里山寨一个出来. 原原文(知乎上的文章引用的文章)是2015年地平线黎明时分制作团队的一个talk(http://advances.realtimerendering.com/s2015/The%20

Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)

http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在Unity上实现高品质卡通渲染的效果>下篇,上篇请点击此处阅读. 下面为演讲内容: 接下来我们就来介绍一下头发的渲染.头发是卡通渲染角色较为重要且独特的部分.我们想要实现根据光源动态变化的高光和阴影渐变,并且这个实现还应具备直观的所见即所得的色彩调节能力. 和皮肤的材质一样,对于头发的漫反射渲染我们同样

【Unity笔记】UGUI物体的渲染顺序

①不同Camera的Depth.(大在前,小在后)②同Camera的SortingLayer.(下在前,上在后)③同SortingLayer下的Order in Layer.(大在前,小在后)④同Order in Layer下的Z轴.(小在前,大在后) 注意: 如果是多个Canvas的渲染先后顺序 http://blog.csdn.net/huutu/article/details/43636241调Canvas下面有一个Sort Order值,默认为0,越大越在后面. 创建任意UGUI元素时自