先照著圖講解功能,透過鍵盤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
沒有留言:
張貼留言