UGUI(背包實(shí)現(xiàn))

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的背包功能(可以拖動(dòng)物體续扔,如果不屬于有效范圍會(huì)自動(dòng)返回原來(lái)父物體的下面)


圖1-1最終效果圖

布局格式

BagPackUI是一個(gè)panel控件

BagGrid:空物體

bag_bg:背景

Item:物體需添加圖1-2所示組件(Canvas Group組件)

當(dāng)Blacks Raycasts=false時(shí)射線可以檢測(cè)到下一層物體為true是不可以檢測(cè)下一層

圖1-2

布局層次如圖1-3所示

圖1-3

實(shí)現(xiàn)代碼

管理類

using UnityEngine;

using System.Collections;

public class BagPackMgr : MonoBehaviour{??

? //tag標(biāo)簽的常量字符串? ?

?public const string groove = "groove";?

?? public const string bagpackItem = "bagpackItem";??

? public const string bag = "bag";? ?

?Canvas GlobalCanvas;//畫布??

? Transform BagGrid;//背包的道具父物體??

? //單件模式(單例模式)

? ? static BagPackMgr Inst;?

?? public static BagPackMgr Instance? ? {? ??

? ? get? ? ? ? {? ? ? ??

? ? return Inst;? ??

? ? }? ??

}? ?

?void Awake()? ? {? ? ? ?

?Inst = this;? ? ? ?

GlobalCanvas = transform.parent.GetComponent();

BagGrid = transform.Find("BagGrid");

}

public Canvas getGlobalCanvas

{

get {

return GlobalCanvas;

}

}

public Transform GetBagGrid

{

get {

return BagGrid;

}

ItemDrag類

ItemDrag類

using UnityEngine;

using System.Collections;

using UnityEngine.EventSystems;

using System;

public class ItemDrag : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler {??

? Transform _saveSelfParent;//保存自己的父物體? ?

?CanvasGroup _canvasGroup;//CanvasGroup組件??

//鼠標(biāo)點(diǎn)的那一幀執(zhí)行

? public void OnBeginDrag(PointerEventData eventData)??

? {? ? ?

?? _canvasGroup = GetComponent();

_canvasGroup.blocksRaycasts = false;//不阻擋向下檢測(cè)控件

_saveSelfParent = transform.parent;//將該物體的父物體保存在_saveSelfParent中

//設(shè)置父物體為畫布Canvas

transform.SetParent(BagPackMgr.Instance.getGlobalCanvas.transform);

}

//拖動(dòng)的過(guò)程中執(zhí)行

public void OnDrag(PointerEventData eventData)

{

transform.position = eventData.position;//當(dāng)下的位置賦給該物體(物體隨鼠標(biāo)移動(dòng))

}

//拖動(dòng)結(jié)束時(shí)執(zhí)行

public void OnEndDrag(PointerEventData eventData)

{

GameObject pointEenterobj = eventData.pointerEnter;

//空白出或外面,非響應(yīng)區(qū)域

if (pointEenterobj == null)

{

transform.SetParent(_saveSelfParent);

transform.localPosition = Vector3.zero;

}

//拖動(dòng)到了裝備欄

else if (pointEenterobj.tag == BagPackMgr.groove)

{

transform.SetParent(pointEenterobj.transform);

transform.localPosition = Vector3.zero;

}

//拖到了道具上(交換位置)

else if (pointEenterobj.tag == BagPackMgr.bagpackItem)

{

transform.SetParent(pointEenterobj.transform.parent);

transform.localPosition = Vector3.zero;

pointEenterobj.transform.SetParent(_saveSelfParent);

pointEenterobj.transform.localPosition = Vector3.zero;

}

//卸下道具

else if (pointEenterobj.tag == BagPackMgr.bag)

{

transform.SetParent(BagPackMgr.Instance.GetBagGrid);

transform.localPosition = Vector3.zero;

}

//射線檢測(cè)到了物體,但是不是我們邏輯需要的三種類型(無(wú)效操作)

else

{

transform.SetParent(_saveSelfParent);

transform.localPosition = Vector3.zero;

}

//重置射線檢測(cè)

_canvasGroup.blocksRaycasts = true;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歼冰,更是在濱河造成了極大的恐慌,老刑警劉巖耻警,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔嫡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡甘穿,警方通過(guò)查閱死者的電腦和手機(jī)腮恩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)温兼,“玉大人秸滴,你說(shuō)我怎么就攤上這事》镣校” “怎么了缸榛?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵吝羞,是天一觀的道長(zhǎng)兰伤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钧排,這世上最難降的妖魔是什么敦腔? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮恨溜,結(jié)果婚禮上符衔,老公的妹妹穿的比我還像新娘。我一直安慰自己糟袁,他們只是感情好判族,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著项戴,像睡著了一般形帮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天辩撑,我揣著相機(jī)與錄音界斜,去河邊找鬼。 笑死合冀,一個(gè)胖子當(dāng)著我的面吹牛各薇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播君躺,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼峭判,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了棕叫?” 一聲冷哼從身側(cè)響起朝抖,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谍珊,沒(méi)想到半個(gè)月后治宣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砌滞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年侮邀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝润。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绊茧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出打掘,到底是詐尸還是另有隱情华畏,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布尊蚁,位于F島的核電站亡笑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏横朋。R本人自食惡果不足惜仑乌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琴锭。 院中可真熱鬧晰甚,春花似錦、人聲如沸决帖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)地回。三九已至扁远,卻和暖如春腺阳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穿香。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工亭引, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人皮获。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓焙蚓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洒宝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子购公,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容