Creare Videogiochi - Game Developer
Destroy - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia)
+--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D)
+--- Discussione: Destroy (/thread-Destroy)



Destroy - jacomucchio - 02-05-2016

Salve. Ho qualche problema con il metodo destroy. Ho creato uno script che alla collisione del player con la testa di un nemico il nemico viene distrutto. Fino a qua tutto ok...ma il problema sorge quando spawna il nemico e quando vado a collidere con la testa lo script sembra non funzionare. Girovagando in rete mi sembra di capire che questo problema sia dovuto al fatto che quando distruggo il nemico si distrugga anche il transform (scusate se potrei aver detto una cavolata ma sono "nuovo") . Potete darmi una mano?


RE: Destroy - jacomucchio - 02-05-2016

Mi compare l'errore : the object of type transform has been destroyed but you are still trying to access it


RE: Destroy - Master Gabriel - 03-05-2016

Potresti postare lo script che hai creato in modo da controllare se sono presenti eventuali errori? Smile


RE: Destroy - jacomucchio - 03-05-2016

certo, appena torno a casa.


RE: Destroy - jacomucchio - 03-05-2016

Intanto se vuoi vedere l'errore é molto simile a quello descritto nel video di RikuThe Fuffs chiamato Destroy parte 2 di 2 dal minuto 7:44


RE: Destroy - jacomucchio - 04-05-2016

Ecco a voi lo script (scusate per i nomi strani) : using UnityEngine;
using System.Collections;

public class vitapermoneta : MonoBehaviour {
GameObject moneta;
GameObject nemico;

// Use this for initialization
void Start () {
moneta = GameObject.FindWithTag ("moneta");
nemico = GameObject.FindWithTag ("nemico");
}

// Update is called once per frame
void Update () {


}
void OnCollisionEnter2D(Collision2D collisione)
{

if(collisione.gameObject.tag == "Player")

Destroy(nemico);
}


}


RE: Destroy - Master Gabriel - 05-05-2016

Questo script a che oggetto è attaccato? Al nemico? Comunque per solo una collisione non ti consiglio di usare il FindWithTag, ma un semplice script attaccato al player. Io ti consiglio qualcosa così:
Codice:
using UnityEngine;
using System.Collections;

public class vitapermoneta : MonoBehaviour {

void OnCollisionEnter2D(Collision2D collisione)
{
if(collisione.gameObject.tag == "Enemy")
{
Destroy(collisione.gameObject);
  }
}
}

Basta che attacchi questo script al player, aggiungi la tag Enemy al nemico e tutto funzionerà Smile
Ovviamente sia il player che il nemico devono avere un collider Wink


RE: Destroy - jacomucchio - 05-05-2016

Grazie mille! Appena posso provo


RE: Destroy - jacomucchio - 05-05-2016

Cè qualcosa che non va ma è colpa mia che non ho spiegato cosa volevo fare . Allora io ho creato il gameobject nemico e ho creato un altro child del nemico chiamato moneta che rappresenterebbe la testa. Quindi quello che volevo fare io è che alla collisione del personaggio con la moneta(testa) viene di strutto il nemico.


RE: Destroy - Master Gabriel - 06-05-2016

Ah, perfetto! Pensavo che moneta fosse un'altro oggetto da raccogliere Tongue
Codice:
using UnityEngine;
using System.Collections;

public class vitapermoneta : MonoBehaviour
{

    public GameObject nemico;

    void Start()
    {
        nemico = GameObject.FindWithTag("Enemy");
    }

    void OnCollisionEnter2D(Collision2D collisione)
    {
        if (collisione.gameObject.tag == "Moneta")
        {
            Destroy(nemico);
        }
    }
}

Dunque, la moneta-testa deve avere la tag Moneta, mentre il nemico la tag Enemy. Ora dovrebbe andare Smile


RE: Destroy - jacomucchio - 06-05-2016

Ok scusa se ti faccio perdere tempo. Chiudo con la solita frase : appena torno a casa provo


RE: Destroy - jacomucchio - 06-05-2016

Ok la mia sfiga non ha limiti. Ho formattato il pc e prima di fare ciò ho salvato la cartella del gioco in chiavetta. Metto la chiavetta e mi accorgo che non funziona. Quindi ho perso buon parte dei file di gioco . Appena rimetto a posto ti faccio sapere.


RE: Destroy - 93sunderland - 07-05-2016

ti consiglio di fare come me: ogni volta che fai grossi cambiamenti dal progetto, questo lo carichi su qualche drive, così mal che vada puoi recuperare il progetto quando vuoi


RE: Destroy - jacomucchio - 08-05-2016

Il problema non si è risolto, mi scuso se vi faccio perdere tempo. Pubblico un video su youtube per farvi capire il problema.


RE: Destroy - Master Gabriel - 08-05-2016

Fermo lì, ho capito il problema. Lo script se noti assegna alla variabile nemico l'oggetto che ha la tag "Enemy"... Ebbene il punto sta che quella funzione è in void Start(), quindi appena il gioco parte la esegue. Ma se il nemico non è ancora stato spawnato lo script non lo trova, e lascia la variabile nemico vuota. Il tutto si risolve semplicemente così:
Sostituisci il pezzo di codice contenente questo:
Codice:
void Start()
{
nemico = GameObject.FindWithTag("Enemy");
}

Con questo:
Codice:
void Update()
{
nemico = GameObject.FindWithTag("Enemy");
}

Se non ho sbagliato qualcosa a scrivere(sono da mobile Tongue) dovrebbe andareSmile


RE: Destroy - jacomucchio - 08-05-2016

Grazie mille funziona! Solo che si è creato un altro problema , ovvero che distrugge i Gameobject spawnati random. Per esempio se colpisco la testa (moneta) di uno si distrugge l'altro . Penso sia dovuto dal fatto che abbiano li stessi tag.


RE: Destroy - Master Gabriel - 09-05-2016

Uhm, prova con questo:
Codice:
using UnityEngine;
using System.Collections;

public class vitapermoneta : MonoBehaviour {

void OnCollisionEnter2D(Collision2D collisione)
{
if(collisione.gameObject.tag == "Moneta")
{
    Destroy(collisione.transform.parent.gameObject);
  }
}
}

Non l'ho provato, quindi non so se è la soluzione


RE: Destroy - jacomucchio - 09-05-2016

Ok provo ma il mio problema é uguale a quello del video di RikuTheFuffs (destroy parte 2) dal minuto 7 . Se hai tempo guardalo.


RE: Destroy - jacomucchio - 10-05-2016

Sembra funzionare ... Domani provo con lo spawner dato che per ora ho improvvisato duplicando i gameobjects nella scena ;D


RE: Destroy - Master Gabriel - 11-05-2016

Ok, fammi sapere Smile Non sono ancora riuscito a guardare il video, appena riesco ci dò un'occhiata