【Unity】自分と他者のアクティブ状態を入れ替えるにはSetActive。スタンプカードなどパネル遷移の基礎です。

2022年8月25日

どうも、だらはです。
先日、Unityでスタンプカードを作ったので、スタンプカードを実装するためのパネル遷移の基礎として、自分と他者のアクティブ状態を入れ替える方法をまとめました。
コピペで動作するように汎用性を持たせたので、是非参考にして頂けたらと思います。
アクティブ状態の変更は、SetActiveを使います。

スポンサーリンク

機能

  • オブジェクトをクリックするとその親オブジェクトを非アクティブ化、また、任意オブジェクトをアクティブ化する。
  • オブジェクトをクリックすると音が鳴る。

手順

早速ですがスクリプトを記載したいと思います。
下図を参考に、ヒエラルキーを構築、してみて下さい。

◆図1(非アクティブ化されるオブジェクト)

◆図2(アクティブ化されるオブジェクト)

◆スクリプト(ItemStamp.cs)

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

public class ItemStamp : MonoBehaviour
{
    [SerializeField] string objActiveName;  //アクティブ化するオブジェクト名
    [SerializeField] string objSoundName;   //AudioClipの転送先

    GameObject objParent;
    GameObject objParentP;
    GameObject objItem;

    AudioSource audioSource;
    AudioSource audioSourceMy;

    void Start()
    {
        objParent = transform.parent.gameObject;                        //親を取得
        objParentP = objParent.transform.parent.gameObject;             //親の親を取得
        objItem = objParentP.transform.Find(objActiveName).gameObject;  //アクティブ化するオブジェクトを取得

        audioSourceMy = GetComponent<AudioSource>();
        audioSource = GameObject.Find(objSoundName).GetComponent<AudioSource>();
    }

    public void Stamp()
    {
        audioSource.PlayOneShot(audioSourceMy.clip);
        objItem.SetActive(true);        //アクティブ化
        objParent.SetActive(false);     //非アクティブ化   
    }
}

◆実行結果

はい、正しくアクティブ化/非アクティブ化されました。イーチコターチコ!
なお、今回は説明を省いていきなり使いましたが、EventTriggerAudioSourceを使っています。
別の記事にて使い方をまとめてありますので、もし興味があれば参照して頂けたら嬉しいです。

◆EventTriggerの使い方

◆スクリプトから音声を再生する方法

まとめ

いかがでしたでしょうか。
今回はSetActiveを用いてスタンプカードのパネル遷移の基礎であるアクティブ状態の入れ替え方についてまとめました。
段々と難しくなってきましたが、これから色々な機能をどんどんまとめていこうと思います:)

以上、だらはでした。

スポンサーリンク

基礎

Posted by daraha_gm