Spawnare un particle system con il mouse - 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: Spawnare un particle system con il mouse (/thread-Spawnare-un-particle-system-con-il-mouse) |
Spawnare un particle system con il mouse - samuele55598@gmail.com - 15-06-2015 Salve ho questo script: if (Input.GetButtonDown("Fire1")) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray)){ Instantiate(particle, transform.position, transform.rotation); } } ma mi da questo errore: NullReferenceException: Object reference not set to an instance of an object Movement.Update () (at Assets/My Assets/Scripts/Movement.cs:40) sulla riga della variabile ray => Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); dov'è il problema, io al massimo me lo sarei aspettato dall'istruzione instantiate ma non da questa, tra l'altro non capisco il senso dell'errore, insomma quella riga dovrebbe creare un raycast dalla main camera alle coordinate in pixel del mouse sullo schermo, forse l'errore è che dovrebbe essere di classe raycast e non ray, giusto? Beh devo riuscire a far spawnare un particle system che ho come prefab quando clicco il mouse dove punta il raycast che va dalla main camera al cursore, se non sono stato chiaro nell'esporre il problema fatemelo sapere, grazie per l'attenzione RE: Spawnare un particle system con il mouse - WilSoft90 - 16-06-2015 Posta tutto il codice che ti dico il problema RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 16-06-2015 Ecco l'intero script: using UnityEngine; using System.Collections; public class Movement : MonoBehaviour { public float moveSpeed; public GameObject particle; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.W)) { transform.Translate(Vector3.forward * Time.deltaTime*moveSpeed); Ray ras = new Ray(transform.position,Vector3.forward); Debug.DrawRay(ras.origin, ras.direction * 10, Color.yellow); } if (Input.GetKey(KeyCode.S)) { transform.Translate(-Vector3.forward * Time.deltaTime*moveSpeed); } if (Input.GetKey(KeyCode.A)) { transform.Translate(-Vector3.right * Time.deltaTime*moveSpeed); } if (Input.GetKey(KeyCode.D)) { transform.Translate(Vector3.right * Time.deltaTime*moveSpeed); } if (Input.GetButtonDown("Fire1")) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray)){ Instantiate(particle, transform.position, transform.rotation); } } } } RE: Spawnare un particle system con il mouse - WilSoft90 - 16-06-2015 1)hai selezionato il particle nel inspector? 2)non capisco a cosa ti serva il raycast visto che non rilevi se collide con un oggetto 3)prova con: Instatiate (tuoOggetto,laPosizione,laRotazione)as Gameobject; RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 16-06-2015 Voglio che venga istanziato dove clicco con il mouse, ma per far capire anche a unity dove deve spawnare gli devo dare la 3à dimensione della posizione di dove voglio che spawni quindi ci vuole un raycast che prenda come x e y le coordinate del mouse sullo schermo e che venga puntato dove clicca il mouse da qui la 3à dimensione, e si ho selezionato il particle RE: Spawnare un particle system con il mouse - WilSoft90 - 16-06-2015 Instantiate(particle, transform.position, transform.rotation); queste posizioni non sono le posizioni dove clicchi con il mouse ma son le posizioni e rotazione del gameobject a cui hai attaccato lo script RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 16-06-2015 veramente dovrebbe spawnarlo come prefab non come gameobject ovvero io alla variabile del game object da spawnare ho dato in pasto un prefab di un particle system, se ci metto transform.position , rotation visto che questo script è attaccato al player , il particle system si spawnerebbe "dentro" il player RE: Spawnare un particle system con il mouse - Blackg96 - 16-06-2015 Allora prova con Instantiate(nome prefab, Input.mousePosition, Quaternion.Identity); RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 16-06-2015 Si ma comunque l'errore non è li, ma ci provo Mi da errore su Quaternion, comunque ho provato con: if (Input.GetButtonDown("Fire1")) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Instantiate(particle, transform.position, transform.rotation); } e funziona, il particle system si spawna dove sta il player, e va bene ora se io volessi che si spawnasse dove viene cliccato il mouse, (come rotazione per ora ci lascio quella del player) come posso trasformare un raycast in un Vector3 per poterlo inserire in questo metodo RE: Spawnare un particle system con il mouse - WilSoft90 - 16-06-2015 Un prefab e sempre un gameobject...togli quel raycast che non ti serve a niente usato cosi(non lo stai utillizzando) nel if del tasto fire metti direttamente l Instatiate ()as Gameobject; Allora ti ripeto che un raycast non ti serve a meno che non fuoi creare il particle quando colpisci un oggetto...se vuoi che avvenga questo basta aggiungere un raycast hit; e con hit.collider puoi usarlo per conoscere il punto in cui tocca il ray RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 16-06-2015 E se io volessi istanziare il particle system dove clicco con il mouse, come posso fare? RE: Spawnare un particle system con il mouse - Blackg96 - 17-06-2015 Quaternion.identity prova a scriverlo così RE: Spawnare un particle system con il mouse - WilSoft90 - 17-06-2015 Raycasthit hit; If (physics.raycast (ray,out hit ){ Instantiate (particle,hit.point,laRotaziineCheVuoi)as Gameobject; } questo ti instanzia il particle nel punto in cui colpisce il ray che nel tuo caso hai usato il mouse non ricordo se e hit.point oppure hit.collider.point EDIT ma dimmi una cosa ti serve per caso per simulare la fiammata di un arma?se si ti conviene creare on oggetto vuoto lo rendi figlio del arma e lo posizioni alla fine della canna e poi con il tasto fire spawni il particle nella posizione di quel oggetto vuoto RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 17-06-2015 No no semplicemente voglio, un pò come fa minecraft di poter spawnare oggeti a mio piacimento nella scena dove clicco con il mouse, con l'unica differenza che minecraft spawna a quadrati mentre qui spawni davvero dove vuoi ecco tutto RE: Spawnare un particle system con il mouse - Blackg96 - 17-06-2015 Ahhh allora ho capito bhè allora devi fare con i raycast, posizione un oggetto vuoto che sarà l'oggetto da cui partirà il raggio e dopo scrivi nel codice Transform raySpawn; //Questo è l'oggetto vuoto che hai creato prima void Update() { if(Input.GetKeyDown(KeyCode.Mouse0)) { RaycastHit hit; if(Physics.Raycast(raySpawn.position, raySpawn.forward, out hit)) { GameObject go = Instantiate(nome variabile del prefab, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal)) as GameObject; } } } RE: Spawnare un particle system con il mouse - WilSoft90 - 17-06-2015 Comunque l errore era nel instantiate cioe non era associato ad un gameobject quando instanzi un oggetto devi fare (come scritto sopra da black) Gameobject oggetto = instantiate (blablabla)as Gameobject; RE: Spawnare un particle system con il mouse - AltairRevenge - 17-06-2015 Ogni volta che butti giù un codice, e poi scopri che ci sono problemi, molto frustrante RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 18-06-2015 Con quello di black, non c'è errore ma.....(a meno che non mi sia sbagliato ad impostare qualcosa) non fa ciò che voglio xD. La colpa è mia che non mi sono spiegato bene, ma per farla finita una volta per tutte ho capito come fare, datemi solo delle delucidazioni in italiano sulla classe Quaternion che l'unica cosa che ne ho capito a riguardo è che riguarda le rotazioni e basta RE: Spawnare un particle system con il mouse - Blackg96 - 18-06-2015 Infatti non c'è tanto altro da capire, il Vector3 contiene 3 variabili float : X, Y, Z che riguardano la maggior parte dei casi la posizione, infatti il transform.position è un Vector3, mentre il Quaternion : X, Y, Z, W riguarda la rotazione quindi transform.rotation RE: Spawnare un particle system con il mouse - samuele55598@gmail.com - 21-06-2015 (18-06-2015, 01:06 PM)Blackg96 Ha scritto: Infatti non c'è tanto altro da capire, il Vector3 contiene 3 variabili float : X, Y, Z che riguardano la maggior parte dei casi la posizione, infatti il transform.position è un Vector3, mentre il Quaternion : X, Y, Z, W riguarda la rotazione quindi transform.rotationRiguardante il Quaternion(X,Y,Z,W) X è la rotazione in gradi sull'asse x, Y è la rotazione sull'asse y ed così anche per z, mentre W cos'è l'accelerazione giusto? RE: Spawnare un particle system con il mouse - Lorenz - 26-06-2015 (21-06-2015, 12:17 PM)samuele55598@gmail.com Ha scritto:La W dovrebbe essere la parte reale mentre la x,y,z sono le parti immaginare del quaternione(18-06-2015, 01:06 PM)Blackg96 Ha scritto: Infatti non c'è tanto altro da capire, il Vector3 contiene 3 variabili float : X, Y, Z che riguardano la maggior parte dei casi la posizione, infatti il transform.position è un Vector3, mentre il Quaternion : X, Y, Z, W riguarda la rotazione quindi transform.rotationRiguardante il Quaternion(X,Y,Z,W) X è la rotazione in gradi sull'asse x, Y è la rotazione sull'asse y ed così anche per z, mentre W cos'è l'accelerazione giusto? |