【ハルシオンブログ】オブジェクトのONOFFとコンポーネントのONOFFは別ですよ。SetActiveとenabledを使い分けよう。
おはようございます。
10月もそろそろ終わりですね。
Unityの基本的な機能ですが、オブジェクトのONOFFにSetActiveとenableって使ってますか?
同じような感じにみえて、違う処理なんですよね。
要点をまとめると、SetActiveはオブジェクトをONOFF。
enabledはコンポーネントをONOFF。
この違いです。
SetActiveをしてみます。
[Blog20211025.cs]
これを実行すると、こうなる。

オブジェクトがOFFになります。
enabledの方はこういうことができません。
[Blog20211025.cs]
enabledのところがエラーになりますね。
さきほど「enabledはコンポーネントのONOFF」といった通り、cubeオブジェクトについているコンポーネントを指定しないとenabledはいじれません。
[Blog20211025.cs]
これはできますね。
実行してみましょう。

オブジェクトはONのままですが、MeshRendererがOFFになりました。
(まぁMeshRendererをゲットしてenabledしたから当たり前だけど)
という感じで、この2つのONOFF関数は別の動きをします。
GameObject.Findを使ってオブジェクトを取得する場合、SetActiveで消したやつは取得できなくなるので注意してください。
enabledでコンポーネントをOFFにしただけのものは、Findで取得できます。
同じONOFFにする関数ですが、それぞれのシチュエーションにあった方を使ってください。
では、あでゅ~ノシ
10月もそろそろ終わりですね。
Unityの基本的な機能ですが、オブジェクトのONOFFにSetActiveとenableって使ってますか?
同じような感じにみえて、違う処理なんですよね。
要点をまとめると、SetActiveはオブジェクトをONOFF。
enabledはコンポーネントをONOFF。
この違いです。
SetActiveをしてみます。
[Blog20211025.cs]
using UnityEngine;
public class Blog20211025 : MonoBehaviour
{
[SerializeField] GameObject cube;
private void Start() {
cube.SetActive(false);
}
}
これを実行すると、こうなる。

オブジェクトがOFFになります。
enabledの方はこういうことができません。
[Blog20211025.cs]
using UnityEngine;
public class Blog20211025 : MonoBehaviour
{
[SerializeField] GameObject cube;
private void Start() {
cube.enabled = false;
}
}
enabledのところがエラーになりますね。
さきほど「enabledはコンポーネントのONOFF」といった通り、cubeオブジェクトについているコンポーネントを指定しないとenabledはいじれません。
[Blog20211025.cs]
using UnityEngine;
public class Blog20211025 : MonoBehaviour
{
[SerializeField] GameObject cube;
private void Start() {
cube.GetComponent<MeshRenderer>().enabled = false;
}
}
これはできますね。
実行してみましょう。

オブジェクトはONのままですが、MeshRendererがOFFになりました。
(まぁMeshRendererをゲットしてenabledしたから当たり前だけど)
という感じで、この2つのONOFF関数は別の動きをします。
GameObject.Findを使ってオブジェクトを取得する場合、SetActiveで消したやつは取得できなくなるので注意してください。
enabledでコンポーネントをOFFにしただけのものは、Findで取得できます。
同じONOFFにする関数ですが、それぞれのシチュエーションにあった方を使ってください。
では、あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】Unity2021.2でちょっと便利な機能 | 【ハルシオンブログ】ちょっとした遅延処理を書くときにDOVirtualが便利かも? »
コメント
| h o m e |