Есть ли способ в 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-коллайдер в спрайт.
2DToolkit делает это абсолютно отлично, он имеет все функции встроенного. (2DTK по-прежнему невероятно полезен во многих отношениях: мы никогда не будем делать 2D-проект без него.) Ngui не является решением. Или вы можете создать свой собственный, ** как программист прекрасно объясняет ниже **. Я должен удивляться - почему бы вам просто не использовать интерфейс Unity? В чем проблема? – Fattie
Интересно то же самое. У вас есть полный UUUI Unity, но он говорит об использовании NGUI или даже переделал все элементы управления с нуля ... – Programmer
Может быть, я просто ошибся, но использование кнопки Unity UI в 2D-игре выглядит странно для меня. Я не могу поместить его в иерархию объектов, он имеет разный масштаб, чем мои спрайты, я не могу прикрепить его к определенному уровню сортировки и т. Д. Поэтому я немного потерялся. –