• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Spawnare un particle system con il mouse
#1
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
 
Rispondi
#2
Posta tutto il codice che ti dico il problema
 
Rispondi
#3
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);

}

}

}
}
 
Rispondi
#4
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;
 
Rispondi
#5
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
 
Rispondi
#6
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
 
Rispondi
#7
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
 
Rispondi
#8
Allora prova con Instantiate(nome prefab, Input.mousePosition, Quaternion.Identity);
 
Rispondi
#9
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
 
Rispondi
#10
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
 
Rispondi
#11
E se io volessi istanziare il particle system dove clicco con il mouse, come posso fare?
 
Rispondi
#12
Quaternion.identity prova a scriverlo così
 
Rispondi
#13
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
 
Rispondi
#14
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
 
Rispondi
#15
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;
}

}
}
 
Rispondi
#16
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;
 
Rispondi
#17
Ogni volta che butti giù un codice, e poi scopri che ci sono problemi, molto frustrante Big Grin
 
Rispondi
#18
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
 
Rispondi
#19
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
 
Rispondi
#20
(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?
 
Rispondi
#21
(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
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Snapping System ottimizzato. Penca53 11 531 13-08-2017, 01:52 PM
Ultimo messaggio: aandrea1974
  iRDS - Intelligent Race Driver System info mattew1 2 244 10-06-2017, 03:52 PM
Ultimo messaggio: mattew1
  Problema con controllo per vedere se il tocco è nel collider davidecreatoreapp 4 897 17-07-2015, 04:18 PM
Ultimo messaggio: davidecreatoreapp
  Impostare rotazioni,che seguono il mouse. NatakuZ 6 1,061 11-12-2012, 11:20 PM
Ultimo messaggio: NatakuZ

Vai al forum:


Browsing: 1 Ospite(i)