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


沒有留言:
張貼留言