Creare Videogiochi - Game Developer
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 Big Grin


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 Big Grin


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.rotation
Riguardante 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:
(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.rotation
Riguardante 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?
La W dovrebbe essere la parte reale mentre la x,y,z sono le parti immaginare del quaternione