UIレイヤーを使用せずに単純な2Dボタンを作成する方法はありますか?私はたくさんのボタンがあるゲームを持っているので、UIの中にアプリ全体を作りたくありません。スイッチ、スライダーなど、いくつかのコントロールも大歓迎です。UIを使用しないUnityのボタン?
PS。私はNGUIを見ましたが、私はそれを今のところ好きではありません。他に何か?
UIレイヤーを使用せずに単純な2Dボタンを作成する方法はありますか?私はたくさんのボタンがあるゲームを持っているので、UIの中にアプリ全体を作りたくありません。スイッチ、スライダーなど、いくつかのコントロールも大歓迎です。UIを使用しないUnityのボタン?
PS。私はNGUIを見ましたが、私はそれを今のところ好きではありません。他に何か?
Button
1次回は、ゲームオブジェクトを作成し、へEventSystem
とStandaloneInputModule
を添付してあなたがSprite
/Sprite Render
を使用することができます UI層
を使用することなく、簡単な2Dのボタンを作成するためのユニティで方法はありますそれ。カメラにPhysics2DRaycaster
を添付し、IPointerClickHandler
を実装し、OnPointerClick
機能をオーバーライドします。 GameObject - >2Dオブジェクト - >スプライトにスプライトを添付して2Dスプライトを作成します。ここではそれを行うための完全なコードは次のとおりです。
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ゲームオブジェクト/メッシュである場合
、その後、あなたはそれに簡単なコライダーを追加する必要があります。それがSpriteの場合は、2Dコライダーをスプライトに追加する必要があります。
偉大な答え、ありがとうございます!スプライトにコライダーを追加する必要があるよりも、言及するのを忘れてしまっただけです。 –
Raycastは、衝突者のないgameobjectsを検出しません。私はあなたがすでにそれを知っていると思った。 – Programmer
私のような初心者のためにすべてが新しいです。私はRaycastが何であるか知りません:)私にとっては今のところただの魔法です。私は他の初心者のためにそれを答えに加える方が良いと信じています。 –
2DToolkitはこれを完全に実行します。これはすべての機能を内蔵しています。 (2DTKはいまだに多くの点で信じられないほど便利です。私たちは2Dプロジェクトを一切実行しません。)nguiは解決策ではありません。プログラマが完全に以下のように説明しているように**あなた自身で作成することもできます。私は疑問に思う必要があります - なぜUnityのUIを使用しないのですか?問題は何ですか? – Fattie
私も同じことを思い出します。あなたは完全なUnityのuGUIを持っていますが、彼はNGUIを使ったり、すべてのコントロールを一から作り直したりすることを話しています... – Programmer
私は間違っているかもしれませんが、2DのUnity UIボタンを使用すると、私はオブジェクトの階層に入れられません。スプライトとはスケールが違うので、特定のソートレイヤなどに貼り付けることができません。少し失われてしまいました。 –