LoginSignup
11
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-11

はじめに

ある関数を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

11
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7