UnityTimerタイマー[搬送][Github]
3537 ワード
紹介する
Unity 3 Dでの遅延実行操作このライブラリは、Alexander Biggs+Adam Robinson-Yuが作成したPitfall Planetを含む複数のプロジェクトの戦闘テストと改善を経て作成されました.ソースエンジニアリング
インストール
UnityTimerの最新バージョンを取得するには、Releasesページに移動し、最新バージョンからTimerをダウンロードします.unitypackageファイル.そして、Unityプロジェクトを開くと開くことができる.unitypackageファイルを使用して、スクリプトをプロジェクトにインストールします.または、最新バージョンを維持する場合は、このリポジトリをプロジェクトのAssetsフォルダにクローンできます.しかし、これはあなたに安定したバージョンを与えることを保証しません.
基本例
Unity Timerでは、次のようにタイマーを作成します.
/// < summary >
/// , 。/// summary >
/// < param name = “ duration ” > , 。 param >
/// < param name = “ onComplete ” > 。 param >
public static Timer Register(float duration, Action onComplete);
呼び出し方法は次のようになります.
// 5 "Hello World".
Timer.Register(5f, () => Debug.Log("Hello World"));
動機
開梱して使用します.このライブラリがなければ、Unityにはタイマーを処理する方法が2つあります.
1.WaitForSecondsメソッドを使用します.2.タイマの開始時間をプライベート変数(startTime=Time.timeなど)に格納し、更新呼び出しif(Time.time-startTime>=timerDuration)を確認します.
1つ目の方法は冗長で、IEnumerator関数を使用するためにコードを再構築させます.さらに、コンシステントを開始するためにMonoBehaviourインスタンスにアクセスする必要があります.これは、このソリューションが非MonoBehaviourクラスに適用されないことを意味します.最後にWaitForSecondsがTimeScaleの変化の影響を受けることを阻止することはできなかった.2つ目の方法はエラーが発生しやすく、コードが読みにくいように、実際のゲームロジックを非表示にします.このライブラリは、この2つの問題を緩和し、Unityプロジェクトの任意のクラスに読みやすく、表現力のあるタイマーを簡単に追加できます.
とくせい
isLooped
をtrueに設定することでタイマーを繰り返します.// 。
Timer.Register(2f, player.Jump, isLooped: true);
呼び出し後にタイマーをキャンセルします.
Timer timer;
void Start()
{
timer = Timer.Register(2f, () => Debug.Log("You won't see this text if you press X."));
}
void Update()
{
if (Input.GetKeyDown(KeyCode.X)) {
Timer.Cancel(timer);
}
}
useRealTime
をtrueとすることにより、TimeではなくrealtimeSinceStartupで時間を測定する.Scale. // 0 。
Time.timeScale = 0f;
//... useRealTime, , 。
Timer.Register(1f, this.HandlePausedGameState, useRealTime: true);
MonoBehaviourにタイマーをアタッチし、MonoBehaviour時にタイマーを破棄します.通常、MonoBehaviourから呼び出されたタイマーは、その動作の状態を操作します.したがって、通常の方法は、MonoBehaviourのOnDestroyメソッドのタイマーをキャンセルすることです.TimerをMonoBehaviourに接続する便利な拡張方法を追加し、MonoBehaviourがnullとして検出されるとタイマーが自動的にキャンセルされます.
public class CoolMonoBehaviour : MonoBehaviour
{
void Start()
{
// AttachTimer Timer, , Timer 。
this.AttachTimer(5f, () =>
{
// , ,
// 。
this.gameObject.transform.position = Vector3.zero;
});
}
void Update()
{
// !
if (Input.GetKeyDown(KeyCode.X))
{
GameObject.Destroy(this.gameObject);
}
}
}
onUpdateコールバックを使用して値を逐次更新します.
// 。
Color color = Color.white;
float transitionDuration = 5f;
Timer.Register(transitionDuration,
onUpdate: secondsElapsed => color.r = 255 * (secondsElapsed / transitionDuration),
onComplete: () => Debug.Log("Color is now red"));
他にも多くの有用な機能が含まれています
Timer/Exampleフォルダには、すべての機能を示すテストシーンスクリプトが含まれています.