Unity?UGUI的MaskableGraphic可遮罩圖形組件介紹使用
Unity UGUI的MaskableGraphic(可遮罩圖形)組件的介紹及使用
1. 什么是MaskableGraphic組件?
MaskableGraphic是Unity UGUI中的一個(gè)組件,用于實(shí)現(xiàn)圖形的遮罩效果。通過(guò)該組件,我們可以將一個(gè)圖形對(duì)象的顯示范圍限制在一個(gè)指定的區(qū)域內(nèi),從而實(shí)現(xiàn)遮罩效果。
2. MaskableGraphic組件的工作原理
MaskableGraphic組件的工作原理是通過(guò)將圖形對(duì)象與遮罩對(duì)象進(jìn)行相交運(yùn)算,將圖形對(duì)象的顯示范圍限制在遮罩對(duì)象的范圍內(nèi)。具體的工作流程如下:
- 首先,將遮罩對(duì)象設(shè)置為圖形對(duì)象的父對(duì)象,并將遮罩對(duì)象的RectTransform組件的大小設(shè)置為所需的遮罩范圍。
- 然后,將圖形對(duì)象的MaskableGraphic組件的屬性設(shè)置為true,表示該圖形對(duì)象可被遮罩。
- 最后,將圖形對(duì)象的RectTransform組件的位置和大小設(shè)置為所需的顯示位置和大小。
3. MaskableGraphic組件的常用屬性
- maskable:是否可被遮罩,設(shè)置為true表示可被遮罩,設(shè)置為false表示不可被遮罩。
- maskMaterial:遮罩使用的材質(zhì)。
- maskInteraction:遮罩的交互方式,可選值有None、VisibleInsideMask和VisibleOutsideMask。
4. MaskableGraphic組件的常用函數(shù)
- SetMaterialDirty():標(biāo)記材質(zhì)為臟,使其在下一幀重新渲染。
- SetVerticesDirty():標(biāo)記頂點(diǎn)為臟,使其在下一幀重新生成。
- SetLayoutDirty():標(biāo)記布局為臟,使其在下一幀重新布局。
- SetAllDirty():標(biāo)記所有屬性為臟,使其在下一幀重新渲染、生成和布局。
5. 完整例子代碼
例子1:創(chuàng)建一個(gè)遮罩圖形
using UnityEngine;
using UnityEngine.UI;
public class Example1 : MonoBehaviour
{
public GameObject maskObject;
public GameObject graphicObject;
private void Start()
{
graphicObject.transform.SetParent(maskObject.transform);
graphicObject.GetComponent<MaskableGraphic>().maskable = true;
}
}操作步驟:
- 創(chuàng)建一個(gè)空的GameObject,命名為MaskObject。
- 創(chuàng)建一個(gè)需要遮罩的圖形對(duì)象,命名為GraphicObject。
- 將GraphicObject的MaskableGraphic組件的maskable屬性設(shè)置為true。
- 將GraphicObject的父對(duì)象設(shè)置為MaskObject。
例子2:設(shè)置遮罩使用的材質(zhì)
using UnityEngine;
using UnityEngine.UI;
public class Example2 : MonoBehaviour
{
public GameObject maskObject;
public GameObject graphicObject;
public Material maskMaterial;
private void Start()
{
graphicObject.transform.SetParent(maskObject.transform);
MaskableGraphic maskableGraphic = graphicObject.GetComponent<MaskableGraphic>();
maskableGraphic.maskable = true;
maskableGraphic.maskMaterial = maskMaterial;
}
}操作步驟:
- 創(chuàng)建一個(gè)空的GameObject,命名為MaskObject。
- 創(chuàng)建一個(gè)需要遮罩的圖形對(duì)象,命名為GraphicObject。
- 將GraphicObject的MaskableGraphic組件的maskable屬性設(shè)置為true。
- 將GraphicObject的MaskableGraphic組件的maskMaterial屬性設(shè)置為所需的材質(zhì)。
- 將GraphicObject的父對(duì)象設(shè)置為MaskObject。
例子3:設(shè)置遮罩的交互方式
using UnityEngine;
using UnityEngine.UI;
public class Example3 : MonoBehaviour
{
public GameObject maskObject;
public GameObject graphicObject;
private void Start()
{
graphicObject.transform.SetParent(maskObject.transform);
MaskableGraphic maskableGraphic = graphicObject.GetComponent<MaskableGraphic>();
maskableGraphic.maskable = true;
maskableGraphic.maskInteraction = MaskableGraphic.MaskInteraction.VisibleInsideMask;
}
}操作步驟:
- 創(chuàng)建一個(gè)空的GameObject,命名為MaskObject。
- 創(chuàng)建一個(gè)需要遮罩的圖形對(duì)象,命名為GraphicObject。
- 將GraphicObject的MaskableGraphic組件的maskable屬性設(shè)置為true。
- 將GraphicObject的MaskableGraphic組件的maskInteraction屬性設(shè)置為所需的交互方式。
- 將GraphicObject的父對(duì)象設(shè)置為MaskObject。
例子4:標(biāo)記材質(zhì)為臟
using UnityEngine;
using UnityEngine.UI;
public class Example4 : MonoBehaviour
{
public GameObject graphicObject;
private void Update()
{
graphicObject.GetComponent<MaskableGraphic>().SetMaterialDirty();
}
}操作步驟:
- 創(chuàng)建一個(gè)需要遮罩的圖形對(duì)象,命名為GraphicObject。
- 在Update函數(shù)中調(diào)用GraphicObject的MaskableGraphic組件的SetMaterialDirty函數(shù)。
例子5:標(biāo)記頂點(diǎn)為臟
using UnityEngine;
using UnityEngine.UI;
public class Example5 : MonoBehaviour
{
public GameObject graphicObject;
private void Update()
{
graphicObject.GetComponent<MaskableGraphic>().SetVerticesDirty();
}
}操作步驟:
- 創(chuàng)建一個(gè)需要遮罩的圖形對(duì)象,命名為GraphicObject。
- 在Update函數(shù)中調(diào)用GraphicObject的MaskableGraphic組件的SetVerticesDirty函數(shù)。
注意事項(xiàng)
- 遮罩對(duì)象的RectTransform組件的大小應(yīng)與遮罩范圍一致,否則可能導(dǎo)致遮罩效果不準(zhǔn)確。
- 遮罩對(duì)象和圖形對(duì)象的層級(jí)關(guān)系應(yīng)正確設(shè)置,否則可能導(dǎo)致遮罩效果無(wú)法生效。
- 遮罩對(duì)象和圖形對(duì)象的位置和大小應(yīng)正確設(shè)置,否則可能導(dǎo)致遮罩效果不符合預(yù)期。
參考資料
Unity官方文檔:MaskableGraphic
以上就是Unity UGUI的MaskableGraphic可遮罩圖形組件介紹使用的詳細(xì)內(nèi)容,更多關(guān)于Unity UGUI可遮罩圖形組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Unity UGUI的Outline描邊組件的介紹使用示例
- Unity UGUI Shadow陰影組件的介紹使用示例
- Unity UGUI LayoutRebuilder自動(dòng)重建布局介紹及使用
- Unity?UGUI的PhysicsRaycaster物理射線檢測(cè)組件介紹使用
- Unity?UGUI的VerticalLayoutGroup垂直布局組件介紹使用
- Unity UGUI的HorizontalLayoutGroup水平布局組件介紹使用
- Unity?UGUI的CanvasScaler畫布縮放器組件介紹使用
- Unity UGUI的EventTrigger事件監(jiān)聽器組件介紹使用示例
相關(guān)文章
C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法
這篇文章主要介紹了C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法,涉及C#操作URL的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
協(xié)定需要會(huì)話,但是綁定“BasicHttpBinding”不支持它或者因配置不正確而無(wú)法支持它
在IIS7及以上版本服務(wù)器中提供了基于WAS的無(wú).SVC文件的WCF服務(wù)激活功能,能夠提供基于HTTP和非HTTP協(xié)議的訪問(wèn),通過(guò)添加Windows Server AppFabric可以更方便的管理WCF服務(wù)2012-12-12
C# WPF上位機(jī)實(shí)現(xiàn)和下位機(jī)TCP通訊的方法
這篇文章主要介紹了C# WPF上位機(jī)實(shí)現(xiàn)和下位機(jī)TCP通訊的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
WPF運(yùn)行時(shí)替換方法實(shí)現(xiàn)mvvm自動(dòng)觸發(fā)刷新
這篇文章主要為大家詳細(xì)介紹了WPF運(yùn)行時(shí)如何實(shí)現(xiàn)setter不需要調(diào)方法就可以自動(dòng)觸發(fā)界面刷新,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
C#如何通過(guò)probing指定dll尋找文件夾詳解
這篇文章主要給大家介紹了關(guān)于C#如何通過(guò)probing指定dll尋找文件夾的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
Jquery+Ajax+Json+存儲(chǔ)過(guò)程實(shí)現(xiàn)高效分頁(yè)
這篇文章主要介紹Jquery+Ajax+Json+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè),需要的朋友可以參考下2015-08-08
C#與PHP的md5計(jì)算結(jié)果不同的解決方法
今天在用C#接入我的登錄api發(fā)現(xiàn)了一個(gè)問(wèn)題,登陸的時(shí)候無(wú)論如何都會(huì)出現(xiàn)用戶名和密碼錯(cuò)誤的問(wèn)題,后來(lái)通過(guò)查找排除找的了問(wèn)題的原因是因?yàn)镃#與PHP的md5計(jì)算結(jié)果不同導(dǎo)致的,下面就來(lái)看看如何解決這個(gè)問(wèn)題吧。2016-12-12

