【ハルシオンブログ】Unityでオブジェクトを消す方法3種類。SetActive、enable=false、Destroyの違いについて
こんにちは!坂内っす。
2月になりました。
令和3年2月
令和元年が短かったせいか、やけに令和3年になるのが早かったですね!
さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
この三通りの消し方がありますよね。
みなさんどんな使い分けしてますか?
こんな感じのものを作ってみました。

Cubeの子供にCylinderを置き、ボタンを1つ作成。
ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。
コードは以下の感じ。
[Blog20210201.cs]
まずは「meshCube.enabled = false;」から。


enable = false
によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。
次は「meshCube.gameObject.SetActive(false);」です。
OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。

Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。
オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。
では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
想像通りの動きになるとおもいますが、もちろんCubeが消えます。

Cube自体が消えました。
表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。
ということで、オブジェクトの消し方でした。
基本的なところでしたが、いろいろと消し方があるという確認でした!
では、あでゅ~ノシ
2月になりました。
令和3年2月
令和元年が短かったせいか、やけに令和3年になるのが早かったですね!
さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
この三通りの消し方がありますよね。
みなさんどんな使い分けしてますか?
こんな感じのものを作ってみました。

Cubeの子供にCylinderを置き、ボタンを1つ作成。
ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。
コードは以下の感じ。
[Blog20210201.cs]
using UnityEngine;
using UnityEngine.UI;
public class Blog20210201 : MonoBehaviour
{
[SerializeField] Button btnHide;
[SerializeField] MeshRenderer meshCube;
private void Start() {
btnHide.onClick.AddListener(OnClickHideCube);
}
void OnClickHideCube() {
meshCube.enabled = false;
//meshCube.gameObject.SetActive(false);
//Destroy(meshCube.gameObject);
}
}
まずは「meshCube.enabled = false;」から。


enable = false
によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。
次は「meshCube.gameObject.SetActive(false);」です。
OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。

Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。
オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。
では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
想像通りの動きになるとおもいますが、もちろんCubeが消えます。

Cube自体が消えました。
表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。
ということで、オブジェクトの消し方でした。
基本的なところでしたが、いろいろと消し方があるという確認でした!
では、あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】SuperTextMeshで途中から文字の色を変更する | 【ハルシオンブログ】今更ColorとColor32のお話し。 »
コメント
| h o m e |