2016-12-10 9 views
0

Ich arbeite in einem mobilen Spiel mit mehreren Bereichen in der gleichen Szene. Jedes Gebiet hat einen Auslöser und wenn der Spieler es betritt, werden mehrere Objekte erzeugt, um sie aufzunehmen. Wie kann ich ein abgeholtes Objekt deaktivieren? Wenn der Spieler diesen Bereich erneut betritt, taucht dieses Objekt nicht wieder auf?Erzeugtes Objekt taucht nicht wieder auf

Dies ist mein Code:

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

Sie bitte Ihre aktuellen Code veröffentlichen, die nicht funktioniert. – Programmer

+0

Ich habe meinen Code hinzugefügt – Angelsm

+0

Ok. Gut. Bitte erläutern Sie, an welches Objekt das 'InOutZone_ZONAS'-Skript angehängt ist. Der Abholgegenstand oder der Ort, an dem der Spieler entdeckt wurde? – Programmer

Antwort

0

Wie kann ich so ein abgeholtes Objekt zu deaktivieren tun, wenn der Spieler in diesem Bereich tritt wieder in diesem Objekt nicht wieder laichen?

Es gibt viele Möglichkeiten, dies zu tun. Sie können einfach das Gameobject aus dem List entfernen, nachdem Sie es laichen mit 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

Aber das entferne die Liste bevor die Objekte spawnen ... Was ich will, ist das spawn der Objekte, so dass der Spieler etwas davon aufnehmen kann, und wenn er den Bereich verlässt und erneut eintritt, erscheinen die ausgewählten Objekte nicht mehr. Ich nehme an, dass ich jede Art von Prüfung durchführen muss, ob sie abgeholt werden oder nicht. – Angelsm

+0

"Ich nehme an, dass ich jede Art von Prüfung durchführen muss, ob sie ausgewählt sind oder nicht." Das ist eine andere Option. "Aber das entfernen Sie die Liste vor dem Spawn der Objekte" ** Nein **. Es erzeugt es und entfernt es dann aus der "Liste". Das GameObject wird nicht zerstört. Es wird nur aus der "Liste" entfernt, so dass es nicht erneut erzeugt wird. Testen Sie das und lassen Sie mich wissen, wenn ein Problem vorliegt. – Programmer

+0

Entschuldigung! Ich habe deine Lösung nicht überprüft. Es klappt !! Und wie kann ich es nur tun, wenn der Spieler ein konkretes Objekt der Liste aufgenommen hat? – Angelsm

Verwandte Themen