可拖動FPS顯示框(UGUI)

簡介

原本是想往上找一個可拖動FPS顯示框的(我記得之前有人寫過),然而搜了一個多小時都沒搜到,索性本身寫了一個,花費不到20分鐘,看來仍是本身動手豐衣足食啊 o(╯□╰)o

效果

上下的Toast不在本blog介紹範圍,我點他們只是爲了證實按鈕事件不衝突而已~~

這裏寫圖片描述

思路

雖然超級簡單,仍是說一下嘛
1.按鈕點下的時候設置物體縮放(好看點而已),並重置錨點爲中心(方便拖動對齊)
2.拖動過程當中,讓物體位置等於鼠標位置便可(因爲用的UGUI,有Canvas,不用考慮Z軸)
3.鼠標擡起時還原各項參數便可
(錨點能夠不還原,由於你一旦拖動了物體,原來的對齊其實已經偏了,固然有後續操做的能夠考慮還原)

項目配置

1.一步完成,直接看圖吧

這裏寫圖片描述

代碼

using UnityEngine;
using UnityEngine.UI;

public class LTFPSPanel : MonoBehaviour
{

    public Text fpsText;

    private float mUpdateInterval = 1f;//設定更新幀率的時間間隔爲1秒  
    private float mAccum = .0f;//累積時間  
    private int mFrames = 0;//在_updateInterval時間內運行了多少幀  
    private float mTimeLeft;

    private static Vector3 ON_DRAG_SCALE = new Vector3(1.2f, 1.2f, 1.2f);

    private static Vector3 NORMAL_SCALE = Vector3.one;

    private static Vector2 ON_DRAG_PIVOT = new Vector2(0.5f, 0.5f);

    private RectTransform mRectTransform;

    void Awake()
    {
        mRectTransform = GetComponent<RectTransform>();
    }

    void Start()
    {
        if (null == fpsText)
        {
            throw new System.Exception("沒有綁定Text組件");
        }
        mTimeLeft = mUpdateInterval;
    }

    void Update()
    {
        mTimeLeft -= Time.deltaTime;
        //Time.timeScale能夠控制Update 和LateUpdate 的執行速度,  
        //Time.deltaTime是以秒計算,完成最後一幀的時間  
        //相除便可獲得相應的一幀所用的時間  
        mAccum += Time.timeScale / Time.deltaTime;
        ++mFrames;//幀數  

        if (mTimeLeft <= 0)
        {
            float fps = mAccum / mFrames;
            string fpsFormat = System.String.Format("{0:F2}", fps);//保留兩位小數  
            fpsText.text = fpsFormat;

            mTimeLeft = mUpdateInterval;
            mAccum = .0f;
            mFrames = 0;
        }
    }

    public void OnPointerDown()
    {
        mRectTransform.pivot = ON_DRAG_PIVOT;
        transform.position = Input.mousePosition;
        this.transform.localScale = ON_DRAG_SCALE;
    }

    public void OnPointerUp()
    {
        this.transform.localScale = NORMAL_SCALE;
        transform.position = Input.mousePosition;
    }

    public void OnDrag()
    {
        transform.position = Input.mousePosition;
    }
}

總結

null
相關文章
相關標籤/搜索