An interface that when implemented, can be called as a target by PhysicsWorld.SendTriggerCallbacks.
A trigger shape doesn't collide with other shapes. Other shapes pass through it instead.
Unity calls OnTriggerBegin2D and OnTriggerEnd2D on the main thread after the simulation finishes.
For a worked example, refer to the PhysicsShapeTriggerCallback example in the Physics Core 2D examples repository
Additional resources: PhysicsWorld.SendTriggerCallbacks, IContactCallback
using UnityEngine; using Unity.U2D.Physics;
// Add the PhysicsCallbacks.ITriggerCallback interface. public class DetectTriggerOverlap : MonoBehaviour, PhysicsCallbacks.ITriggerCallback { void Start() { PhysicsWorld world = PhysicsWorld.defaultWorld;
// Create a trigger shape that reports overlaps instead of colliding. PhysicsBody triggerBody = world.CreateBody(new PhysicsBodyDefinition { position = new Vector2(0.5f, 8f), type = PhysicsBody.BodyType.Dynamic }); PhysicsShape triggerShape = triggerBody.CreateShape(CircleGeometry.defaultGeometry, new PhysicsShapeDefinition { isTrigger = true, triggerEvents = true }); triggerShape.callbackTarget = this;
// Create a static shape for the trigger to overlap. PhysicsBody staticBody = world.CreateBody(new PhysicsBodyDefinition { position = new Vector2(0f, 0f), type = PhysicsBody.BodyType.Static }); staticBody.CreateShape(new CircleGeometry { radius = 3f }, new PhysicsShapeDefinition { triggerEvents = true }); }
// Log when the trigger starts overlapping another shape. public void OnTriggerBegin2D(PhysicsEvents.TriggerBeginEvent beginEvent) { Debug.Log("Trigger overlap started."); }
// Log when the trigger stops overlapping another shape. public void OnTriggerEnd2D(PhysicsEvents.TriggerEndEvent endEvent) { Debug.Log("Trigger overlap ended."); } }
| Method | Description |
|---|---|
| OnTriggerBegin2D | Called when a TriggerBeginEvent for the object occurs. This will always be called on the main-thread after the simulation has finished. |
| OnTriggerEnd2D | Called when a TriggerEndEvent for the object occurs. This will always be called on the main-thread after the simulation has finished. |