2017-07-25 9 views
0

私は現在ゲームプロトタイプを作っていますが、このゲームでは が「星」と呼ばれるいくつかのゲームオブジェクトを生成する必要があります。 のインスタンス化はすべて役に立ちますが、それを削除しようとすると多くの場合 私はすべてのインスタンス化された GameObjectsをリストに入れて、 がインスタンス化されたときに最後のオブジェクトを削除しようとしています。コードからわかるように、3 オブジェクトが生成されると、スクリプトは最初から を削除し、同時に新しいものを生成する必要があります。GameObjectはなぜリストに追加されませんか?

ここで問題は、私はここで何が欠けているのか分からず、コードが機能せず、理由を知らないということです。私を助けてください。ありがとうございました!ここで

はコードです:

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

public class SpawnStar : MonoBehaviour { 

    public float addedSpeed = -200f; 

    private GameObject spawned; 
    private float randomX; 
    public GameObject starToSpawn; 
    private List<GameObject> activeGO; 


    void Start() 
    { 
     activeGO = new List<GameObject>(); 
     Invoke ("InstantiateStar", 2f); 
    } 

    // Update is called once per frame 
    void FixedUpdate() 
    { 
     GetComponent<Rigidbody>().AddForce(new Vector3(0f, addedSpeed, 0f)); 
    } 

    void InstantiateStar() 
    { 
     randomX = Random.Range (-3f, 3f); 
     GameObject GO; 
     GO = Instantiate (starToSpawn, new Vector3(randomX, 5f, 0f), transform.rotation) as GameObject; 
     activeGO.Add (GO); 
     if (activeGO[0].transform.position.y < -2f) 
     { 
      DeleteActiveGO(); 
     } 
    } 
    void DeleteActiveGO() 
    { 
     Destroy (activeGO [0]); 
     activeGO.RemoveAt (0); 
    } 
} 

私が更新に戻っています。問題は、私は1つのスクリプトで2つのことをしようとしていたということでした...短編小説:問題を解決するために、シーン内に空のオブジェクトを作成し、スクリプトを2つの分離したスクリプトで分割しました。オブジェクトを産んでいるオブジェクトを作成するには、オブジェクトを生成するオブジェクトにオブジェクトを移動させるスクリプトを配置し、空のGameObjectの他のスクリプトは「星」を生成し、魅力的に機能します。 すべてのあなたの答えをありがとう!ここ

最終スクリプトは、次のとおりです。

産卵スクリプト:

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

public class SpawnStars : MonoBehaviour { 

    public GameObject[] starsToSpawn; 

    private List<GameObject> spawnedStars; 

    private float randomX; 

    void Start() 
    { 
     spawnedStars = new List<GameObject>(); 
     InvokeRepeating ("SpawnStar", 0f, 3f); 
    } 
    void SpawnStar() 
    { 
     randomX = Random.Range (-3, 3); 
     GameObject GO; 
     GO = Instantiate (starsToSpawn[0], new Vector3 (randomX, 5f, 0f), transform.rotation); 

     spawnedStars.Add (GO); 

     if (spawnedStars.Count > 2) 
     { 
      Destroy (spawnedStars [0]); 
      spawnedStars.RemoveAt (0); 
     } 
    } 
} 

スクリプトの移動:

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

public class MoveStar : MonoBehaviour { 

    public float acceleration = -5f; 

    void FixedUpdate() 
    { 
     GetComponent<Rigidbody>().AddForce(new Vector3(0f, acceleration,0f)); 
    } 
} 
+3

より具体的にお聞かせください。 「コードは機能しません」というのはむしろあいまいです。 – travisjayday

+1

コード内で、3つのオブジェクトが生成されたかどうかチェックしますか?表示される唯一のコードは、y座標が範囲外の場合に星を削除します。また、 'starToSpawn'は何に設定されていますか?あなたの 'FixedUpdate'はスポーンされた星ではなく、' SpawnStar'ゲームオブジェクトを動かしているように見えるので、星のどれも削除されません。あなたの星は実際に動いていますか? –

+0

Yhea、私はいくつかの間違いを犯しました、スクリプトは削除したいオブジェクトに添付されています... – Noobie

答えて

0

あなたのコードInvoke ("InstantiateStar", 2f);は一度だけ呼び出します。

あなたが生成するゲームオブジェクトにアタッチする必要があるように見えるコードGetComponent<Rigidbody>().AddForce(new Vector3(0f, addedSpeed, 0f));InvokeRepeating("InstantiateStar",2f,2f);

に変更することができます。

削除条件にも注意してください。

幸運。

関連する問題