平時我們會使用到計數器來幫助我們進行事情的調用,比如說某件事執行多久要停止,每件事情要花多久時間等等,都會需要使用到計數器。
最近做的一些專案都會需要使用Counter來了解一件事完成的程度,與確認是否在某一時間下切換到另外一個Function,或是給定一個時間來判定當前User 的姿態等,可以說計數的重要性不容小覷。而最近的資料也需要做傳出到.csv 檔儲存,故需要紀錄資料存取當下的時間點,所以這邊我也會做說明如何print出我們想要的日期、時間顯示方式。
今天完成的項目有:
首先: 若不清楚Unity 與 Virtual Studio Code 串接使用,歡迎先到以下的連結參考該做法。
https://youtu.be/4WWX2_tZu5Q
首先我們設定 Text 在環境上,如以下結果。可以發現新增一個 Text 時Unity 會自行新增Canvas、EventSystem,Canvas 就是排版起初的版面,上面可以新增各項UI的物件,而EventSystem 是負責每個UI物件事件與觸發的控制。
接下來按右鍵盤新增一個Empty 物件在Hierarchy。並且新增一個文本 TimeControl.cs
接下來開始撰寫文本。首先若要使用UI物件就需要先 using UnityEngine.UI 。以下程式碼是當按下鍵盤 p 鍵的時候會開始計數( startBool = true ),若歸零則按下l 鍵,並重新等待按下 p 鍵執行。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TimeControl : MonoBehaviour
{
public Text counterTxt;
private float count;
private bool startBool = false;
void Start()
{
counterTxt.text = "0";
}
void Update()
{
if(Input.GetKeyDown("p"))
{
startBool = true;
}else if(Input.GetKeyDown("l")) // reset the counter
{
count = 0f;
startBool = false;
}
if(startBool)
{
startCount();
}
}
void startCount()
{
count += Time.deltaTime;
double k = Math.Round(count, 2);
counterTxt.text = k.ToString();
}
}
最後回到Unity 將其我們新增的Text拉入到 TimeManagement 中的 TimeControl.cs 元素上面。
執行後就會看到Unity 中的 Text 會開始計數。
void ShowNowTime()
{
currentTime.text = getNowTime();
}
string getNowTime()
{
PlayerPrefs.SetString("date time", System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
return PlayerPrefs.GetString("date time");
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class TimeControl : MonoBehaviour
{
public Text counterTxt;
public Text currentTime;
private float count;
private bool startBool = false;
void Start()
{
counterTxt.text = "0";
}
void Update()
{
if(Input.GetKeyDown("p"))
{
startBool = true;
}else if(Input.GetKeyDown("l")) // reset the counter
{
count = 0f;
startBool = false;
}
if(startBool)
{
startCount();
}
// show the currentTime
ShowNowTime();
}
void startCount()
{
count += Time.deltaTime;
double k = Math.Round(count, 2); // need to show like 10.03f
counterTxt.text = k.ToString();
}
void ShowNowTime()
{
currentTime.text = getNowTime();
}
string getNowTime()
{
PlayerPrefs.SetString("date time", System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
return PlayerPrefs.GetString("date time");
}
}
回到 Unity 將我們位於Hierarchy 中的 Text拉入到我們的 Script 中。
最後就可以執行觀察結果 >< Great!
在這感謝各位瀏覽的IT大大,如果有什麼更好的建議或是也有想分享的技術歡迎留言,能瀏覽到我的文章或許就是一種緣分! 若您也對多媒體互動相關領域的朋友也歡迎指教!