FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Invoke使ってますか?私は使ってません。でも意外と使えそう?簡単なInvokeの使い方 

    こんにちは。坂内っす。
    さみーさみー
    年末なってきましたね!
    忘年会やりすぎ注意ですね!

    さて、UnityでInvokeって使ってますか?
    Coroutineはよく使うけど、Invokeってあんまり使ったことないんですよね。

    でも実は意外と使えるのかなって思い調べてみたので、そのメモです。


    基本的に「〇〇秒後に■■の処理を行う」って時に使いますよね。

    【Invoke】

    [Blog20211213.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20211213 : MonoBehaviour
    {
    [SerializeField] Image imgSquare;
    [SerializeField] Button btnChangeColor;

    private void Start() {
    btnChangeColor.onClick.AddListener(() => Invoke("ChangeColor", 2f));
    }

    void ChangeColor() {
    imgSquare.color = Color.blue;
    }
    }



    「ボタンを押した2秒後にImageの色を青にする」
    という処理がこれでできます。

    【InvokeRepeating】
    InvokeRepeatingというのもあります。
    「指定したメソッドを〇秒おきに実行」というのができるもの。

    [Blog20211213.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20211213 : MonoBehaviour
    {
    [SerializeField] Image imgSquare;
    [SerializeField] Button btnChangeColor;

    private void Start() {
    btnChangeColor.onClick.AddListener(() => InvokeRepeating("ChangeColor", 2f, 1f));
    }

    void ChangeColor() {
    imgSquare.color = new Color32((byte)Random.Range(0,256), (byte)Random.Range(0, 256), (byte)Random.Range(0, 256), 255);
    }
    }



    こんな感じにすれば、ボタンを押した2秒後に色が変わり、その後1秒間隔で色が変わります。

    【CancelInvoke】
    Invokeを止めるものもあるぽいです。

    [Blog20211213.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20211213 : MonoBehaviour
    {
    [SerializeField] Image imgSquare;
    [SerializeField] Button btnStart;
    [SerializeField] Button btnStop;

    private void Start() {
    btnStart.onClick.AddListener(() => InvokeRepeating("ChangeColor", 2f, 1f));
    btnStop.onClick.AddListener(() => CancelInvoke());
    }

    void ChangeColor() {
    imgSquare.color = new Color32((byte)Random.Range(0,256), (byte)Random.Range(0, 256), (byte)Random.Range(0, 256), 255);
    }
    }



    ストップボタンを押すと、ちゃんと色の切り替えが止まりますね。

    意外と使えたりする??

    ただ、メソッドの呼び出しが文字列なのがやっぱり気になりますよね。
    メソッド名ミスでも気づかないし・・・・
    何かあった時に追いづらいのも嫌ですし。

    ということで、Invokeの紹介でした。

    ちょっと使ってみるのもありかもしれませんね。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/849-8ab7aae6
    この記事にトラックバックする(FC2ブログユーザー)