I’m trying to instantiate an explosion prefab at the location of a particle hit. (the particle system is currently shooting a single particle)
Currently I have this:
void OnParticleCollision(GameObject other) {
myExplosion = Instantiate (prefabExplosion) as GameObject;
}
Which instances the explosion at 0,0,0
rather than at the collision location.
I figure I need to do something like this, but it’s 2AM now, and I just ain’t gettin it right:
Particle[] particles = other.collider.particleSystem.GetParticles;
then pull the position from particles[1] - but it’s bugs galore… Any takers?
Thanks!
This worked:
using UnityEngine;
using System.Collections;
public class OnParticleCollisionAlt : MonoBehaviour
{
public GameObject myExplosion;
public GameObject prefabExplosion;
private ParticleSystem.CollisionEvent[] collisionEvents = new ParticleSystem.CollisionEvent[16];
void OnParticleCollision ( GameObject other )
{
int safeLength = particleSystem.safeCollisionEventSize;
if (collisionEvents.Length < safeLength)
collisionEvents = new ParticleSystem.CollisionEvent[safeLength];
int numCollisionEvents = particleSystem.GetCollisionEvents(other, collisionEvents);
int i = 0;
while (i < numCollisionEvents)
{
Vector3 collisionHitLoc = collisionEvents*.intersection;*
Here is a recent example in the unity documentation
![OnParticleCollision ParticleCollisionEvent particle system events][1]
using UnityEngine;
using System.Collections.Generic;
[RequireComponent( typeof(ParticleSystem) )]
public class ParticleSystemCollisionTester : MonoBehaviour
{
public List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
ParticleSystem _particleSystem;
void Awake ()
{
_particleSystem = GetComponent<ParticleSystem>();
if( _particleSystem.collision.enabled==false )
Debug.LogError("ParticleSystem has \"Collision\" module disabled");
if( _particleSystem.collision.sendCollisionMessages==false )
Debug.LogError("ParticleSystem has \"Collision\"/\"Send Collision Messages\" disabled");
}
void OnParticleCollision ( GameObject other )
{
int numCollisionEvents = _particleSystem.GetCollisionEvents( other , collisionEvents );
for( int i=0 ; i<numCollisionEvents ; i++ )
{
ParticleCollisionEvent collision = collisionEvents*;*
Vector3 point = collision.intersection;
Vector3 velocity = collision.velocity;
Vector3 normal = collision.normal;
Debug.DrawLine( point , point + normal , Color.white , 1f );
Debug.DrawLine( point , point + velocity , Color.yellow , 1f );
}
}
}
[1]: https://i.imgur.com/940mhij.gif
Hello,
does anybody know on how to get the UV / texture coordinate for ParticleCollisionEvent? I need to draw into a texture, based on the intersection point. This is working fine for a plane, as XY map 1:1 to UV but it does not work for more complex meshes.
Tobias