| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | using UnityEngine;using System.Collections;namespace TMPro.Examples{        public class TMP_UiFrameRateCounter : MonoBehaviour    {        public float UpdateInterval = 5.0f;        private float m_LastInterval = 0;        private int m_Frames = 0;        public enum FpsCounterAnchorPositions { TopLeft, BottomLeft, TopRight, BottomRight };        public FpsCounterAnchorPositions AnchorPosition = FpsCounterAnchorPositions.TopRight;        private string htmlColorTag;        private const string fpsLabel = "{0:2}</color> <#8080ff>FPS \n<#FF8000>{1:2} <#8080ff>MS";        private TextMeshProUGUI m_TextMeshPro;        private RectTransform m_frameCounter_transform;        private FpsCounterAnchorPositions last_AnchorPosition;        void Awake()        {            if (!enabled)                return;            Application.targetFrameRate = 1000;            GameObject frameCounter = new GameObject("Frame Counter");            m_frameCounter_transform = frameCounter.AddComponent<RectTransform>();            m_frameCounter_transform.SetParent(this.transform, false);            m_TextMeshPro = frameCounter.AddComponent<TextMeshProUGUI>();            m_TextMeshPro.font = Resources.Load<TMP_FontAsset>("Fonts & Materials/LiberationSans SDF");            m_TextMeshPro.fontSharedMaterial = Resources.Load<Material>("Fonts & Materials/LiberationSans SDF - Overlay");            m_TextMeshPro.enableWordWrapping = false;            m_TextMeshPro.fontSize = 36;            m_TextMeshPro.isOverlay = true;            Set_FrameCounter_Position(AnchorPosition);            last_AnchorPosition = AnchorPosition;        }        void Start()        {            m_LastInterval = Time.realtimeSinceStartup;            m_Frames = 0;        }        void Update()        {            if (AnchorPosition != last_AnchorPosition)                Set_FrameCounter_Position(AnchorPosition);            last_AnchorPosition = AnchorPosition;            m_Frames += 1;            float timeNow = Time.realtimeSinceStartup;            if (timeNow > m_LastInterval + UpdateInterval)            {                // display two fractional digits (f2 format)                float fps = m_Frames / (timeNow - m_LastInterval);                float ms = 1000.0f / Mathf.Max(fps, 0.00001f);                if (fps < 30)                    htmlColorTag = "<color=yellow>";                else if (fps < 10)                    htmlColorTag = "<color=red>";                else                    htmlColorTag = "<color=green>";                m_TextMeshPro.SetText(htmlColorTag + fpsLabel, fps, ms);                m_Frames = 0;                m_LastInterval = timeNow;            }        }        void Set_FrameCounter_Position(FpsCounterAnchorPositions anchor_position)        {            switch (anchor_position)            {                case FpsCounterAnchorPositions.TopLeft:                    m_TextMeshPro.alignment = TextAlignmentOptions.TopLeft;                    m_frameCounter_transform.pivot = new Vector2(0, 1);                    m_frameCounter_transform.anchorMin = new Vector2(0.01f, 0.99f);                    m_frameCounter_transform.anchorMax = new Vector2(0.01f, 0.99f);                    m_frameCounter_transform.anchoredPosition = new Vector2(0, 1);                    break;                case FpsCounterAnchorPositions.BottomLeft:                    m_TextMeshPro.alignment = TextAlignmentOptions.BottomLeft;                    m_frameCounter_transform.pivot = new Vector2(0, 0);                    m_frameCounter_transform.anchorMin = new Vector2(0.01f, 0.01f);                    m_frameCounter_transform.anchorMax = new Vector2(0.01f, 0.01f);                    m_frameCounter_transform.anchoredPosition = new Vector2(0, 0);                    break;                case FpsCounterAnchorPositions.TopRight:                    m_TextMeshPro.alignment = TextAlignmentOptions.TopRight;                    m_frameCounter_transform.pivot = new Vector2(1, 1);                    m_frameCounter_transform.anchorMin = new Vector2(0.99f, 0.99f);                    m_frameCounter_transform.anchorMax = new Vector2(0.99f, 0.99f);                    m_frameCounter_transform.anchoredPosition = new Vector2(1, 1);                    break;                case FpsCounterAnchorPositions.BottomRight:                    m_TextMeshPro.alignment = TextAlignmentOptions.BottomRight;                    m_frameCounter_transform.pivot = new Vector2(1, 0);                    m_frameCounter_transform.anchorMin = new Vector2(0.99f, 0.01f);                    m_frameCounter_transform.anchorMax = new Vector2(0.99f, 0.01f);                    m_frameCounter_transform.anchoredPosition = new Vector2(1, 0);                    break;            }        }    }}
 |