2016-02-20 3 views
4

Я пытаюсь создать 3D-щелчок, чтобы переместить игру в Unity3D.Как заставить геймплей игнорировать клики на кнопке пользовательского интерфейса в Unity3D?

Я добавил пользовательский интерфейс Button (используя UnityEngine.UI), который я бы хотел в конечном итоге нажать, чтобы включить или выключить запуск.

Однако, нажав на Button на самом деле, кажется, щелчок через на сцену (в моем случае NavMeshAgent навигации) и вызывает плеер, чтобы перейти в другое место.

Как отключить лучевое кастинг для нажатия кнопок пользовательского интерфейса или каким-либо образом пользовательский интерфейс захватит собственные события?

Я использую типичный код Unity3D, чтобы пользователь в положить в игровом процессе, такие как

if (Input.GetMouseButtonDown(0)) 
    { 

же, если я попробовать подход,

if(Input.touches.Length > 0) 
     { 

     if (Input.touches[0].phase == TouchPhase.Began) 
      { 

и это, кажется, дело о прошивке , Android и рабочий стол.

Похоже, что основная проблема в том, что щелчки на пользовательском интерфейсе (UnityEngine.UI.Button и т. Д.), Похоже, попадают в геймплей.

+1

@JoeBlow Если было предложено до на SO затем пометить его как дубликат, в противном случае это представляется на тему (конкретная проблема программирования, которая может оказаться полезной для других) –

ответ

16

Что касается этого очень старый вопрос:

В историческом деле: вот бесцеремонный быстро исправить, что вы использовали, чтобы иметь возможность использовать в Unity лет назад ...

if (Input.GetMouseButtonDown(0)) { // doesn't really work... 
    if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) 
     return; 
    Bingo(); 
    } 

Реально, вы не можете больше этого делать, в течение нескольких лет.


Откладывая историческое сиюминутные ...

Вот как вы это делаете в единстве сегодня:

  1. Добавить raycaster (который принимает один щелчок), и

  2. ли это:

-

using UnityEngine.EventSystems; 
    public class Gameplay:MonoBehaviour, IPointerDownHandler { 
    public void OnPointerDown(PointerEventData eventData) { 
    Bingo(); 
    } 
    } 

В основном, снова в основном, что это все есть на него.

Совершенно просто: вот как вы обращаетесь с прикосновением в Единстве. Вот и все.

Добавьте raycaster и получите этот код.

Это выглядит легко, и это легко. Однако, это может быть сложно сделать хорошо.


(Сноска 1 - полная информация: Horrors of OnPointerDown versus OnBeginDrag in Unity3D)

(Сноска 2 - по историческим причинам: если ссылка все еще работает, вот оригинальное известное видео о том, как сделать «новый» контакт в единстве, из тогда: link, часть 3.)


путешествие Unity через сенсорные технологии были захватывающим:

  1. «Раннее единство» ... было очень легко. Совершенно бесполезно. Не работает вообще.

  2. «Текущее» новое «Единство» ... Прекрасно работает. Очень легко, но сложно использовать в экспертной манере.

  3. «Coming future Unity» ... Примерно в 2025 году они сделают его ОБА фактически работающим и легким в использовании. Не задерживайте дыхание.

(ситуация не отличается от UI системы Unity в. Сначала система UI была смехотворна. Теперь, это здорово, но несколько сложно использовать в экспертном порядке.)


Удобный отзыв!

Помните! Когда у вас есть полноэкранная невидимая панель, в которой есть несколько кнопок. На полноэкранной невидимой панели вы должны отключить raycasting! Легко забыть:

enter image description here

+0

Я исследовал проблему, прежде чем публиковать вопрос, но ничего не мог найти. Очевидно, что не использовались правильные ключевые слова. Спасибо за решение. Работал шармом. – Peter