トーフメモ

主にゲーム制作

【UnityC#】Invokeを使い倒してみた

f:id:tofgame:20190511040120p:plain
UnityにInvokeというおもしろそうな関数がありました。
.netのControl.Invokeとは別物です。

Invokeとは

関数の実行タイミングを遅らせることができます。
Invoke(関数の名前,実行するタイミング);

実装してみた

youtu.be

世紀末にいそうな人が一定の間隔で地面から生えます。

HyahhaSpawner.cs

using UnityEngine;

public class HyahhaSpawner : MonoBehaviour {
    //=============================================================
    [SerializeField]
    private GameObject Hyahha;

    private Vector3 defaultPos = new Vector3(-0.5f,-1.4f,-9.3f);
    private int hyahhaNum = 30;
    private float spawnInterval = 0.5f;

    //=============================================================
    private void Start () {
        for(int i = 0;i < hyahhaNum;i++) {
            Invoke("SpawnHyahha",i*spawnInterval);
        }
    }

    /// <summary>
    /// ヒャッハーを生成する
    /// </summary>
    private void SpawnHyahha () {
        GameObject obj = Instantiate(Hyahha,defaultPos + new Vector3(Random.value,0,Random.value),Quaternion.identity);
        obj.transform.eulerAngles = new Vector3(0,180,0);
    }
}

Start()内でInvokeを0.5秒おきに呼び出します。
引数とか渡せないのでInvoke使いたい!ってなるとちょっと工夫が必要かもしれないです。
Invokeの亜種でInvokeRepeatingという関数もあります。
InvokeRepeating(関数の名前,実行するタイミング,実行する間隔);

private void Start () {
    InvokeRepeating("SpawnHyahha",0,spawnInterval);
}

参考

unity3d.com