Creare Videogiochi - Game Developer
Impatto proiettile foro. - 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: Impatto proiettile foro. (/thread-Impatto-proiettile-foro)



Impatto proiettile foro. - nostopsocial - 22-04-2015

Ciao ragazzi, ho tirato giu lo script per far si che quando sparo su di un muro compare il prefab del foro. Ecco il codice:

Codice:
using UnityEngine;
using System.Collections;

public class ImpattoForo : MonoBehaviour {
    public GameObject foromuro = null;

    
    
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        
    }
    
    void OnCollisionEnter(Collision collisione)
    {
        if (collisione.gameObject.tag == "muro")
            collisione.gameObject.transform.position += new Vector3 (0, 0F, 0);
        GameObject cloneForomuro = (GameObject)Instantiate(foromuro, collisione.transform.position, Quaternion.identity);
        Destroy (cloneForomuro, 2F);
        
    }
    
}

Il problema è che l'immagine del foro mi compare in orizzontale e dentro all'oggetto stesso. e non sulla sua superficie.

Cosa ho sbagliato? Per favore aiutatemi! Grazie!


RE: Impatto proiettile foro. - Chip - 22-04-2015

Probabilmente il prefab è ruotato diversamente. Prova a correggerlo ruotandolo di 90 rispetto l'asse y


RE: Impatto proiettile foro. - nostopsocial - 22-04-2015

(22-04-2015, 08:01 PM)Chip Ha scritto: Probabilmente il prefab è ruotato diversamente. Prova a correggerlo ruotandolo di 90 rispetto l'asse y

Ci provo, invece per farlo comparire sulla superficie?


RE: Impatto proiettile foro. - Chip - 22-04-2015

ora sono su cellulare non posso scrivere tanto ma del punto di collisione dovresti avere la proprietà "normal" che rappresenta la freccietta di valore 1 che spunta dalla superficie dell'oggetto e con cui puoi allineare il foro (si chiamano decal) . Il vettore moltiplicalo per 0,001 e sei sicuro che stia "sopra" l'oggetto colpito


RE: Impatto proiettile foro. - nostopsocial - 22-04-2015

(22-04-2015, 09:23 PM)Chip Ha scritto: ora sono su cellulare non posso scrivere tanto ma del punto di collisione dovresti avere la proprietà "normal" che rappresenta la freccietta di valore 1 che spunta dalla superficie dell'oggetto e con cui puoi allineare il foro (si chiamano decal) . Il vettore moltiplicalo per 0,001 e sei sicuro che stia "sopra" l'oggetto colpito

ma dove dovrei metterla questa proprietà "normal"????
NEllo script oppure in unity?


RE: Impatto proiettile foro. - Chip - 22-04-2015

http://docs.unity3d.com/ScriptReference/Collision-contacts.html
Ogni collisione ha un contactpoint e ogni contactpoint ha una sua normal .

Nell'istanziate dovresti mettere al posto della collisione.transform.position proprio la normale della collisione leggermente rialzata. Poi alla fine metti il quaterion che ti gira l'oggetto verso la normale che ti ripeto è rivolta in "fuori".

Instantiate(foromuro, collisione.point + (collisione.normal * 0.0001), Quaternion.LookRotaion(collisione.normal));


https://www.youtube.com/watch?v=QSIC_KB4hOQ
Qui a 4:34 si vede, lui usa il raycast per la collisione ma la sostanza non cambia è sempre un punto di collisione.


RE: Impatto proiettile foro. - nostopsocial - 23-04-2015

(22-04-2015, 11:17 PM)Chip Ha scritto: Instantiate(foromuro, collisione.point + (collisione.normal * 0.0001), Quaternion.LookRotaion(collisione.normal));

Ho inserito il pezzo di script ch emi hai dato, quindi il codice è cosi:

Codice:
using UnityEngine;
using System.Collections;

public class ImpattoForo : MonoBehaviour {
    public GameObject foromuro = null;

    
    
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        
    }
    
    void OnCollisionEnter(Collision collisione)
    {
        if (collisione.gameObject.tag == "muro")
            collisione.gameObject.transform.position += new Vector3 (0, 0F, 0);
        GameObject cloneForomuro = (GameObject)Instantiate(foromuro, collisione.point + (collisione.normal * 0.0001), Quaternion.LookRotaion(collisione.normal));
        Destroy (cloneForomuro, 2F);
        
    }
    
}

provato ma mi da persino errore in partenza! (ti allego l'immagine degli errori)
[Immagine: 9zpw5d.png]

Grazie! Aspetto una risposta!


RE: Impatto proiettile foro. - Chip - 23-04-2015

Ok appena arrivo a casa vediamo.. a vedo solo che "collisione" non è quello che pensavo fosse Big Grin


RE: Impatto proiettile foro. - nostopsocial - 23-04-2015

(23-04-2015, 05:34 PM)Chip Ha scritto: Ok appena arrivo a casa vediamo.. a vedo solo che "collisione" non è quello che pensavo fosse Big Grin

aspetto tue notizie! gentilissimo!


RE: Impatto proiettile foro. - Chip - 23-04-2015

Come debug così riesci a vedere la freccia verde dove colpisce?

Codice:
void OnCollisionEnter(Collision collisione)
    {
        if (collisione.gameObject.tag == "muro")
        {// collisione con muro
            ContactPoint PuntoCollisione = collisione.contacts[0]; //riferimento alla collisione
            Quaternion ruota = Quaternion.FromToRotation(Vector3.up, PuntoCollisione.normal); //ruoto
            Vector3 pos = PuntoCollisione.point; //coordinate di collisione
            Debug.DrawRay(pos, collisione.normal, Color.green);
            
        }
    }



RE: Impatto proiettile foro. - nostopsocial - 24-04-2015

(23-04-2015, 09:05 PM)Chip Ha scritto: Come debug così riesci a vedere la freccia verde dove colpisce?

Codice:
void OnCollisionEnter(Collision collisione)
    {
        if (collisione.gameObject.tag == "muro")
        {// collisione con muro
            ContactPoint PuntoCollisione = collisione.contacts[0]; //riferimento alla collisione
            Quaternion ruota = Quaternion.FromToRotation(Vector3.up, PuntoCollisione.normal); //ruoto
            Vector3 pos = PuntoCollisione.point; //coordinate di collisione
            Debug.DrawRay(pos, collisione.normal, Color.green);
            
        }
    }

se metto questo al posto di quello vecchio mi dice parsing error e non parte! Non ci sto capendo niente! ahah Tieni conto che io non sto usando i raycast eh!! uso proprio una sfera che usa la gravità come proiettile...forse sbaglio?


RE: Impatto proiettile foro. - Chip - 24-04-2015

Considera che sto scrivendo pezzetti di codice :-D Restiamo al tuo originale. il prefab del foro ha l'origine degli assi nel mezzo? Xche dicevi che il difetto era solo che compariva in mezzo..quindi è da ruotare e basta e casomai da alzare leggermente