こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのactiveSelfがどういうものなのか分からない。」
「activeSelfはどうやって使えばいいの?」
というお悩みの方に向けた内容となっています。
Unityでは、オブジェクトのアクティブ状態を返すメソッドとして、activeSelfという関数があります。
このactiveSelfは、現在のゲームオブジェクトのアクティブ状態をbool型で返してくれるメソッドです。
activeSelfを使うことで、そのオブジェクトのアクティブ状態に合わせてゲームの処理を行うことができるようになります。
そこで、このページでは、activeSelfについて、仕様や特徴、また使い方から注意点までをまとめていきます。
なお、このページでは、
Windows11
Unity Hub3.11.1
Unity6
のバージョンで解説しています。
activeSelfとは?オブジェクトのアクティブ状態を返すメソッド
activeSelfとは、冒頭でも解説した通りで、そのオブジェクトのアクティブ状態を判定することができるメソッドになっています。
オブジェクトのアクティブ状態は、オブジェクトを選択した際のインスペクターウィンドウ上のチェック欄を入れているかどうかの部分で決められています。

この欄にチェックが入っていない場合は非アクティブ状態となり、ゲーム画面にそのオブジェクトが表示されず、紐づいているコンポーネントやスクリプトの処理も行われません。
このactiveSelfは、そのオブジェクトがアクティブ状態か非アクティブ状態かをbool型(trueやfalse)で戻してくれるメソッドになっています。
そのため、このactiveSelfを使うことで、オブジェクトがアクティブの時だけ処理を行うといったことができるようになります。
activeSelfの使い方
ここからは、activeSelfの使い方についてまとめていきます。
activeSelfの前にGameObjectを指定する
activeSelfは、オブジェクトに対して使用するメソッドになるので、activeSelfの前でそのオブジェクトをGameObject型で指定します。
GameObject.activeSelf
例えば、GameObject型の変数を宣言して、以下のように記載してあげることで、コンソールウィンドウにそのオブジェクトがアクティブかどうかを返すことができます。
using UnityEngine;
public class Enemy : MonoBehaviour
{
public GameObject enemy; // GameObject型の変数を宣言
void Start()
{
Debug.Log(enemy.activeSelf); // オブジェクトのアクティブ状態をコンソールウィンドウに表示
}
}

戻り値でbool型が返ってくる
activeSelfは、オブジェクト状態をbool型で返してくるメソッドで、
となっています。
そのため、if文を使うことでそのオブジェクトのアクティブ時と非アクティブ時で別の処理を行うことができます。
using UnityEngine;
public class Enemy : MonoBehaviour
{
public GameObject enemy; // GameObject型の変数を宣言
void Start()
{
if (enemy.activeSelf == true)
{
// オブジェクトがアクティブの時の処理
}
else if (enemy.activeSelf == false)
{
// オブジェクトが非アクティブの時の処理
}
}
}
activeSelfの注意点
ここからは、activeSelfを使う際の注意点をまとめていきます。
アクティブ状態を切り替えるのはSetActive関数
activeSelfは、あくまでもオブジェクトがアクティブかどうかを判定するためのメソッドなので、そのオブジェクトのアクティブ状態を切り替えることはできません。
オブジェクトのアクティブ状態を切り替える場合は、SetActive関数を使います。
SetActive関数は、
GameObject.SetActive(bool);
のように、引数にbool型を渡してあげることで、そのオブジェクトのアクティブ状態を切り替えることができるメソッドになっています。
親オブジェクトのアクティブ状態には関係しない
activeSelfは、あくまでもそのオブジェクトのアクティブ状態を返すだけなので、例えば親オブジェクトが非アクティブであっても、指定したオブジェクトがアクティブであればtrueと返されることになります。
親オブジェクトのアクティブ状態も加味したい場合は、activeInHierarchyというメソッドを使います。
activeInHierarchyは、activeSelfと同じくオブジェクトのアクティブ状態を判定してくれますが、親オブジェクトが非アクティブであれば、falseを返してくれます。
なお、activeInHierarchyの使い方は、activeSelfと同じです。
例えば、非アクティブの親オブジェクトの中にあるアクティブの子オブジェクトに対して、それぞれactiveSelfとactiveInHierarchyで判定した場合、

using UnityEngine;
public class Test : MonoBehaviour
{
public GameObject child; // 子オブジェクトを取得
void Start()
{
Debug.Log(child.activeSelf);
Debug.Log(child.activeInHierarchy);
}
}
activeSelfではtrueが返ってきますが、activeInHierarchyではfalseが返ってきます。

そのため、アクティブ状態で処理したい内容を書いていく場合は、親オブジェクトのアクティブ状態も考えるかどうかで、使うメソッドを変えていきましょう。
まとめ
このページでは、activeSelfについてどんなメソッドなのか、仕様や使い方、また注意点までをまとめていきましたが、いかがでしたでしょうか?
activeSelfは、オブジェクトのアクティブ状態を判定するメソッドで、bool型で値が戻ってきます。
if文などで条件指定して使うことで、アクティブ状態に合わせてゲーム内での処理を分けるということができます。
ただし、activeSelfは親オブジェクトのアクティブ状態を加味していないので、親オブジェクトも考える必要がある場合は、activeInHierarchyの方を使うようにしましょう。
最後までお読みいただきまして、ありがとうございました!
コメント