15-11-2018, 09:40 PM
(15-11-2018, 08:43 PM)Tuna.Y Wrote: Hi,
It was a standard Box Collider 2D. I have an object which includes obi solver, Collider script and box collider 2d.
Works for me. Make sure you're indexing the correct collider map in the for loop, ie ObiCollider2D instead of ObiCollider. I'm pasting the 2D version just in case:
Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Obi;
[RequireComponent(typeof(ObiSolver))]
public class CollisionCounter : MonoBehaviour {
ObiSolver solver;
public int counter = 0;
public Collider2D targetCollider = null;
Obi.ObiSolver.ObiCollisionEventArgs frame;
HashSet<int> particles = new HashSet<int>();
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)
{
HashSet<int> currentParticles = new HashSet<int>();
for(int i = 0; i < e.contacts.Count; ++i)
{
if (e.contacts.Data[i].distance < 0.001f)
{
Component collider;
if (ObiCollider2D.idToCollider.TryGetValue(e.contacts.Data[i].other,out collider)){
if (collider == targetCollider)
currentParticles.Add(e.contacts.Data[i].particle);
}
}
}
particles.ExceptWith(currentParticles);
counter += particles.Count;
particles = currentParticles;Debug.Log(counter);
}
}