アクティブ状態の切り替えを簡単なスクリプトで実装する方法【Unityゲーム作成】

今回は、簡単なスクリプトでアクティブ状態のON、OFF切り替えを行っていきます。色々な実装方法がありますが、その一つみたいな感じです。たぶん、かなり基本的な内容です。

今回やる事

前回、クリックして画像を切り替えて「扉の開け閉め」や「電源のONOFF」の実装を行いました。

今回は簡単なスクリプトで同じようなものを実装していきます。下図の様にボタンを押したら画面が付いたり、消えたりという感じですね。

作成開始

では、実際に作成していきます。今回も画像はいらすとやさんから。

まずはスクリプト無しで実装してみる

まずは、スクリプトなしで画像切り替えを実装していきます。この辺は「扉の開け閉め、電源のONとOFFを画像切り替えで簡単に行う方法」で詳しく書いてます。

下図のように画像を適用してサイズを変更

次にイベントトリガーから動作を追加。スイッチをクリックしたら「ディスプレイをON、スイッチをON」にするという感じですね。

次にスイッチを切った時の動作。ディスプレイをOFFにしてスイッチもOFFに。

これで完成です。実際に再生して問題なく動けばOKです。

別パターンも検証

次に電源ON状態とOFF状態の見た目が変わらない場合を実装していきます。上に重ねればもちろん実装出来ます。同じようにイベントを追加。

電源OFFも同じように。ここで使う画像はONもOFFも同じものです。

ボタンの見た目は変化していないですが、電源をONにしたとき、内部的には上に重なっています。また、同じ画像を重ねていますが、画像を無しにして不透明度0(透明)でも問題ないです。むしろこっちの方がいいかも

下図のように動けばOK。見えないだけでオブジェクトが上にいる状態ですね。

スクリプトで実装

では、ここからは同じものをスクリプトで実装していきます。オブジェクトを上に重ねる必要が無い点が違いです。

まずはAssetsフォルダ内にScriptsフォルダを作成。

Buttonを一つだけにして、既に設定してあったイベントトリガーは全て削除。コンポーネントを追加から、新しいスクリプトを「作成して追加」を選択。

作成したスクリプトを開きます。当たり前ですが初期状態ですね。Scriptsフォルダ内に移動しておきます。

コードを書いていく

スクリプト内を下のように変更します。簡単に言うとOnOff関数でディスプレイ状態を確認してONならOFFに、OFFならONにするって感じ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button : MonoBehaviour
{
    public GameObject Sign;

    public void OnOff()
    {
        if (Sign.activeSelf)
        {
            Sign.SetActive(false);
        }
        else
        {
            Sign.SetActive(true);
        }
    }
}

すっきりさせるなら下みたいな感じでOK。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button : MonoBehaviour
{
    public GameObject Sign;

    public void OnOff()
    {
        bool bActive = Sign.activeSelf ? false : true;
        Sign.SetActive(bActive);
    }
}

スクリプトを作成したら保存して閉じます。

変数設定、イベント追加

スクリプトの作成が完了したので、インスペクター画面で「Sign変数にONのオブジェクトを適用」、イベントトリガーを追加してクリックした時に作成した関数(OnOff)を呼び出すようにします。

これで完成です。実際に再生で動作確認してみます。

オブジェクトを追加してみる

では、次にオブジェクトを追加して「ボタンを押したら連動して2つ動く場合」を追加で実装してみます。下図のような感じですね。

オブジェクトを追加

まずはオブジェクトを追加。ディスプレイと同じように画像を設定してサイズ、位置の変更。

スクリプトを変更

スクリプトを下記のように変更。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button : MonoBehaviour
{
    public GameObject Sign;
    public GameObject Tablet;

    public void OnOff()
    {
        bool bActive = Sign.activeSelf ? false : true;
        Sign.SetActive(bActive);
        Tablet.SetActive(bActive);
    }
}

追加した変数にタブレットON状態のオブジェクトを適用。これで動くようになります。

Unityに限った話ではないけど、実装方法というのは沢山あって簡単を取るか、後での直しやすさ、変更漏れが少なそうな方法をとるか、色々ですわな。スクリプトでやった方が後々の事を考えたら便利になる可能性は高いけど、あえて出来るだけスクリプトを使わないってのも一つの考え方ですかね。

私もまだまだUnityは触り始めたばかりなので、勉強することばかりです。

タイトルとURLをコピーしました