unity學習,希望我的博客能給喜歡unity的朋友帶來幫助
今天完成了遊戲的第一個關卡,覺得和別的組不同之處之一就是按鈕的不同,登錄註冊等按鈕我沒用GUI的Button來做,而是用GUITexture來做,做出來的效果就是當鼠標沒在按鈕上時是一個狀態,當鼠標移動到按鈕上是又是另一個狀態,當鼠標點擊按鈕時,又會變另一狀態,這不是特效,其實是定義了一組照片和用鼠標事件來做的。下面就讓我們來看看鼠標事件和鼠標事件的應用吧。
鼠標事件:
鼠標事件,都是當鼠標和gui或者碰撞體(Collider)交互時候觸發。需要說明的是drag其實就是鼠標down後up之前持續每幀都會發送此消息。
OnMouseDown:當鼠標上的按鈕被按下時觸發的事件;
OnMouseDrag:當用戶鼠標拖拽GUI元素或碰撞體時調用;
OnMouseEnter:當鼠標進入物體範圍時被調用;
OnMouseExit:當鼠標退出時被調用;
OnMouseOver:當鼠標移動到某對象的上方時觸發的事件;
OnMouseUp:當鼠標按鍵被鬆開時觸發的事件。
鼠標事件的應用,代碼如下:
using UnityEngine;
using System.Collections;
public class GUI_Login_Button : MonoBehaviour {
//聲明定義GUITexture
GUITexture guitexture;
//聲明一組圖片數組
public Texture[] login_Button_Texture;
//聲明兩個標誌位flag和flag2
bool flag;
bool flag2;
//初始化,獲取GUITexture
void Start () {
guitexture=GetComponent<GUITexture>();
}
//當鼠標進入物體範圍時被調用
void OnMouseEnter() {
//圖片變換
guitexture.texture=login_Button_Texture[1];
}
//當鼠標放到圖片上方時觸發事件
void OnMouseOver() {
//當標誌位爲真時
if(flag)
{
//圖片變換
guitexture.texture = login_Button_Texture[2];
//if嵌套
//因爲登陸界面的按鈕連接着數據庫,所以要判斷輸入的內容在數據庫中不爲空
//if括號內的內容是調用的Users類裏面的Login方法
if (new Users().Login(Login.str, Login.str1).Name != null)
{
//跳轉到ProgressBar工程
Application.LoadLevel("ProgressBar");
}
//否則,當name爲空時,flag2爲ture,執行下面的觸發器
else {
flag2 = true;
}
//if嵌套完成
}
else
{
//否則,圖片變換
guitexture.texture=login_Button_Texture[1];
}
}
void OnGUI() {
if (flag) {
//標誌位判斷
//設置字體的顏色和創建Label,放置校驗
GUI.color = Color.red;
GUI.Label(new Rect(560, 360, 300, 50), "密碼或賬號錯誤,請重新輸入!");
}
}
//當鼠標退出時被調用
void OnMouseExit() {
guitexture.texture=login_Button_Texture[0];
}
//當鼠標上的按鈕被按下時觸發的事件
void OnMouseDown() {
flag = true;
}
//當鼠標按鍵被鬆開時觸發的事件,當鼠標鬆開時,跳轉界面
void OnMouseUp()
{
flag = false;
}
}