# PointerDownEvent

> Sends when a pointer is pressed inside a visual element.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.UIElements](/engine/6000.0/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule
* **Inherits from:** [PointerEventBase\<PointerDownEvent>](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1.md)
* **Implements:** [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable), [IPointerEvent](/engine/6000.0/script-reference/unityengine/uielements/ipointerevent.md)

```csharp
public sealed class PointerDownEvent : PointerEventBase<PointerDownEvent>, IDisposable, IPointerEvent
```

## Remarks

In a runtime UI, a `PointerDownEvent` is sent each time a user touches the screen or presses a mouse button.

In an Editor UI, a `PointerDownEvent` is sent when a user initially touches the screen or presses a mouse button. However, If the user presses additional mouse buttons (right or middle) without releasing the initial one, the PointerMoveEvents is sent not the `PointerDownEvent`. Releasing all mouse buttons and pressing a mouse button again sends a new `PointerDownEvent`.

A `PointerDownEvent` follows the default pointer [event propagation path](/engine/6000.0/manual/uitoolkits/uielements/uie-events/dispatching.md). It trickles down, bubbles up, and is cancellable.

Disabled elements don't receive this event.

For information about how the `PointerDownEvent` relates to other pointer events, refer to [PointerEventBase\<T>](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1.md) and [Pointer events](/engine/6000.0/manual/uitoolkits/uielements/uie-events/reference/uie-pointer-events.md).

Additional Resources: [PointerMoveEvent](/engine/6000.0/script-reference/unityengine/uielements/pointermoveevent.md), [PointerUpEvent](/engine/6000.0/script-reference/unityengine/uielements/pointerupevent.md), [PointerCancelEvent](/engine/6000.0/script-reference/unityengine/uielements/pointercancelevent.md)

## Examples

```csharp
// This example creates a ClickDetector class to detect a click sequence.

namespace UnityEngine.UIElements
{
    public class ClickDetector : VisualElement
    {
        public ClickDetector()
        {
            RegisterCallback<PointerDownEvent>(ProcessEvent);
            RegisterCallback<PointerMoveEvent>(ProcessEvent);
            RegisterCallback<PointerUpEvent>(ProcessEvent);
        }
        private void ProcessEvent<TEvent>(PointerEventBase<TEvent> evt)
            where TEvent : PointerEventBase<TEvent>, new()
        {
            if (evt.eventTypeId == PointerDownEvent.TypeId() && evt.button == 0)
            {
                StartClickTracking(evt);
            }
            else if (evt.eventTypeId == PointerMoveEvent.TypeId())
            {
                // Button 1 was pressed while another button was already pressed.
                if (evt.button == 0 && (evt.pressedButtons & 1) == 1)
                {
                    StartClickTracking(evt);
                }
                // Button 1 is released while another button is still pressed.
                else if (evt.button == 0 && (evt.pressedButtons & 1) == 0)
                {
                    SendClickEvent(evt);
                }
                // Pointer movement detected or button state changed.
                else
                {
                    UpdateClickStatus(evt);
                }
            }
            else if (evt.eventTypeId == PointerUpEvent.TypeId() && evt.button == 0)
            {
                SendClickEvent(evt);
            }
        }

        private void StartClickTracking(IPointerEvent evt) { Debug.Log("Starting click sequence"); }
        private void UpdateClickStatus(IPointerEvent evt) { Debug.Log("Tracking"); }
        private void SendClickEvent(IPointerEvent evt) { Debug.Log("Completed click"); }
    }
}
```

## Constructors

| Constructor                                                                                           | Description                                                                                                                           |
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| [PointerDownEvent()](/engine/6000.0/script-reference/unityengine/uielements/pointerdownevent/ctor.md) | Constructor. Avoid creating new event instances. Instead, use GetPooled() to get an instance from a pool of reusable event instances. |

## Methods

| Method                                                                                  | Description                                       |
| --------------------------------------------------------------------------------------- | ------------------------------------------------- |
| [Init](/engine/6000.0/script-reference/unityengine/uielements/pointerdownevent/init.md) | Resets the event members to their initial values. |

## Inheritance

**Inherited Members:**

* [PointerEventBase\<PointerDownEvent>.GetPooled(Event)](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/getpooled.md)
* [PointerEventBase\<PointerDownEvent>.GetPooled(Touch, EventModifiers)](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/getpooled.md)
* [PointerEventBase\<PointerDownEvent>.GetPooled(PenData, EventModifiers)](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/getpooled.md)
* [PointerEventBase\<PointerDownEvent>.GetPooled(IPointerEvent)](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/getpooled.md)
* [PointerEventBase\<PointerDownEvent>.pointerId](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/pointerid.md)
* [PointerEventBase\<PointerDownEvent>.pointerType](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/pointertype.md)
* [PointerEventBase\<PointerDownEvent>.isPrimary](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/isprimary.md)
* [PointerEventBase\<PointerDownEvent>.button](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/button.md)
* [PointerEventBase\<PointerDownEvent>.pressedButtons](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/pressedbuttons.md)
* [PointerEventBase\<PointerDownEvent>.position](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/position.md)
* [PointerEventBase\<PointerDownEvent>.localPosition](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/localposition.md)
* [PointerEventBase\<PointerDownEvent>.deltaPosition](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/deltaposition.md)
* [PointerEventBase\<PointerDownEvent>.deltaTime](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/deltatime.md)
* [PointerEventBase\<PointerDownEvent>.clickCount](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/clickcount.md)
* [PointerEventBase\<PointerDownEvent>.pressure](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/pressure.md)
* [PointerEventBase\<PointerDownEvent>.tangentialPressure](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/tangentialpressure.md)
* [PointerEventBase\<PointerDownEvent>.altitudeAngle](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/altitudeangle.md)
* [PointerEventBase\<PointerDownEvent>.azimuthAngle](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/azimuthangle.md)
* [PointerEventBase\<PointerDownEvent>.twist](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/twist.md)
* [PointerEventBase\<PointerDownEvent>.tilt](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/tilt.md)
* [PointerEventBase\<PointerDownEvent>.penStatus](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/penstatus.md)
* [PointerEventBase\<PointerDownEvent>.radius](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/radius.md)
* [PointerEventBase\<PointerDownEvent>.radiusVariance](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/radiusvariance.md)
* [PointerEventBase\<PointerDownEvent>.modifiers](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/modifiers.md)
* [PointerEventBase\<PointerDownEvent>.shiftKey](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/shiftkey.md)
* [PointerEventBase\<PointerDownEvent>.ctrlKey](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/ctrlkey.md)
* [PointerEventBase\<PointerDownEvent>.commandKey](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/commandkey.md)
* [PointerEventBase\<PointerDownEvent>.altKey](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/altkey.md)
* [PointerEventBase\<PointerDownEvent>.actionKey](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/actionkey.md)
* [PointerEventBase\<PointerDownEvent>.currentTarget](/engine/6000.0/script-reference/unityengine/uielements/pointereventbase1/currenttarget.md)
* [EventBase\<PointerDownEvent>.TypeId()](/engine/6000.0/script-reference/unityengine/uielements/eventbase1/typeid.md)
* [EventBase\<PointerDownEvent>.GetPooled()](/engine/6000.0/script-reference/unityengine/uielements/eventbase1/getpooled.md)
* [EventBase\<PointerDownEvent>.Dispose()](/engine/6000.0/script-reference/unityengine/uielements/eventbase1/dispose.md)
* [EventBase\<PointerDownEvent>.eventTypeId](/engine/6000.0/script-reference/unityengine/uielements/eventbase1/eventtypeid.md)
* [EventBase.StopPropagation()](/engine/6000.0/script-reference/unityengine/uielements/eventbase/stoppropagation.md)
* [EventBase.StopImmediatePropagation()](/engine/6000.0/script-reference/unityengine/uielements/eventbase/stopimmediatepropagation.md)
* [EventBase.timestamp](/engine/6000.0/script-reference/unityengine/uielements/eventbase/timestamp.md)
* [EventBase.bubbles](/engine/6000.0/script-reference/unityengine/uielements/eventbase/bubbles.md)
* [EventBase.tricklesDown](/engine/6000.0/script-reference/unityengine/uielements/eventbase/tricklesdown.md)
* [EventBase.target](/engine/6000.0/script-reference/unityengine/uielements/eventbase/target.md)
* [EventBase.isPropagationStopped](/engine/6000.0/script-reference/unityengine/uielements/eventbase/ispropagationstopped.md)
* [EventBase.isImmediatePropagationStopped](/engine/6000.0/script-reference/unityengine/uielements/eventbase/isimmediatepropagationstopped.md)
* [EventBase.propagationPhase](/engine/6000.0/script-reference/unityengine/uielements/eventbase/propagationphase.md)
* [EventBase.dispatch](/engine/6000.0/script-reference/unityengine/uielements/eventbase/dispatch.md)
* [EventBase.imguiEvent](/engine/6000.0/script-reference/unityengine/uielements/eventbase/imguievent.md)
* [EventBase.originalMousePosition](/engine/6000.0/script-reference/unityengine/uielements/eventbase/originalmouseposition.md)
