簡介
原本是想往上找一個可拖動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