How to retrieve particle collision location in OnParticleCollision

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;*
  •  	myExplosion = Instantiate (prefabExplosion, collisionHitLoc, Quaternion.identity) as GameObject;*
    
  •  	i++;*
    
  •  }*
    
  • }*
    }

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