上一節,我們簡單概括了Unity3D編輯器中三大 Layout Group組件的簡要介紹,具體詳情鏈接為:Unity3d中UGUI組件精簡復盤(十九)ContentSizeFitter組件
話不多說,我們直接進入正題~ 今天我們簡要概括復盤的組件便是EventSystem組件與Standalone Input Moudle組件啦~
EventSystem組件與Standalone Input Moudle組件
簡述事件系統及圖形射線和其他射線的區別
UI部分的事件系統,用于管理事件回應
通常我們第一次創建UI的時候,會自動創建Canvas與EventSystem,EventSystem是全域唯一的,用于管理事件回應,不僅限于對UI事件回應 ,對于3D物體事件也回應
屬性:
EventSystem屬于系統管理類,依賴于Standalone Input Moudle,Standalone Input Moudle用于處理客戶端的輸入的操作資訊,同時還依賴于Canvas的Graphic Raycaster,Graphic Raycaster用于處理圖形射線進行回應,這四個部分作為UI事件系統的主要組成部分,
2D和3D射線分別是回應2D和3D的碰撞體,而Graphic圖形射線是不會對2D和3D作出回應的,除非Blocking objects里進行設定,默認情況下是只針對圖形射線作出相應的,

First Selected:
Send Navigation Events:
Drag Threshold:
UGUI實作事件的三種方式:
第一種方式: 使用Unity中的介面,介面中就有對應的方法
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class TestIhander : MonoBehaviour,IDragHandler
{
public void OnDrag(PointerEventData eventData)
{
throw new System.NotImplementedException();
}
}
第二種方式: 通過手動添加組件的方式去實作
添加Event Trigger組件,對什么UI物體進行操作,就將對應的物體拖動至選框即可,然后在選擇對應的回應事件,同時我們可以自己寫對應的回應方法,只需要在其中選擇對應我們手寫的回應方法,

第三種方式: 代碼中動態添加組件和引數,實作對應的同樣的事件回應的程序
EventTrigger組件實作事件呼叫的兩種方式演示
方式一:界面上手動添加
通過界面中添加EventTrigger,
具體實作就類似于Onclick中的手動添加、系結方法的程序類似,方式

方法2:代碼添加
命名空間添加:
using UnityEngine.UI;
using UnityEngine.EventSystems;
比較特殊,需要初始化事件串列,
所有的UnityEvent都需要呼叫AddListener()才能夠呼叫對應的事件,而C#中我們是通過’=‘號進行呼叫的,也就是我們C#中所講的委托多播,
TestEventTrigger.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TestEventTrigger : MonoBehaviour {
private int index;
void Start()
{
EventTrigger trigger = gameObject.AddComponent<EventTrigger>();
trigger.triggers = new List<EventTrigger.Entry>();//需要初始化事件串列
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback = new EventTrigger.TriggerEvent();
//entry.callback.AddListener(ChangeColor);//監聽方式一,但是需要ChangeColor(BaseEventData data)呼叫方法中需要帶參
//entry.callback.AddListener((data)=> ChangeColor());//監聽方式二,監聽方法不需要帶參,可以同時相應多個方法
entry.callback.AddListener((data) =>
{
ChangeColor();
});//監聽方式三,監聽方法不需要帶參,可以同時相應多個方法
}
public void ChangeColor()
{
if (index == 0)
{
GetComponent<Image>().color = Color.red;
}
else
{
GetComponent<Image>().color = Color.white;
}
index = index == 0 ? 1 : 0;
}
}
聯系作業實際: 這個的重要性就遠比上兩個章節所講述的重要性要強很多了,并不是上兩章的內容不重要,只是上兩個章節的內容的話,可能真正在日常作業中接觸到的也許不會特別多,可能也跟博主自己本身的崗位職責有關,但是存在即合理,所以我們同樣也不能否認上兩個章節的內容,上兩個章節的內容在處理適配上的作用可不容小覷,事件系統,這在日常作業中可不少見,以及跟輸入相關的組件,這就更加了,尤其是pc端的游戲中,一直以來強調了企業中所使用到的框架是怎么樣的,決定了你怎么樣去使用,
不過我們不能否認,有一些公司選擇開發游戲并沒有采用xlua,slua,或者tolua這之類的框架,而是自己公司通過別的途徑來實作熱更的,這些公司一樣不在少數,我們不能否認框架帶來的開發效率,當然也不能否認別的途徑實作熱更的游戲就不好,開發游戲的目標都是一致的,就是開發出一款可玩性高,表現性好,吸引玩家的精品游戲,有時候也不能太過看重這方面的框架,只能說框架給我們帶來的只是在某種程度上的優越性,但相同,也會在某些方面與不使用框架上優越性上會有偏差,
總結: Unity3d中UGUI組件精簡復盤之總結篇到這里就先告一段落,后續在組件上有更多的了解的時候,再陸陸續續的補充吧,

大家也會發現博主目前的博文更多的是通過講解組件的屬性的意思來進展的,其實真正組件的使用上,通過這十幾篇文章想要掌握那肯定也不現實,只是說,我們通常在使用組件的時候,對于組件的理解,也會在一定程度上影響到我們對組件的使用,因此我自己會比較偏重組件的意思,以及一些重要屬性的理解和使用方法,
當然我也是進入游戲行業沒多久,還望無意點進博主這個小菜鳥文章的大佬們見諒,博主也一直在往這個方面一點點
的精進,希望粉絲也好,路人也好,還是要給博主一點點的時間的奧!你給我一點時間,我還你一片海洋(知識的海洋!Hhhhh…)
針對不想努力的朋友,博主也有一本書可以推薦!博主免費贈送!

如果博客博友對這個章節有更多的內容想要了解的,可以評論哈,等這一個章節結束后,我會根據評論反饋以及自己的能力,將評論中反饋的內容在下一個計劃中去制作出對應的內容的哈~
作者:ProMer_Wang
鏈接:https://blog.csdn.net/qq_43801020/article/details/120168893
本文為ProMer_Wang的原創文章,著作權歸作者所有,轉載請注明原文出處,歡迎轉載!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298739.html
標籤:其他
