- Home /
Question by
RavenRain44 · Jul 23, 2020 at 02:07 PM ·
instantiateraycastparticles
Why cant this work
So i want a particle to spawn at the ray cast point but it won't work.
public GameObject Mouse;
public GameObject Particle;
void Update()
{
RaycastHit hit;
if (Physics.Raycast(origin: camera.position, direction: camera.forward, out hit))
{
Point = hit.point;
if (Input.GetMouseButtonDown(0))
{
Instantiate(Particle, Point.position, Point.rotation);
}
}
}
Comment
"it won't work" is a bad way to describe a problem. Be specific here. What does not work? what happens exactly? Are there any errors?
Is your raycast even hitting anything? It has to hit like a wall or something to detect a collision. If your raycast just keeps going to the skybox, it wont know what 'point' is.
Answer by Llama_w_2Ls · Jul 23, 2020 at 02:49 PM
Heres my code for how I destroy an instantiated object whenever I click on it, and a particle system effect plays at that point:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DestroyCubes : MonoBehaviour
{
public Camera fpsCam;
public Transform Parent;
public float distance;
Vector3 newPos;
public Transform Explosion;
public ParticleSystem plode;
public Text Score;
public float score;
public AudioClip pop;
// Start is called before the first frame update
void Start()
{
newPos = Explosion.position;
this.gameObject.AddComponent<AudioSource>();
this.GetComponent<AudioSource>().clip = pop;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0)) // if click detected and game is not paused
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Create ray that points to mouse click
Vector3 Ray = ray.direction;
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, Ray, out hit))
{
if (hit.collider != null) // if i hit something
{
distance = hit.distance / 150; //get distance from camera
if (hit.collider.tag != "Borders") //if i hit anything except my game borders
{
hit.collider.transform.SetParent(Parent); //parent the object to an empty gameobject called 'Parent'
}
newPos = hit.point; //set transform of explosion particle system to click
foreach (Transform child in Parent) //if a child is detected in the empty gameobject 'Parent'
{
Destroy(child.gameObject); //destroy the child object
score += 10 + distance; //add ten points + extra for longer distance blocks
Score.text = score.ToString("0"); //set text to score
Explosion.position = newPos; //set explosion position to object destroyed/mouseclick position
plode.Play(); //play particle system effect
//this.GetComponent<AudioSource>().Play();//play pop sound
AudioSource.PlayClipAtPoint(pop, fpsCam.transform.position, 0f);
}
}
}
}
}
}
Sorry, theres a lot of extra code for calculating points for a score system and playing sounds etc. Just take what you need