Help us understand the problem. What is going on with this article?

【Unity C#】関数を1回だけ呼ぶ方法

More than 3 years have passed since last update.

はじめに

ある関数を1回だけ実行させたい。こういう時どうすれば良いかをまとめてみました。

1. Start()で呼ぶ

おそらく最もシンプルな方法。 Awake()に書いても良い

NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        // Hoge()を実行
        Hoge();
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}

ただ、この方法だと開始時に呼ばれてしまう。 任意のタイミングで実行させたい場合には使えない

2. 変数を用意する

変数を使って過去に呼ばれたかどうかを素直に判定させる。
シンプルだがスマートではないようにも思える。

NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    bool isCalled = false;

    void Update()
    {
        // Time.time > 1.5f の場合に1回だけHoge()を実行
        if (Time.time > 1.5f)
        {
            if (isCalled == false)
            {
                isCalled = true;
                Hoge();
            }
        }   
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}

3. UniRxを使う

UniRx - Reactive Extensions for Unity を使うとシンプル、そしてスマートに書ける。
UniRxについてはググるとわかりやすい記事がたくさん出てくるので調べてみるといいかもしれない。

NewBehaviourScript.cs
using UnityEngine;
using UniRx;
using UniRx.Triggers;

public class NewBehaviourScript : MonoBehaviour 
{
    void Start ()
    {
        // Time.time > 1.5f の場合に1回だけHoge()を実行
        this.UpdateAsObservable()
            .First(x => Time.time > 1.5f)
            .Subscribe(x => Hoge());
    }

    void Hoge()
    {
        Debug.Log("ほげ");
    }
}

参考URL

未来のプログラミング技術をUnityで -UniRx-
http://www.slideshare.net/torisoup/unity-unirx

UniRxについて書いた記事をまとめてみた
http://qiita.com/toRisouP/items/48b9fa25df64d3c6a392

UniRxのシンプルなサンプル その3(FirstとTake)
http://qiita.com/Marimoiro/items/b24510b0ffd273f69f8a

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした