溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UGUI使用遇到問題總結(jié)

發(fā)布時間:2020-07-24 08:47:05 來源:網(wǎng)絡 閱讀:992 作者:寧金峰 欄目:建站服務器

Image組件:動態(tài)改變Source Image.
1.gameObject.GetComponent().p_w_picpath.sprite = YourSprite;   (YourSPrite的獲取方法有我是在前面定義Spites數(shù)組,拉圖片入去的.有更好的方法請告訴我..)
2.gameObject.GetComponent.<Image>().sprite= Resources.Load("img/test/short/short_run_right",typeof(Sprite));
Resources.Load是讀取Resources文件夾里的文件
真心好麻煩,求unity出方便點的方法....

我相信剛開始大家都會遇到這個[color=rgb(85, 85, 85) !important]問題....

任務系統(tǒng)點擊Button按鈕,角色執(zhí)行了移動命令.解決方法如下
if (EventSystem.current.IsPointerOverGameObject())
        Debug.Log("當前觸摸在UI上");                        
else Debug.Log("當前沒有觸摸在UI上");
安卓手機以上方法無效,詳細方法
http://forum.[color=rgb(85, 85, 85) !important]unity3d.com/threads/ispointerovereventsystemobject-always-returns-false-on-mobile.265372/

我復制了過來:

void Update ()
{
               if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) {
                        if (IsPointerOverGameObject (Input.GetTouch (0).fingerId)) {
                                Debug.Log("Hit UI, Ignore Touch");
                        } else {
                                Debug.Log("Handle Touch");
                        }
               }        
}

bool IsPointerOverGameObject( int fingerId )
{
    EventSystem eventSystem = EventSystem.current;
    return ( eventSystem.IsPointerOverGameObject( fingerId )
        && eventSystem.currentSelectedGameObject != null );
}



Event Trigger處理各種點擊拖拽事件
Canvas處理層級
Graphic Raycaster處理事件響應先后,2個canvas組件時候必須要用,否則一個canvas不響應鼠標事件

渲染層級順序:
Camera
softing Layer
softing order


ugui背包系統(tǒng)
射線檢測:物品本身需要添加的組件:Graphic Raycaster  ,  Canvas Group,  Canvas  ,移動物品的代碼

Graphic Raycaster用來檢測鼠標射線,判斷是否點擊了物品
Canvas Group  在移動物品的代碼中設置其中參數(shù)Blocks Raycasts的值.讓event trigger忽略自身,這樣才可以讓event trigger檢測到它下面一層的對象,如包裹或物品格子
Canvas 你不加這個用不了Canvas Group
public void OnBeginDrag(PointerEventData eventData)   eventData即為射線檢測碰到的東西
layermask使只有某層能接收.


在兩個圖之間插一個圖
GameObject button =         GameObject.Instantiate(Resources.Load<GameObject>("button"))as GameObject;
button.transform.parent = transform;
button.transform.localPosition = Vector3.zero;
button.transform.localScale = Vector3.one;
GameObject AObj = transform.Find("A").gameObject;
GameObject BObj = transform.Find("B").gameObject;
button.transform.SetSiblingIndex(AObj.transform.GetSiblingIndex());


間接實現(xiàn)雙擊使用物品     
      前面2個方法是必須使用的,否則第3個方法無法正常使用.OnPointerEnter是在鼠標進入一瞬間執(zhí)行代碼,這得什么手速啊..設置blocksRaycasts變?yōu)閒alse的時候鼠標射線穿透,再變了true即為鼠標射線再次碰到物品,此時再點擊一下物品即可.

    public void OnPointerDown(PointerEventData eventData)       
    {
        canvasGroup.blocksRaycasts = false;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        canvasGroup.blocksRaycasts = true;
    }

        public void OnPointerEnter(PointerEventData eventData){
         if (Input.GetMouseButtonDown(1))
        {
            使用的代碼
        }
}

當然,這個方法有點奇怪,我也是偶然發(fā)現(xiàn)的..還是自己乖乖寫一個吧.提供下思路,用bool判斷是否點擊第1次,弄一個delay參數(shù)作為第1次點擊到第2次點擊的間隔.

滑動框
1.建一個Image命名Mask,在Mask里添加ScrollRect和Mask這2個組件.
2.在Mask里創(chuàng)建一個空的GameObject命名ScrollContent,拉進ScrollRect的Content中.添加控件Vertical Layout Group(垂直分布,自動處理).但ScrollContent并不會自動擴大.在代碼中調(diào)用GetComponent<RectTransform>().sizeDelta即可動態(tài)改變其寬高.
3.創(chuàng)建一個Prefab通過代碼動態(tài)添加進ScrollDetails中.


p_w_picpath中的九宮格sliced邊框在原圖SpriteEditor中設置.


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI