質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

button

HTMLで用いる<button>タグです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3775閲覧

Unity Transform.gameObject をDestroyで削除すると

yorha0005

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

button

HTMLで用いる<button>タグです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/05 16:46

Unity初心者です。
[SerializeField] Transform 型の変数を作成し、一度使用した後DestroyでGameObjectを削除でリセットした後、Restartボタンで再利用したいのですが、うまくオブジェクトが作成できませんでした。

そのことで、まずTransformのGameObjectが削除されたらどんな状態になるのか、
(もしかしてGameObjectが消えているのでTransformを作り直さないと使えない?)
また、Destroyしたものを再利用もしくは復活したい場合、どうすればよいのか、アドバイスいただきたいです。

C#

1 2//手札にカードを生成 3 [SerializeField] Transform playerHandTransform, 4 playerFieldTransform, 5 enemyHandTransform, 6 enemyFieldTransform; 7 //デッキ作成 8 List<int> playerDeck = new List<int>() {1,1,2,3}, 9 enemyDeck = new List<int>() {1,3,1,2}; 10 11//ここで再利用するための処理実施 12public void Restart() 13 { 14 //hand.field delete 15 foreach(Transform card in playerHandTransform) 16 { 17 Destroy(card.gameObject); 18 } 19 foreach (Transform card in playerFieldTransform) 20 { 21 Destroy(card.gameObject); 22 } 23 foreach (Transform card in enemyHandTransform) 24 { 25 Destroy(card.gameObject); 26 } 27 foreach (Transform card in enemyFieldTransform) 28 { 29 Destroy(card.gameObject); 30 } 31 32//StartGameでplayerFieldTransformの再設定をしています。 33 StartGame(); 34 UnityEngine.Debug.Log("Restart"); 35 36 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TransformはGameObjectのコンポーネントの一つに過ぎないので、GameObjectを消すとTransformも消えます。

C#

1//手札にカードを生成 2 [SerializeField] Transform playerHandTransform, 3 playerFieldTransform, 4 enemyHandTransform, 5 enemyFieldTransform;

上記ですが、これはカードの生成ではありません。
挙動としては以下が正しいです。

  • プレハブを指定している場合

この場合、Instantiateで生成して初めてゲームオブジェクトが存在することになります。
Destroyしても、(プレハブそのものをDestroyしない限り)プレハブそのものは残っているので、再度Instantiateすればよろしいです。

  • シーン上のオブジェクトを指定している場合

この場合、シーン開始時に既に生成されているものに対して参照しているだけになります(これ自体には生成といったことは行われていません)。
Destroyした場合、情報は全く残っていないので、「シーンを再度読み込む」「前述のプレハブを使った方法に変更する」「そもそもDestroyしない」といった対処をしないといけません。

投稿2020/06/06 03:40

編集2020/06/06 03:42
fiveHundred

総合スコア10130

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yorha0005

2020/06/06 06:32

ご回答ありがとうございます。 無事問題も解決し、TransformとGameObjectの関係が少しわかりました!なるほどTransformが一部に過ぎないのですね。だから全部消えてしまうと。 初期化については今後もいろいろ調べながら進めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問