using UnityEngine; namespace Unity.VisualScripting { #if MODULE_PHYSICS_EXISTS [UnitCategory("Events/Physics")] public abstract class CollisionEventUnit : GameObjectEventUnit<Collision> { /// <summary> /// The collider we hit. /// </summary> [DoNotSerialize] public ValueOutput collider { get; private set; } /// <summary> /// The contact points generated by the physics engine. /// </summary> [DoNotSerialize] public ValueOutput contacts { get; private set; } /// <summary> /// The total impulse applied to this contact pair to resolve the collision. /// </summary> [DoNotSerialize] public ValueOutput impulse { get; private set; } /// <summary> /// The relative linear velocity of the two colliding objects. /// </summary> [DoNotSerialize] public ValueOutput relativeVelocity { get; private set; } /// <summary> /// The complete collision data object. /// </summary> [DoNotSerialize] public ValueOutput data { get; private set; } protected override void Definition() { base.Definition(); collider = ValueOutput<Collider>(nameof(collider)); contacts = ValueOutput<ContactPoint[]>(nameof(contacts)); impulse = ValueOutput<Vector3>(nameof(impulse)); relativeVelocity = ValueOutput<Vector3>(nameof(relativeVelocity)); data = ValueOutput<Collision>(nameof(data)); } protected override void AssignArguments(Flow flow, Collision collision) { flow.SetValue(collider, collision.collider); flow.SetValue(contacts, collision.contacts); flow.SetValue(impulse, collision.impulse); flow.SetValue(relativeVelocity, collision.relativeVelocity); flow.SetValue(data, collision); } } #endif }