2016-06-19 2 views
1

Есть ли способ в Unity создать простую 2D-кнопку без использования слоя пользовательского интерфейса. У меня есть игра с множеством кнопок, и я не хочу делать все приложение в пользовательском интерфейсе. Также приветствуются некоторые другие элементы управления: переключатели, слайдеры и т. Д.Кнопки в Unity, без использования пользовательского интерфейса?

PS. Я видел NGUI, и мне это пока не нравится. Что-нибудь еще?

+0

2DToolkit делает это абсолютно отлично, он имеет все функции встроенного. (2DTK по-прежнему невероятно полезен во многих отношениях: мы никогда не будем делать 2D-проект без него.) Ngui не является решением. Или вы можете создать свой собственный, ** как программист прекрасно объясняет ниже **. Я должен удивляться - почему бы вам просто не использовать интерфейс Unity? В чем проблема? – Fattie

+0

Интересно то же самое. У вас есть полный UUUI Unity, но он говорит об использовании NGUI или даже переделал все элементы управления с нуля ... – Programmer

+0

Может быть, я просто ошибся, но использование кнопки Unity UI в 2D-игре выглядит странно для меня. Я не могу поместить его в иерархию объектов, он имеет разный масштаб, чем мои спрайты, я не могу прикрепить его к определенному уровню сортировки и т. Д. Поэтому я немного потерялся. –

ответ

2

Есть ли способ в Unity, чтобы создать простую 2D кнопку без использования слоя UI

Вы можете использовать Sprite/Sprite Render как Button .Первый Создать GameObject и прикрепить EventSystem и StandaloneInputModule к Это. Прикрепите Physics2DRaycaster к камере, внесите IPointerClickHandler и переопределите OnPointerClick функцию. Создайте 2D-спрайт, перейдя на GameObject ->2D-объект ->Sprite затем прикрепите свой скрипт к Sprite. Вот полный код, чтобы сделать это:

using UnityEngine; 
using UnityEngine.EventSystems; 
using System.Collections; 

public class SPRITEBUTTON: MonoBehaviour, IPointerClickHandler, 
            IPointerDownHandler, IPointerEnterHandler, 
            IPointerUpHandler, IPointerExitHandler 
{ 

    void Start() 
    { 
     //Attach Physics2DRaycaster to the Camera 
     Camera.main.gameObject.AddComponent<Physics2DRaycaster>(); 

     addEventSystem(); 
    } 

    public void OnPointerClick(PointerEventData eventData) 
    { 
     Debug.Log("Mouse Clicked!"); 
    } 

    public void OnPointerDown(PointerEventData eventData) 
    { 
     Debug.Log("Mouse Down!"); 
    } 

    public void OnPointerEnter(PointerEventData eventData) 
    { 
     Debug.Log("Mouse Enter!"); 
    } 

    public void OnPointerUp(PointerEventData eventData) 
    { 
     Debug.Log("Mouse Up!"); 
    } 
    public void OnPointerExit(PointerEventData eventData) 
    { 
     Debug.Log("Mouse Exit!"); 
    } 

    //Add Event System to the Camera 
    void addEventSystem() 
    { 
     GameObject eventSystem = null; 
     GameObject tempObj = GameObject.Find("EventSystem"); 
     if (tempObj == null) 
     { 
      eventSystem = new GameObject("EventSystem"); 
      eventSystem.AddComponent<EventSystem>(); 
      eventSystem.AddComponent<StandaloneInputModule>(); 
     } 
     else 
     { 
      if ((tempObj.GetComponent<EventSystem>()) == null) 
      { 
       tempObj.AddComponent<EventSystem>(); 
      } 

      if ((tempObj.GetComponent<StandaloneInputModule>()) == null) 
      { 
       tempObj.AddComponent<StandaloneInputModule>(); 
      } 
     } 
    } 

} 

EDIT:

Если это 3D GameObject/Mesh, то вам нужно добавить простой коллайдера к нему. Если это просто Sprite, вы должны добавить 2D-коллайдер в спрайт.

+0

Отличный ответ, спасибо! Вы просто забыли упомянуть, что вам также нужно добавить коллайдер в спрайт. –

+1

Raycast не будет определять игровые объекты без коллайдеров. Я думал, ты уже это знаешь. – Programmer

+0

Все новое для новичка, подобного мне. Я даже не знаю, что такое Raycast :) Для меня сейчас это просто волшебство. Я считаю, что лучше добавить его к ответу для других новичков. –

Смежные вопросы