using System;

using System.Collections.Generic;

using UnityEngine;





public class Debugger : MonoBehaviour

{

    void Start()

    {

        timeleft = updateInterval;

    }

    void Update()

    {

        UpdateUsed();

        UpdateFPS();

    }

    //Memory

    private string sUserMemory;

    private string s;

    public bool OnMemoryGUI;

    private uint MonoUsedM;

    private uint AllMemory;

    [Range(0, 100)]

    public int MaxMonoUsedM = 50;

    [Range(0, 400)]

    public int MaxAllMemory = 200;

    void UpdateUsed()

    {

        sUserMemory = "";

        MonoUsedM = Profiler.GetMonoUsedSize() / 1000000;

        AllMemory = Profiler.GetTotalAllocatedMemory() / 1000000;





        sUserMemory += "MonoUsed:" + MonoUsedM + "M" + "\n";

        sUserMemory += "AllMemory:" + AllMemory + "M" + "\n";

        sUserMemory += "UnUsedReserved:" + Profiler.GetTotalUnusedReservedMemory() / 1000000 + "M" + "\n";





        s = "";

        s += " MonoHeap:" + Profiler.GetMonoHeapSize() / 1000 + "k";

        s += " MonoUsed:" + Profiler.GetMonoUsedSize() / 1000 + "k";

        s += " Allocated:" + Profiler.GetTotalAllocatedMemory() / 1000 + "k";

        s += " Reserved:" + Profiler.GetTotalReservedMemory() / 1000 + "k";

        s += " UnusedReserved:" + Profiler.GetTotalUnusedReservedMemory() / 1000 + "k";

        s += " UsedHeap:" + Profiler.usedHeapSize / 1000 + "k";

    }





    //FPS

    float updateInterval = 0.5f;

    private float accum = 0.0f;

    private float frames = 0;

    private float timeleft;

    private float fps;

    private string FPSAAA;

    [Range(0, 150)]

    public int MaxFPS;

    void UpdateFPS()

    {

        timeleft -= Time.deltaTime;

        accum += Time.timeScale / Time.deltaTime;

        ++frames;





        if (timeleft <= 0.0)

        {

            fps = accum / frames;

            FPSAAA = "FPS: " + fps.ToString("f2");

            timeleft = updateInterval;

            accum = 0.0f;

            frames = 0;

        }

    }

    void OnGUI()

    {

        if (OnMemoryGUI)

        {

            GUI.color = new Color(1, 0, 0);

            GUI.Label(new Rect(10, 10, 200, 60), sUserMemory);

            GUI.Label(new Rect(10, 60, 100, 30), FPSAAA);

            if (MonoUsedM > MaxMonoUsedM)

            {

                GUI.backgroundColor = new Color(1, 0, 0);

                GUI.Button(new Rect(0, 0, 1024, 1024), "MonoUsedM Waming!!内存不足");

            }

            if (AllMemory > MaxAllMemory)

            {

                GUI.backgroundColor = new Color(1, 0, 1);

                GUI.Button(new Rect(0, 0, 1024, 1024), "AllMemory Waming!!内存堪忧");

            }

            if (fps > MaxFPS)

            {

                GUI.backgroundColor = new Color(1, 0.4f, 0.5f);

                GUI.Button(new Rect(0, 0, 1024, 1024), "FPS Waming!!");

            }

        }





    }

   

}

Unity脚本获取内存和FPS的更多相关文章

  1. linux通过脚本获取内存信息

    1 原理 脚本中通过执行free获取内存信息,然后将文本信息通过“空格”分隔符分割成字符串数组将不同信息提取出来,最后通过bc计算出百分比 2 脚本 #!/bin/shHOSTNAME=`hostna ...

  2. Unity中的内存泄漏

    在对内存泄漏有一个基本印象之后,我们再来看一下在特定环境——Unity下的内存泄漏.大家都知道,游戏程序由代码和资源两部分组成,Unity下的内存泄漏也主要分为代码侧的泄漏和资源侧的泄漏,当然,资源侧 ...

  3. 记录特殊情况的Python脚本的内存异常与处理

    问题 Python 脚本使用 requests 模块做 HTTP 请求,验证代理 IP 的可用性,速度等. 设定 HTTP 请求的 connect timeout 与 read response ti ...

  4. 5. Unity脚本的执行顺序

    Unity是不支持多线程的,也就是说我们必须要在主线程中操作它,可是Unity可以同时创建很多脚本,并且可以分别绑定在不同的游戏对象身上,他们各自都在执行自己的生命周期感觉像是多线程,并行执行脚本的, ...

  5. shell脚本实例-内存磁盘使用警告

    1,磁盘使用警告并发送邮件 #!usr/bin/bash #df -Th|grep '/$' 这个是获取内存使用的那一条记录 #后面两句是获取内存的使用率 disk=`df -Th|grep '/$' ...

  6. (转)MOMO的Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)

    http://www.xuanyusong.com/archives/2378 Unity是不支持多线程的,也就是说我们必须要在主线程中操作它,可是Unity可以同时创建很多脚本,并且可以分别绑定在不 ...

  7. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

  8. Unity 脚本的未来发展

    新技术之IL2CPP 最近,我们谈到了Unity 的WebGL . 在那篇文中我们简要谈论到脚本在 WebGL  中的运行的新技术称为"IL2CPP" .然而IL2CPP 所代表的 ...

  9. Unity脚本在层级面板中的执行顺序测试3

    断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...

随机推荐

  1. spring mvc mybatis

    Spring与Mybatis整合需要引入一个mybatis-spring.jar包,该整合包有Mybatis提供,可以从Mybatis官网下载. 该jar包提供了几个API: 1.SqlSession ...

  2. Excel导入mysql数据库

    步骤一:选取要导入的数据快儿,另外要多出一列,如下图:    步骤二:  将选中的数据快儿拷贝到一个新建的表格工作薄,然后“另存为” ->“文本文件(制表符分割)(*.txt)”,假如存到“D: ...

  3. solr ,hadoop ,lucene,nutch 的关系和区别

    apache lucene是apache下一个著名的开源搜索引擎内核,基于Java技术,处理索引,拼写检查,点击高亮和其他分析,分词等技术. nutch和solr原来都是lucene下的子项目.但后来 ...

  4. HDU 4622 多校第三场1002 后缀自动机

    比赛的时候我是用后缀数组的,但是T了. 赛后看了解题报告说,后缀数组貌似是卡你常数的时间,我算了下复杂度O(T * Q * n).这是10 ^ 8,但是考虑到每次询问的时候都要重新构造字符,所以那个n ...

  5. 协议系列之HTTP协议

    什么是HTTP\HTTPS HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.HTTP协议用于从WWWserver传输超文本到本地浏览器的传输协议,它能使浏览 ...

  6. 严苛模式(StrictMode)

    Android 2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益.那它都做什么呢?它将报告与线程及虚拟机相关的策 ...

  7. Reso | The Linux Command Line 的中文版

    http://book.haoduoshipin.com/tlcl/book/zh/ 本书是 The Linux Command Line 的中文版, 为大家提供了多种不同的阅读方式. 中英文双语版- ...

  8. 在Mac OS 中显示和隐藏系统文件

    使用终端 输入以下代码 defaults write com.apple.finder AppleShowAllFiles -bool YES 来显示隐藏了的文件 如usr/bin 把YES改成NO ...

  9. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

  10. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...