欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Unity中怎么實現(xiàn)新手引導鏤空效果

Unity中怎么實現(xiàn)新手引導鏤空效果,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供張北企業(yè)網站建設,專注與成都網站制作、成都網站設計、H5建站、小程序制作等業(yè)務。10年已為張北眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網絡公司優(yōu)惠進行中。

一、實現(xiàn)思路

創(chuàng)建有8個頂點的Mesh,內外邊界都是四邊形(矩形)。只生成內、外邊之間的Mesh,內層矩形就產生了鏤空部分,外層的4個頂點,是組件自身RectTransform的四個頂點,內層的4個頂點,使用鏤空目標(_target)RectTransform的四個頂點。確定內層的頂點的時候需要注意,多數(shù)情況下_target和HollowOutMask都不在同一個本地坐標空間,所以需要使用CalculateRelativeRectTransformBounds計算出HollowOutMask空間下坐標這種鏤空的表現(xiàn),可以稍稍提高下性能。因為鏤空的位置不參與渲染,Overdraw會降低

UGUI提供了ICanvasRaycastFilter接口,我們實現(xiàn)IsRaycastLocationValid方法,就可以很方便的控制HollowOutMask是否要攔截下在某一點觸發(fā)的事件

二、這個組件的作用

這個組件做了兩件事情:表現(xiàn)上鏤空一塊區(qū)域和不攔截鏤空范圍上的事件

三、代碼實現(xiàn)

using UnityEngine;using UnityEngine.UI; /// <summary>/// 實現(xiàn)鏤空效果的Mask組件/// </summary>public class HollowOutMask : MaskableGraphic, ICanvasRaycastFilter{ [SerializeField] private RectTransform _target;  private Vector3 _targetMin = Vector3.zero; private Vector3 _targetMax = Vector3.zero;  private bool _canRefresh = true; private Transform _cacheTrans = null;  /// <summary> /// 設置鏤空的目標 /// </summary> public void SetTarget(RectTransform target) { _canRefresh = true; _target = target; _RefreshView(); }  private void _SetTarget(Vector3 tarMin, Vector3 tarMax) { if (tarMin == _targetMin && tarMax == _targetMax)  return; _targetMin = tarMin; _targetMax = tarMax; SetAllDirty(); }  private void _RefreshView() { if (!_canRefresh) return; _canRefresh = false;  if (null == _target) {  _SetTarget(Vector3.zero, Vector3.zero);  SetAllDirty(); } else {  Bounds bounds = RectTransformUtility.CalculateRelativeRectTransformBounds(_cacheTrans, _target);  _SetTarget(bounds.min, bounds.max); } }  protected override void OnPopulateMesh(VertexHelper vh) { if (_targetMin == Vector3.zero && _targetMax == Vector3.zero) {  base.OnPopulateMesh(vh);  return; }  vh.Clear();  // 填充頂點 UIVertex vert = UIVertex.simpleVert; vert.color = color;  Vector2 selfPiovt = rectTransform.pivot; Rect selfRect = rectTransform.rect; float outerLx = -selfPiovt.x * selfRect.width; float outerBy = -selfPiovt.y * selfRect.height; float outerRx = (1 - selfPiovt.x) * selfRect.width; float outerTy = (1 - selfPiovt.y) * selfRect.height; // 0 - Outer:LT vert.position = new Vector3(outerLx, outerTy); vh.AddVert(vert); // 1 - Outer:RT vert.position = new Vector3(outerRx, outerTy); vh.AddVert(vert); // 2 - Outer:RB vert.position = new Vector3(outerRx, outerBy); vh.AddVert(vert); // 3 - Outer:LB vert.position = new Vector3(outerLx, outerBy); vh.AddVert(vert);  // 4 - Inner:LT vert.position = new Vector3(_targetMin.x, _targetMax.y); vh.AddVert(vert); // 5 - Inner:RT vert.position = new Vector3(_targetMax.x, _targetMax.y); vh.AddVert(vert); // 6 - Inner:RB vert.position = new Vector3(_targetMax.x, _targetMin.y); vh.AddVert(vert); // 7 - Inner:LB vert.position = new Vector3(_targetMin.x, _targetMin.y); vh.AddVert(vert);  // 設定三角形 vh.AddTriangle(4, 0, 1); vh.AddTriangle(4, 1, 5); vh.AddTriangle(5, 1, 2); vh.AddTriangle(5, 2, 6); vh.AddTriangle(6, 2, 3); vh.AddTriangle(6, 3, 7); vh.AddTriangle(7, 3, 0); vh.AddTriangle(7, 0, 4); }  bool ICanvasRaycastFilter.IsRaycastLocationValid(Vector2 screenPos, Camera eventCamera) { if (null == _target) return true; // 將目標對象范圍內的事件鏤空(使其穿過) return !RectTransformUtility.RectangleContainsScreenPoint(_target, screenPos, eventCamera); }  protected override void Awake() { base.Awake(); _cacheTrans = GetComponent<RectTransform>(); } #if UNITY_EDITOR void Update() { _canRefresh = true; _RefreshView(); }#endif}

看完上述內容,你們掌握Unity中怎么實現(xiàn)新手引導鏤空效果的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當前題目:Unity中怎么實現(xiàn)新手引導鏤空效果
當前網址:http://www.aaarwkj.com/article32/pdeesc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT定制開發(fā)、用戶體驗、App開發(fā)、關鍵詞優(yōu)化、微信公眾號

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司
韩国午夜理伦三级好看| 亚洲国产成人不卡高清麻豆| 国产视频一区2区三区| 国产三级黄色片免费看| 国产手机在线91精品观看| 超碰97国产资源在线| 性激烈的欧美三级男同| 特级特色生活片免费看| 91欧美视频在线观看| 亚洲av毛片在线网站| 久久热久久热在线视频| 国产精品一区巨乳人妻| 一区二区五区日韩国产| 久久久久精品激情三级| 国产精品视频一区二区久久| 中文字幕亚洲无级av| 年轻的母亲韩国三级| 国产夫妻自拍一级黄片| 91在线视频国产网站| 男人自拍天堂在线视频| 日韩一区二区三区成人| 欧美精品黑人三级精品| 国产精品毛片一区二区三| 国产精品一区二区黑人巨大| 欧美激情网页一区三区| 久久精品亚洲欧美激情| 嫩草网站国产精品一区二| 成年免费视频一区二区三区| 黄片大全视频在线免费观看| 日本精品三级一区二区视频| 日本免费一区二区三区四区视频| 亚洲精品你懂的av在线| 热久久精品只有这里有| 欧美激情在线精品一区二区| 日韩国产人妻一区二区| 亚洲国产精品一区二区首页| 中文字幕变态另类一区二区| 日本女优邻居人妻中文字幕| 日本在线看片一区二区| 久久五十路初次拍五十路| 人妖激情一区二区三区|