53586


Unity公式チュートリアルのwave作成部:<https://unity3d.com/jp/learn/tutorials/projects/2d-shooting-
game/spawning-waves>  
コメント部のここですの部分コードですがtransform.parentに空のゲームオブジェクトとして  
作成したオブジェクトに設定したpositionの値を入れていますが、Instantiate()した時点で各値を入れていますのでソースをコメントにしても同じ結果になるのですが  
親の座標も変更するのは意味があるのでしょうか？

[code]

    public class Emitter : MonoBehaviour {
    
        public GameObject[] waves;
        private int currentWave;
    
    
    
        private IEnumerator e()
        {
            if (waves.Length == 0)
            {
                yield break;
            }
    
            while (true)
            {
            //    Debug.Log("コルーチン");
                GameObject wave = (GameObject)Instantiate(waves[currentWave],
                    transform.position,
                    Quaternion.identity);
    
         //       wave.transform.parent = transform;//ここです
                while (wave.transform.childCount != 0)
                {
                    yield return new WaitForEndOfFrame();
                }
                Destroy(wave);
    
                if (waves.Length <= ++currentWave)
                {
                    currentWave = 0;
                }
            }
    
        }
    
        private void Start()
        {
            StartCoroutine(e()); 
    
        }
    
        // Update is called once per frame
    
        void Update () {
          //  Debug.Log(currentWave);
    
        }
    
    }
    
[/code]


CC BY-SA 4.0
2019-03-19T21:05:42.673
53557
2019-03-20T09:12:44.160
2019-03-19T21:52:27.987
question
unity3d
Unity C# サンプルコードの意味のないコードの意味が知りたい。


まず`transform.parent`の認識が間違っているように思われます。  
[Unity Document -
Transform.parent](https://docs.unity3d.com/ja/current/ScriptReference/Transform-
parent.html)  
こちらのページをご覧ください。以下引用です。

> **説明**  
>  Transformの親  
>  親を変更すると親からの相対的な位置、回転、スケールが変更されますが、ワールド空間としての位置、回転、スケールは維持されます。

要するに`transform.parent`とはオブジェクトの親を表すプロパティであり、そこに値を代入するということは親オブジェクトを設定するということです。

質問者さんの引用元のページを見ると書いてありますが、

[code]

    // WaveをEmitterの子要素にする
    wave.transform.parent = transform.
    
[/code]

あくまで`wave`の親オブジェクトをこのオブジェクト(Emitter.csがアタッチされているオブジェクト)に設定したというだけです。  
なので質問者さんの言うような親の座標を変更したというわけではありません。

また、該当部分をコメントアウトしても動くのは、親を設定してもワールド座標は影響を受けないためです。  
ただしコメントアウトするとWabeプレハブがEmitterの子供にならないはずなので実行中のヒエラルキー画面に注目してみてください。


CC BY-SA 4.0
2019-03-20T09:12:44.160
53586
2019-03-20T09:12:44.160
31396
53557
answer