時間遅延の実行
1秒後、2秒後、3秒後にそれぞれのタイミングでメソッドを実行するケースを考えてみましょう
一定時間ごとに実行されるコード
Invokeメソッドは、第1引数に実行されるメソッド、第2引数に秒数を取ります
第1引数はあえて難しく書いていますが、"View1″だと間違って"Veiw1″としてもエラーにならないための工夫です
// Invoke("View1", 1);と同じ
Invoke(nameof(View1), 1);
1秒、2秒、3秒後にメソッドが実行されます
using UnityEngine;
public class DeferredExecution : MonoBehaviour
{
void Start()
{
// 1秒後にView1メソッドを実行
Invoke(nameof(View1), 1);
// 2秒後にView2メソッドを実行
Invoke(nameof(View2), 2);
// 3秒後にView3メソッドを実行
Invoke(nameof(View3), 3);
}
void View1()
{
Debug.Log("ビュー1");
}
void View2()
{
Debug.Log("ビュー2");
}
void View3()
{
Debug.Log("ビュー3");
}
}
タイミングよく3秒付近でスペースを押すとOKとなるコード
ゲームスタートからの秒数になります
Time.time;
経過時間の計算になります
float timing = Time.time - startTime;
押した時間が2.5秒よりあとで、3.2秒より前かを判断しています
ズルしていないかの判定!
if (2.5f < timing && timing < 3.2f)
全体コード
using UnityEngine;
public class DeferredExecution : MonoBehaviour
{
float startTime;
void Start()
{
startTime = Time.time;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
float timing = Time.time - startTime;
if (2.5f < timing && timing < 3.2f)
{
Debug.Log("タイミングOK");
}
else
{
Debug.Log("タイミングNG");
}
}
}
}
ジャン・ケン・ポンでタイミングよく押される様子をシミュレートしたコード
2つのコードを組み合わせました
using UnityEngine;
public class DeferredExecution : MonoBehaviour
{
float startTime;
void Start()
{
startTime = Time.time;
// 1秒後にView1メソッドを実行
Invoke(nameof(View1), 1);
// 2秒後にView2メソッドを実行
Invoke(nameof(View2), 2);
// 3秒後にView3メソッドを実行
Invoke(nameof(View3), 3);
}
void View1()
{
Debug.Log("ビュー1");
}
void View2()
{
Debug.Log("ビュー2");
}
void View3()
{
Debug.Log("ビュー3");
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
float timing = Time.time - startTime;
if (2.5f < timing && timing < 3.2f)
{
Debug.Log("タイミングOK");
}
else
{
Debug.Log("タイミングNG");
}
}
}
}
結果
次の結果サンプルは、タイミングよく押せなかった場合
ビュー1
ビュー2
ビュー3
タイミングNG
ディスカッション
コメント一覧
まだ、コメントがありません