2016-12-10 13 views
0

同じシーンに複数の領域があるモバイルゲームで作業しています。各エリアにはトリガーがあり、プレイヤーがそれを入力すると、いくつかのオブジェクトがスポークされてピックアップされます。ピックアップされたオブジェクトを非アクティブにするにはどうすればいいですか?プレイヤーが再びこのエリアに入ると、このオブジェクトは再び生成されません。スポーンされたオブジェクトが再び生成されない

これは私のコードです:

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

public class InOutZone_ZONAS: MonoBehaviour { 

//Objetos 
[Header("Objetos")] 
public List<GameObject> spawnPositions; 
public List<GameObject> spawnObjects; 
private GameObject[] despawnObjects; 


void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.tag == "Player") 
    { 
     SpawnObjectsZ(); 
    } 
} 
void OnTriggerExit(Collider other) 
{ 
    if (other.gameObject.tag == "Player") 
    { 
     GameObject[] despawnObjects = GameObject.FindGameObjectsWithTag("ItemZona"); 
     for (int i = 0; i < despawnObjects.Length; i++) 
     { 
      PoolManager.Pools ["Objetos"].Despawn (despawnObjects[i].transform); 
      Debug.Log("Despawnea Objetos"); 
     } 
    } 
} 
void SpawnObjectsZ() 
{ 
    foreach (GameObject spawnPosition in spawnPositions) { 
     int selection = Random.Range (0, spawnObjects.Count); 
     PoolManager.Pools ["Objetos"].Spawn (spawnObjects [selection], spawnPosition.transform.position, spawnPosition.transform.rotation); 
    } 
} 
} 
+0

でそれを起動した後、あなたは、単にListからゲームオブジェクトを削除することができます。 – Programmer

+0

コード – Angelsm

+0

を追加しました。良い。 'InOutZone_ZONAS'スクリプトがどのオブジェクトにアタッチされているのかを説明してください。ピックアップアイテムまたはプレーヤーが検出された場所? – Programmer

答えて

0

にはどうすればプレイヤー は再びこのオブジェクトが再び出現していない、この領域に入ったときに拾ったオブジェクトを無効にできますか?

これを実行する方法は多数あります。あなたの現在のコードは動作しません投稿してくださいspawnObjects.Remove(spawnObjects[selection]);

public class Playervitals : MonoBehaviour 
{ 
    //Objetos 
    [Header("Objetos")] 
    public List<GameObject> spawnPositions; 
    public List<GameObject> spawnObjects; 
    private GameObject[] despawnObjects; 


    void OnTriggerEnter(Collider other) 
    { 
     if (other.gameObject.tag == "Player") 
     { 
      SpawnObjectsZ(); 
     } 
    } 
    void OnTriggerExit(Collider other) 
    { 
     if (other.gameObject.tag == "Player") 
     { 
      GameObject[] despawnObjects = GameObject.FindGameObjectsWithTag("ItemZona"); 
      for (int i = 0; i < despawnObjects.Length; i++) 
      { 
       PoolManager.Pools["Objetos"].Despawn(despawnObjects[i].transform); 
       Debug.Log("Despawnea Objetos"); 
      } 
     } 
    } 

    void SpawnObjectsZ() 
    { 
     for (int i = 0; i < spawnPositions.Count; i++) 
     { 
      GameObject spawnPosition = spawnPositions[i]; 
      int selection = Random.Range(0, spawnObjects.Count); 
      PoolManager.Pools["Objetos"].Spawn(spawnObjects[selection], spawnPosition.transform.position, spawnPosition.transform.rotation); 
      spawnObjects.Remove(spawnObjects[selection]); 
     } 
    } 
} 
+0

しかし、これはオブジェクトを生成する前にリストを削除します...私が望むのは、プレイヤーはこのオブジェクトのいくつかを拾うことができます。そして、彼が領域を出て再び入ると、選択されたオブジェクトはもはや生成されません。私は彼らが選抜されたかどうか、私はどのような種類のチェックを実装する必要があると思います。 – Angelsm

+0

"選択されているかどうかをチェックする必要があります。これは別のオプションです。 "しかし、これはオブジェクトを生成する前にリストを削除する" ** No **。 'List'から削除します。 GameObjectは破壊されません。それは 'List'から削除され、再度生成されることはありません。問題があるかどうかをテストして教えてください。 – Programmer

+0

申し訳ありません私はあなたの解決策をチェックしていませんでした。できます !!そして、プレイヤーがリストの具体的なオブジェクトを拾った場合にのみ、私はそれをどうやって行うことができますか? – Angelsm

関連する問題