2017-06-01 9 views
2

私はUnityを使い始めました。プレファブ(いくつかの2Dスプライト)をあらかじめ定義された位置に配置する単純なC#スクリプトをまとめようとしています。問題は、プレハブにスクリプトを適用してシーンをプレイしようとする度に、Unityはフリーズし、すべてのメモリを使い果たしてしまう(時には私に黒い画面を表示する)無限ループを生成し、私は強制終了させなければならないということですタスクマネージャのプロセスUnity C#スクリプト - ループのない無限ループ...何を待つ?

コードは、しかし、非常に簡単で、まったくのループが含まれていません:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class DungeonTest : MonoBehaviour { 

    public Transform DungeonBuilder; 

    // Use this for initialization 
     void Start() 
    { 
     Instantiate (DungeonBuilder, new Vector2 (1, 1), DungeonBuilder.rotation); 
     Instantiate (DungeonBuilder, new Vector2 (2, 2), DungeonBuilder.rotation); 
     Instantiate (DungeonBuilder, new Vector2 (3, 3), DungeonBuilder.rotation); 

    } 

    void Update() 
    { 


    } 
} 

start()メソッドは、複数のインスタンスを作成し、メモリ使用量も行くことを、階層窓から見ることができます最大85%(!):

Unity infinite loop(?)

おそらくここで間違ってしまっている可能性がどのようにアドバイスしてください。私はすでにいくつかのチュートリアルのビデオを見て、私はドキュメンテーションから関連するパッセージを読んだが、私はこれを理解することはできない。

ありがとうございます!

+1

ダンジョンビルダータイルにはスクリプトがありますか?シーンのタイルは、インスタンス化されたタイル上のものも新しいタイルを作成していることを示す3の累乗で増加しています。おそらく、誤ってDungeonTestスクリプトをタイルプレハブに置いたのでしょうか? – Reasurria

+0

いいえ、このスクリプトのみがプレハブに添付されています。シーンの階層には、このスクリプトがコンポーネントとして追加されたメインカメラとdungeonTileプレハブのみが含まれます。私はドキュメンテーションの "インスタンシングプレハブ"セクションの指示に従いました。 – Bandi

+1

あなたの 'DungeonBuilder' GameObjectのコンポーネントはこのスクリプトのように、このスクリプトはプレハブ上にありますか?これは、インスタンス化された各オブジェクトが独自の 'Start()'を呼び出すことを意味します。インスタンス化されたオブジェクトは、シーンのスクリーンショットと一直線に並んでいるように見えます。 – Serlite

答えて

7

あなたのDungeonTestスクリプトは、インスタンス化しているプレハブ上にあってはいけません。起こっていることは、Prefabがインスタンス化されるたびにStart()が実行されるということです。

したがって、最初のタイルは3つの新しいタイルを作成します。これらのタイルのそれぞれは、3つの新しいタイルなどを無限に作成します。

DungeonTileスクリプトを使用してシーン内に新しいオブジェクトを作成し、インスタンス化しているプレハブからすべてのスクリプトを削除します。

これは、あなたがプレハブにスクリプトを持つことができないことを意味しません。新しいインスタンスがシーンに追加されるとすぐに、Start()メソッドにあるものはすべて実行されます。