2014年12月23日 星期二

【Unity】遊戲選單開啟/關閉和選取

選單製作是最近朋友的Unity遊戲專案需求,寫個雛形就順手放上來了,需求是3D遊戲中的2D(Sprite)選單開啟和關閉,以及選單內容物的選取,如下圖,結果點我
Unity menu

先照著圖講解功能,透過鍵盤Z開啟或關閉選單同時顯示狀態在最上方文字,選單內容物透過滑鼠點選,當滑鼠移到icon上時改變顏色,滑鼠點選icon時顯示icon名稱在選單上方小文字,另外在選單開啟的狀態下掛在Camera下的mouse look會被關閉。

Unity menu

上圖為Sence的內容物,Main Camera含有mouse look腳本可以透過滑鼠位置做旋轉,Camera底下有Menu(Sprite)物件,Menu底下有Icon(Sprite)物件,Icon物件底下加上Box Collider,之後滑鼠事件才會生效,另外在做這一段的時候發現Collider2D無法配合Camera做正確的旋轉,所以這裡使用Collider,另外一提mouse look腳本可以透過Import Package->Character Controller中找到。

接著將以下腳本(item.cs)加入各個Icon物件,透過各個Mouse事件改變Icon顏色和顯示Icon名稱:
using UnityEngine;
using System.Collections;

public class item : MonoBehaviour {
    public TextMesh IconName;
    private SpriteRenderer IconColor;

    void Start(){
        IconColor = GetComponent<SpriteRenderer> ();
    }

    void OnMouseDown(){
        IconName.text = transform.name;
    }

    void OnMouseEnter(){
        IconColor.color = new Color (0, 0, 1, 1);
    }

    void OnMouseExit(){
         IconColor.color = new Color (1, 1, 1, 1);
    }
}

最後將以下腳本(MenuController.cs)加入攝影機底下就完成這個範例:
using UnityEngine;
using System.Collections;

public class MenuController : MonoBehaviour {
    private GameObject Menu;
    private MouseLook MouseLook;
    bool MenuEnable = false;
    public TextMesh MenuState;
    private SpriteRenderer [] IconsColor;
    void Start () {
        Menu = GameObject.Find("Menu");
        IconsColor = Menu.GetComponentsInChildren<SpriteRenderer> ();
        Menu.SetActive(false);
        MouseLook = GetComponent<MouseLook> ();
    }

    void Update () {
        MenuState.text = "Menu(Button Z):" + MenuEnable.ToString ();
        if (Input.GetKeyDown(KeyCode.Z)){////(1)
            MenuEnable = !MenuEnable;
            Menu.SetActive(MenuEnable);////(2)
            MouseLook.enabled = !MenuEnable;////(3)
            foreach(SpriteRenderer Item in IconsColor)
                Item.color = new Color(1, 1, 1, 1);
        }
    }
}
(1)透過鍵盤Z鍵切換選單的開啟關閉。
(2)在這裡選單的開啟關閉使用SetActive來切換,SetActive會影響該物件下所有的項目,也就是說在這裡把SetActive設為false時,Menu下顯示以及更底下的Icon功能全部都會被關閉。
(3)而MouseLook為選單的相反狀態,也就是選單開啟MouseLook關閉,反之亦然。

以上範例基本上就是表面功夫,在更細節的選單功能就看對方的需求了,另外關於物件的顯示或隱藏這裡使用SetActive,但更多的方法可以參考"誰"的這篇:
http://godstamps.blogspot.tw/2011/05/unity-3d-getcomponentsinchildren.html

這次差不多就到這裡了,最後的最後是這次的素材:
Game-icons.net:

http://game-icons.net/
びたちー素材館:
http://www.vita-chi.net/sozai1.htm

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...