Unity 中的滑鼠事件方法彙總(物體,UGUI)
阿新 • • 發佈:2018-11-19
本文將從遊戲物體(Gameobject),和UGUI,講解Unity—PC端開發中,滑鼠事件的常見功能實現
本文將幫你解決Unity中如下或者類似的事件響應問題:
遊戲物體篇
- 點選遊戲物體,物體消失;
- 滑鼠懸停在遊戲物體上,物體旋轉;
- 移入遊戲物體,遊戲物體變大;
- 離開遊戲物體,遊戲物體變小
UGUI篇
- 點選按鈕響應事件
- 移入UI元件
- 移出UI元件
【由於本文章重點在講解滑鼠事件響應,所以基本操作這裡博主不做贅述。】
對於遊戲物體
遊戲物體的事件響應相對於UI元件,較簡單。只需要記住這幾個函式便可以:
private void OnMouseDown() //滑鼠按下
private void OnMouseEnter() //滑鼠移入物體
private void OnMouseOver() //滑鼠懸停時每幀呼叫
private void OnMouseExit() //滑鼠移出
下面我們來看看下面的效果是如何實現的:
下面附上我的原始碼:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Collider_Test : MonoBehaviour { public Text T; // Start is called before the first frame update private void OnMouseDown() //滑鼠按下 { Destroy(this.gameObject); T.text = this.gameObject.name + "被銷燬!"; } private void OnMouseEnter() //滑鼠移入物體 { this.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f); } private void OnMouseOver() //滑鼠懸停時每幀呼叫 { this.transform.Rotate(new Vector3(10, 10, 10) * Time.deltaTime); T.text = this.gameObject.name + "在旋轉!"; } private void OnMouseExit() //滑鼠移出 { T.text = "離開了" + this.gameObject.name; this.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); } }
我們只要把這些程式碼掛載到我們想要進行事件響應的遊戲物體上就可以了。
注意!!!!
這些功能函式都無法離開碰撞體(Collider)的支援
對於UI元件
由於UI元件太多,這裡只講解Button,其他的可以以此類推,這裡博主不做重述。
同樣的,我們來看看我們實現的效果:
點選
點選事件需要我們編寫點選事件:這裡需要從新建立一個指令碼,這裡我們的建立TEst.cs指令碼
內容如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TEst : MonoBehaviour { public Text TT; public void ButtonEvents() { TT.text = "點選事件:銷燬!"; Destroy(this.gameObject); } }
把他掛載到我們場景的Cube遊戲物體上:
接下來,我們在Button上面操作:
利用此方法,你可以實現任何你想實現的功能!
接下來是移入、移出事件:
在這裡我們需要藉助兩個介面:
IPointerEnterHandler
可以實現如下方法
public void OnPointerEnter(PointerEventData eventData) //滑鼠移入
IPointerExitHandler
可以實現如下方法
public void OnPointerExit(PointerEventData eventData) //滑鼠移出
我們建立指令碼 UI_Test:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class UI_Test : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public Text T;
public void OnPointerEnter(PointerEventData eventData) //滑鼠移入
{
T.text = "滑鼠移動到了" + this.name;
}
public void OnPointerExit(PointerEventData eventData) //滑鼠移出
{
T.text = null;
}
}
我們把這個指令碼分別掛載到我們的Button和Button(1)上。
至此,大功告成!
*