Unity: Как перестать использовать «Input.GetMouseButton (0)» при нажатии на кнопку пользовательского интерфейса? - PullRequest
0 голосов
/ 11 октября 2018

Игрок - волшебник, который может атаковать врагов огненными шарами при нажатии левой кнопки мыши.

Код, который я использую, довольно прост (внутри функции Update):

if (Input.GetMouseButton(0) && canShoot)
{
    canShoot = false;
    Invoke("AllowCanShoot", fireBreak);
    Attack();
}

canShoot - это bool, который не дает игроку атаковать один раз за кадр.

AllowCanShoot - это функция, которая устанавливает canShoot в true.

Attack() - это функция, которая обрабатывает атаку, не относящуюся к этому вопросу.

У меня также есть кнопка пользовательского интерфейса, которая появляется на экране, когда игрок находится рядом с трейдером.Когда игрок нажимает кнопку пользовательского интерфейса, он атакует трейдера.

Я хочу, чтобы он мог нажимать на кнопку, не нападая на него.

Я не могу отключить атаку для игрока, потому что враги тоже могут попасть к трейдеру, и игроку тогда придется сражаться.

То, что я пробовал:

  • установка canShoot bool на false, когда нажата UI Button, но это не работает, проигрывательвсе еще атакует, может быть, функция Update выполняется перед функцией UI Button? *

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Если вы не можете отключить атаку для игрока, можете ли вы сделать так, чтобы при наведении на трейдера игрок не мог атаковать его?

Использовать Raycast, когда рядом с трейдером.

Нечто подобное может быть?

void NearTrader()
{
  if (Vector3.Distance(trader.position, player.position) < myDistance)
  {
    RaycastHit hit;

    if (Physics.Raycast(player.position, PlayerCamera.transform.forward, out hit, myRange))
      canShoot = false;
    else
      canShoot = true;
  }
}
0 голосов
/ 11 октября 2018

Вы можете использовать функцию EventSystem.IsPointerOverGameObject(), чтобы убедиться, что мышь не находится над объектом пользовательского интерфейса перед атакой:

if (Input.GetMouseButton(0) && canShoot && !EventSystem.current.IsPointerOverGameObject())
{
    canShoot = false;
    Invoke("AllowCanShoot", fireBreak);
    Attack();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...