29-09-2017, 03:03 PM
(This post was last modified: 29-09-2017, 03:06 PM by josemendez.)
(29-09-2017, 02:45 PM)Kalidor Wrote: There is the same problem with this solution (with your new script).
Hi Kalidor,
I tested it with this code in a variety of situations, works as intended. Make sure that you set the particle's life to 0 instead of calling KillParticle().
Code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Obi;
[RequireComponent(typeof(ObiSolver))]
public class CollisionEventHandler : MonoBehaviour {
ObiSolver solver;
public Collider killer;
void Awake(){
solver = GetComponent<Obi.ObiSolver>();
}
void OnEnable () {
solver.OnCollision += Solver_OnCollision;
}
void OnDisable(){
solver.OnCollision -= Solver_OnCollision;
}
void Solver_OnCollision (object sender, Obi.ObiSolver.ObiCollisionEventArgs e)
{
for(int i = 0; i < e.contacts.Length; ++i)
{
if (e.contacts[i].distance < 0.001f)
{
Component collider;
if (ObiCollider.idToCollider.TryGetValue(e.contacts[i].other,out collider)){
if (collider == killer){
ObiSolver.ParticleInActor pa = solver.particleToActor[e.contacts[i].particle];
ObiEmitter emitter = pa.actor as ObiEmitter;
if (emitter != null)
emitter.life[pa.indexInActor] = 0;
}
}
}
}
}
}