Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

De_Struktor

unregistriert

1

27.12.2013, 15:11

Unity Problem - Prefabklone löschen nicht Original!

Hallo Liebe Community,

ich arbeite zur Zeit an einem kleinen Unity 2D Game.Zur Laufzeit erzeuge ich eine Menge an Prefabklone. Also 100 z.B ich möchte, das sobald ein Prefab ausser Kamerasicht ist, das dieser Klon zerstört wird, aber nicht das originalprefab. Mit Destroy zerstört er immer das Original. Ich wäre euch sehr dankbar, wenn ihr mir ein paar Lösungsvorschläge machen könntet.

P.s Ich wollte es soinst mit einer generischen Liste versuchen, wollte aber erstmal schauen, ob es auch ein tikken anders geht.
(Und die Prefabs sind nur pakte, die von oben heraus runterfallen!)

Grüße

De_Struktor

P.s Falscher Titel, tut mir leid, das war noch von vorher fälschlich rein kopiert!!! Ich bitte um entschuldigiung!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »De_Struktor« (27.12.2013, 15:20)


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

27.12.2013, 15:19

Den Titel kannst du auch bearbeiten...

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

3

27.12.2013, 15:44

Zeig mal ein wenig Code.

Dir ist bewusst, dass du die Objekte löschen musst, worauf dir die Instantiate Methode Referenzen zurück gibt? Object.Instantiate

C#-Quelltext

1
2
3
4
GameObject clone = Instantiate(prefab) as GameObject;

//löscht den clone
Destroy(clone);
Liebe Grüße,
René

De_Struktor

unregistriert

4

27.12.2013, 23:11

Ich möchte ja eigentlich nur abfragen, wenn das Prefab aus der Kamerasicht ist, dann lösche es.

Das Löschen habe ich hinbekommen, jetzt weiß ich nur nicht, wie ich die Main Camera höhe abfrage.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

27.12.2013, 23:15

Camera.transform.position.y?!

De_Struktor

unregistriert

6

27.12.2013, 23:22

Ok. Ich möchte ja, das das fallende Prefab erst dann gelöscht wird, wenn die Kamera es nicht mehr sieht.

Ich habe den folgenden Code. (Ich weiß Blödsinn!)

C#-Quelltext

1
2
3
4
5
6
if (item.transform.position.y >= camera.transform.position.y)
{
    // wenn prefab aus dem bild ist, dann lösche!
    Debug.Log ("Es klappt");
    Destroy (item);
}


Also Pseudocode:

Aber

if (fallendes Prefab aus Kamerasicht ist)
Destroy(...);


item.transform.position.y gibt mir nicht die Bewegung an, also nicht die zurückgelegte Position.

Wie mache ich das, sobald diese Y - Position erreicht ist vom Prefab?

habe da iwie nen Denkfehler!

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

7

27.12.2013, 23:52

Jedes MonoBehaviour bietet die Methode OnBecameInvisible: (MonoBehaviour.OnBecameInvisible) Diese wird aufgerufen, sobald das Objekt mit einem Renderer das Kamera-Frustum verlässt.

C#-Quelltext

1
2
3
4
5
public class DestroyFallingPackage : MonoBehaviour {
    void OnBecameInvisible() {
        Destroy(gameObject);
    }
}
Liebe Grüße,
René

De_Struktor

unregistriert

8

28.12.2013, 00:05

Das verstehe ich leider nicht. Ich benutze die Methode, aber erst wenn ich auf Debugging beeden mache, wird mir eine Meldung angezeigt, die nur kuckt, ob die Funktion ausgeführt
wird. Der Löscht garnix! :(

Also Synonym zur Meldung, ist das Löschen zu Verstehen. Also ich würde dann logischerweise dann das Meldungsfenster in Destroy() tauschen.
Aber danke trotzdem für deine Hilfe :)

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

9

28.12.2013, 00:08

Zeig mir mal deinen Code, dann kann ich dir besser helfen.
Liebe Grüße,
René

De_Struktor

unregistriert

10

28.12.2013, 00:11

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void OnBecameInvisible()
    {
             foreach(var item in gifts)
            {
                  Destroy(item);
             }
    }
    void RemoveItem()
    {
        foreach (var item in gifts) 
        {
            if (item.rigidbody.velocity.y <= camera.transform.position.y)
            {
                // wenn prefab aus dem bild ist, dann lösche!
                Debug.Log ("Es klappt");
                Destroy (item);
            }
        }
    }

Werbeanzeige