Вызвать метод OnPointerDown один раз
Как вызвать корутину из метода Update единожды по нажатию OnPointerDown, подобно GetKeyDown? Я не хочу разбивать вызов EventTrigger на отдельные скрипты, поскольку функциональных кнопок будет много, соответственно на каждую придется колхозить IPointerDown(Up)Handler, eventSystem, этот вариант мне не подходит. Примерно накидал, что нужно сделать, пока что с такой реализацией корутина вызывается соответственно каждый кадр, пока UI кнопка нажата, а нужно лишь единожды.
public void UIEventTrigger (int i)
{
if (i == 1)
{
fw_pointer = true;
}
else if (i == 0)
{
fw_pointer = false;
}
}
public void Update () {
RaycastHit hit;
Ray forwardRay = new Ray(transform.position, Vector3.forward);
Debug.DrawRay(transform.position, Vector3.forward, Color.blue);
if (!Physics.Raycast(forwardRay, out hit, .51f) || hit.collider.tag == "xxxxxx")
{
if (fw_pointer && !rolling && !falling) // буль fw_pointer есть проверка на нажатие кнопки OnPointerDown через UIEventTrigger(), соответственно нужно по нажатию UI кнопки единожды вызывать корутину
StartCoroutine(Roll(forwardRotationPoint));
}
Был бы премного благодарен, спасибо заранее.
Ответы (1 шт):
Итак, решил сделать подобным методом:
public void UIMoveByPointer (int i)
{
if (i == 1 && fw_access && !rolling && !falling)
{
StartCoroutine(Roll(forwardRotationPoint));
fw_access = false;
}
}
private void Update ()
{
RaycastHit hit;
Ray forwardRay = new Ray(transform.position, Vector3.forward);
Debug.DrawRay(transform.position, Vector3.forward, Color.blue);
if (rolling)
return;
if (!Physics.Raycast(forwardRay, out hit, .51f) || hit.collider.tag == "xxxxxx")
{
fw_access = true;
}
}
Таким образом, все проверки работают как надо, кнопок можно привязывать сколько угодно, единственное, на каждую кнопку нужно добавлять отдельную булевую (в моем случае на проверку физики). Назначаются также все кнопки через EventTrigger метода UIMoveByPointer с входным параметром, соответствующим кнопке. Удобство в том, что нет мусора в виде "up_button.cs, down_button.cs... billion_button.cs".
