facebook twitter hatena line email

「Unity/Csharp/Invoke」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==Invokeとは== メソッドを遅らせて実行させることができる ==サンプル== void Main() { Invoke("Method1"); } void Method1() { } ==サン...」)
 
(繰り返し)
 
(同じ利用者による、間の15版が非表示)
行1: 行1:
 
==Invokeとは==
 
==Invokeとは==
メソッドを遅らせて実行させることができる
+
メソッドを遅らせて(遅延)実行させることができる
  
 
==サンプル==
 
==サンプル==
 
  void Main() {
 
  void Main() {
     Invoke("Method1");
+
     Invoke("Method1", 0.2f); // 0.2sec後に実行
 
  }
 
  }
 
  void Method1() {
 
  void Method1() {
 
  }
 
  }
  
==サンプル==
+
==Invokeに引数を追加==
void Main() {
+
StartCoroutineを使えば出来る。
    int id = 1;
+
 
    string name = "hoge";
+
引数として123を指定
    object[] args = new object[
+
<pre>
        id,
+
using System.Collections;
        name,
+
private void Start() {
    ]
+
  StartCoroutine(DelayMethod1(5.0f, 123));
    Invoke("Method1", args);
+
}
}
+
IEnumerator DelayMethod1(float delay, int hoge) {
  void Method1(int id, string name) {
+
  yield return new WaitForSeconds(delay);
}
+
  // ここに処理を追加
 +
}
 +
</pre>
 +
 
 +
参考:https://kan-kikuchi.hatenablog.com/entry/DelayMethod
 +
 
 +
==StartCoroutineが使えない場所で使いたい場合==
 +
===UniTaskを使えば出来る===
 +
<pre>
 +
using Cysharp.Threading.Tasks;
 +
async void Exec()
 +
{
 +
    await DelayMethod1(5.0f, 123);
 +
}
 +
IEnumerator DelayMethod1(float delay, int hoge)
 +
{
 +
    yield return new WaitForSeconds(delay);
 +
    // ここに処理を追加
 +
}
 +
</pre>
 +
 
 +
詳しくは、[[Unity/UniTask]] [ショートカット]
 +
 
 +
===UniRxのTimerでも===
 +
[[Unity/UniRx/遅延処理]] [ショートカット]
 +
 
 +
==オブジェクト削除時の遅延処理==
 +
GameObjectは以下で5秒後に遅延削除できる
 +
Destroy(obj, 5.0f);
 +
 
 +
==繰り返し==
 +
1秒後に実行して、その後、2秒間隔で実行
 +
  InvokeRepeating("hoge", 1f, 2f);

2022年12月6日 (火) 11:36時点における最新版

Invokeとは

メソッドを遅らせて(遅延)実行させることができる

サンプル

void Main() {
    Invoke("Method1", 0.2f); // 0.2sec後に実行
}
void Method1() {
}

Invokeに引数を追加

StartCoroutineを使えば出来る。

引数として123を指定

using System.Collections;
private void Start() {
  StartCoroutine(DelayMethod1(5.0f, 123));
}
IEnumerator DelayMethod1(float delay, int hoge) {
  yield return new WaitForSeconds(delay);
  // ここに処理を追加
}

参考:https://kan-kikuchi.hatenablog.com/entry/DelayMethod

StartCoroutineが使えない場所で使いたい場合

UniTaskを使えば出来る

using Cysharp.Threading.Tasks;
async void Exec()
{
    await DelayMethod1(5.0f, 123);
}
IEnumerator DelayMethod1(float delay, int hoge)
{
    yield return new WaitForSeconds(delay);
    // ここに処理を追加
}

詳しくは、Unity/UniTask [ショートカット]

UniRxのTimerでも

Unity/UniRx/遅延処理 [ショートカット]

オブジェクト削除時の遅延処理

GameObjectは以下で5秒後に遅延削除できる

Destroy(obj, 5.0f);

繰り返し

1秒後に実行して、その後、2秒間隔で実行

InvokeRepeating("hoge", 1f, 2f);