unityでゲーム作りたい(Help!) (416レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

344
(2): くまじょ [sage] 2020/05/14(木) 05:33:19.73 ID:6hw1sJEU(1/12) AAS
ScriptPai pai = Instantiate(prefabPai).GetComponent<ScriptPai>();
Destroy(pai.gameObject);
として実際見た目も消えているのに
GameObject.FindGameObjectsWithTag("Pai");
で消したはずのも検出してしまう

Destroy(pai.gameObject);を実行前にタグ名を変えておくことでごまかすけど
345: くまじょ [sage] 2020/05/14(木) 05:39:48.42 ID:6hw1sJEU(2/12) AAS
>>344
[ExecuteAlways]が悪さしてるのかなあ
変更が多くてなくせないから検証してない
349
(3): くまじょ [sage] 2020/05/14(木) 20:17:51.51 ID:6hw1sJEU(3/12) AAS
GameObject[] goPais;

goPais = GameObject.FindGameObjectsWithTag("Pai");
if(goPais.Length != 0)
{
Debug.Log("★-1- おかしな現象が起きてるぞ goPais.Length=" + goPais.Length);
}

ScriptPai pai = MakePai(0, 0, 0);

goPais = GameObject.FindGameObjectsWithTag("Pai");
if (goPais.Length != 1)
{
Debug.Log("★-2- おかしな現象が起きてるぞ goPais.Length=" + goPais.Length);
}

//pai.tag = "Player"; // このあとDestroyしてるのにGameObject.FindGameObjectsWithTag("Pai");で見つけてしまう

Destroy(pai.gameObject);

goPais = GameObject.FindGameObjectsWithTag("Pai");
if (goPais.Length != 0)
{
Debug.Log("★-3- おかしな現象が起きてるぞ goPais.Length="+ goPais.Length);
}
350
(1): くまじょ [sage] 2020/05/14(木) 20:21:02.68 ID:6hw1sJEU(4/12) AAS
>>349
★-3- おかしな現象が起きてるぞ
が表示された

つまり
Destroyしたのに
GameObject.FindGameObjectsWithTagが見つけてしまう

このあと、
goPais = GameObject.FindGameObjectsWithTag("Pai");
goPais[0]になにかすると
すでにdestroyされているのでエラーになる
351: くまじょ [sage] 2020/05/14(木) 20:25:05.66 ID:6hw1sJEU(5/12) AAS
>>349
GameObject.Destroyを使った方がいいのか?
352
(1): くまじょ [sage] 2020/05/14(木) 20:30:13.80 ID:6hw1sJEU(6/12) AAS
>>344-350

この質問を解決とします
どうやらこういう動作をするものらしい
Destroy(pai.gameObject);で即死はしていないので注意ってことだ
354
(1): くまじょ [sage] 2020/05/14(木) 20:51:02.09 ID:6hw1sJEU(7/12) AAS
>>350
訂正

Destroy() した直後は生きているから
m_goPais = GameObject.FindGameObjectsWithTagが見つけてしまう

直後ではなくて後で
m_goPais[0]に何かするとすでにdestroyされているのでエラーになる
359
(1): くまじょ [sage] 2020/05/14(木) 22:21:37.30 ID:6hw1sJEU(8/12) AAS
余計な部分はかえって分かりにくくしてしまうので忘れてください

paiはスクリプトコンポーネント
paiには"pai"というタグがついている

Destroy(pai.gameObject);
goPais = GameObject.FindGameObjectsWithTag("Pai");

でGameObject.FindGameObjectsWithTagが
pai.gameObjectを見つけてしまう
原因を調べてたら
どうやらこう動作をするものなので
回避する必要がある
ということがわかったという話
362: くまじょ [sage] 2020/05/14(木) 22:53:07.03 ID:6hw1sJEU(9/12) AAS
>>361
その指摘は正しい
スクリプトではなくゲームオブジェクトにタグがついていると読み替えてください

タグの話も忘れてください
さらに簡潔に表現すると

Destroy直後(すぐ次の行)ではまだオブジェクトは生きてたってだけのことですよ

検証はしてないけどそういう情報がネットにあったから
363: くまじょ [sage] 2020/05/14(木) 22:55:20.83 ID:6hw1sJEU(10/12) AAS
ぐーぐるけんさく

unity destroy 直後
364: くまじょ [sage] 2020/05/14(木) 23:06:09.26 ID:6hw1sJEU(11/12) AAS
>>352
既に簡潔なものをここに書いてた
366: くまじょ [sage] 2020/05/14(木) 23:17:21.20 ID:6hw1sJEU(12/12) AAS
>>365
説明ありがとう

そりゃ始めからDestroy直後のfindでは見つけてしまうって理解してたら質問しないさ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.024s