Unity中的按钮,不使用UI?

Max*_*rov 6 c# unity-game-engine unity5 unity3d-ui

Unity中是否有一种方法可以在不使用UI层的情况下创建简单的2D按钮.我有一个有很多按钮的游戏,我不想在UI中制作整个应用程序.还欢迎更多控件:开关,滑块等.

PS.我看到了NGUI,到目前为止我还不喜欢它.还要别的吗?

Pro*_*mer 4

Unity有没有办法在不使用UI层的情况下创建一个简单的2D按钮

您可以使用Sprite/Sprite Render作为Button.First 创建一个游戏对象并将EventSystem和附加StandaloneInputModule到它。连接Physics2DRaycaster到相机,实现IPointerClickHandler和覆盖OnPointerClick功能。通过转到GameObject -> 2D Object -> Sprite创建 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>();
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果这是一个 3D GameObject/Mesh,那么您需要向其添加一个简单的碰撞器。如果它只是精灵,那么您必须向精灵添加 2D 碰撞器。