- Home /
How to call an Event trigger on a button through script?
I am making a 2D top down car game where as i have 8 different cars and each and one of them has a controller script. I wan't it so that whenever hold down a button the car will turn left which i have achieved but my only problem is that it only works for one car, the car i dragged into the listener field. I know how to call functions with "onclick" through script but since i need to hold the button down i used the event trigger component.
The event types i used were PointerDown and PointerUp.
Why do you want UI Buttons as controls of your cars? Wouldn't it be easier to use the normal Input class if you just want mouse input?
$$anonymous$$y game is supposed to be a mobile game. Sorry, i should have mentioned this earlier.
Check the following link : https://stackoverflow.com/documentation/unity3d/2296/user-interface-system-ui#t=20170911154148529932
Thanks, but where am i supposed to call my function? I typed in the script and added it to my button and the script worked, but what is it in the script that i have too change in order to call my function?
Here is the script:
[RequireComponent(typeof( EventTrigger ))]
public class TurnController : $$anonymous$$onoBehaviour
{
Car2DController car2DController;
void Start( )
{
EventTrigger eventTrigger = GetComponent<EventTrigger>( );
EventTrigger.Entry entry = new EventTrigger.Entry( );
entry.eventID = EventTriggerType.PointerDown;
entry.callback.AddListener( ( data ) => { OnPointerDownDelegate( (PointerEventData)data ); } );
eventTrigger.triggers.Add(entry);
car2DController = GameObject.FindGameObjectWithTag ("Car").GetComponent<Car2DController> ();
}
public void OnPointerDownDelegate( PointerEventData data )
{
Debug.Log( "OnPointerDownDelegate called." );
}
}
Ask me if you need to see the car controller script.
Answer by Hellium · Sep 11, 2017 at 07:20 PM
Try something like the following code. But, since I don't know your Car2DController
, you will have to make appropriate changes
public class TurnController : MonoBehaviour
{
UnityEngine.UI.Button rightButton ;
UnityEngine.UI.Button leftButton ;
Car2DController car2DController;
void Start( )
{
AddRightButtonEvents();
AddLeftButtonEvents();
car2DController = GameObject.FindGameObjectWithTag ("Car").GetComponent<Car2DController> ();
}
void AddRightButtonEvents()
{
EventTrigger eventTrigger = rightButton.gameObject.AddComponent<EventTrigger>( );
EventTrigger.Entry pointerDownEntry = new EventTrigger.Entry( );
pointerDownEntry.eventID = EventTriggerType.PointerDown;
pointerDownEntry.callback.AddListener( ( data ) => { OnRightButtonDown( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
EventTrigger.Entry pointerUpEntry = new EventTrigger.Entry( );
pointerUpEntry.eventID = EventTriggerType.PointerUp;
pointerUpEntry.callback.AddListener( ( data ) => { OnRightButtonUp( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
}
public void OnRightButtonDown( PointerEventData data )
{
car2DController.goLeft = false ;
car2DController.goRight = true ;
}
public void OnRightButtonUp( PointerEventData data )
{
car2DController.goRight = false ;
}
void AddLeftButtonEvents()
{
EventTrigger eventTrigger = leftButton.gameObject.AddComponent<EventTrigger>( );
EventTrigger.Entry pointerDownEntry = new EventTrigger.Entry( );
pointerDownEntry.eventID = EventTriggerType.PointerDown;
pointerDownEntry.callback.AddListener( ( data ) => { OnLeftButtonDown( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
EventTrigger.Entry pointerUpEntry = new EventTrigger.Entry( );
pointerUpEntry.eventID = EventTriggerType.PointerUp;
pointerUpEntry.callback.AddListener( ( data ) => { OnLeftButtonUp( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
}
public void OnLeftButtonDown( PointerEventData data )
{
car2DController.goRight = false ;
car2DController.goLeft = true ;
}
public void OnLeftButtonUp( PointerEventData data )
{
car2DController.goLeft = false ;
}
}
Thank you! This was the answer i was looking for even though it took me some time to get everything in order but still, Thanks a lot!
thanks but you need to fix something
here void AddRightButtonEvents() { EventTrigger eventTrigger = rightButton.gameObject.AddComponent( );
EventTrigger.Entry pointerDownEntry = new EventTrigger.Entry( );
pointerDownEntry.eventID = EventTriggerType.PointerDown;
pointerDownEntry.callback.AddListener( ( data ) => { OnRightButtonDown( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
EventTrigger.Entry pointerUpEntry = new EventTrigger.Entry( );
pointerUpEntry.eventID = EventTriggerType.PointerUp;
pointerUpEntry.callback.AddListener( ( data ) => { OnRightButtonUp( (PointerEventData)data ); } );
eventTrigger.triggers.Add(pointerDownEntry);
}
pointerDownEntry parameter is added to the up and down event