Unity 簡(jiǎn)單的背包實(shí)現(xiàn)

使用Unity完成簡(jiǎn)單的背包功能

用UGUI布局成一下這個(gè)樣子


設(shè)置BackGround的tag為Bag?

Lft,Center,Right設(shè)置為Groove

所有的Item設(shè)置為BagItem

在BackGround中添加組件Grid Layout Group,使拖動(dòng)上去之后能夠正確排版

并且為所有item添加CanvasGroup組件,當(dāng)BlockRaycasts為false時(shí)使射線能夠穿透該物體,反則則不能

編寫腳本

在BackGround上掛載的腳本.m_BagPageMgr,這是一個(gè)管理類

using UnityEngine;

public class m_BagPageMgr : MonoBehaviour

{? ??

Transform _Panle; ? //保存Panle的Transform?

Transform BackGound; ? ?//保存BackGround的Transform

void Awake()? ??

{? ? ? ??

_Panle = transform.parent.GetComponent<Transform>(); ? ? ? //獲取到Transform組件

BackGound = GetComponent<Transform>();//獲取到Transform組件

Inst = this;//初始化實(shí)例

}

private m_BagPageMgr()//私有化構(gòu)造方法,使外部不能隨意實(shí)例化該類

{

}

static m_BagPageMgr Inst;//定義一個(gè)靜態(tài)的私有的實(shí)例

public static m_BagPageMgr Instance//使用屬性獲取上面的實(shí)例

{

get

{

return Inst;

}

}

public? Transform getPanle//使用屬性獲取Panle的Transform

{

get

{

return _Panle;

}

}

public Transform getBG//使用屬性獲取BackGround的Transform

{

get

{

return BackGound;

}

}

}

在Item上掛載的組件


using UnityEngine;

using UnityEngine.EventSystems;

public class m_ItemDarg : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler//繼承能夠?qū)崿F(xiàn)拖拽的接口

{? ??

CanvasGroup _canvasGroup;? ? //定義一個(gè)CanvasGroup的引用變量

Transform _selfParent; ? ?//這個(gè)用來保存當(dāng)前的父對(duì)象

void Awake()? ??

{? ? ? ??

_canvasGroup = transform.GetComponent();//獲取Item上的CanvasGroup組件

}

public void OnBeginDrag(PointerEventData eventData)//當(dāng)開始拖動(dòng)時(shí)調(diào)用該方法,且只調(diào)用一次

{

_selfParent = transform.parent;//記錄下當(dāng)前對(duì)象的父物體

_canvasGroup.blocksRaycasts = false;//使射線能夠穿過鼠標(biāo)拖拽的物體

transform.SetParent(m_BagPageMgr.Instance.getPanle.transform);//當(dāng)鼠標(biāo)開始拖拽時(shí),將其父物體設(shè)置為Panle,使其能夠顯示在在所有的游戲?qū)ο笊厦?/p>

}

public void OnDrag(PointerEventData eventData)//當(dāng)鼠標(biāo)正在拖動(dòng)時(shí)調(diào)用,在這期間該方法一直調(diào)用

{

transform.position = eventData.position;//使鼠標(biāo)拖拽的物體的位置等于鼠標(biāo)的位置

}

public void OnEndDrag(PointerEventData eventData)//當(dāng)鼠標(biāo)拖拽完成,松開鼠標(biāo)時(shí)執(zhí)行該方法,且只執(zhí)行一次

{

GameObject pointobj = eventData.pointerEnter;//獲取鼠標(biāo)拖拽的物體下面的游戲?qū)ο?/p>

if (pointobj == null)//當(dāng)該游戲?qū)ο鬄榭諘r(shí)

{

transform.SetParent(_selfParent);//將其返回至原來的位置,也就是將其父對(duì)象設(shè)置成初始的父對(duì)象

transform.localPosition = Vector3.zero;//坐標(biāo)歸零

}

else if (pointobj.tag == "Bag")//當(dāng)射線檢測(cè)到的是BackGround時(shí)

{

transform.SetParent(m_BagPageMgr.Instance.getBG.transform);//將其父物體設(shè)置為BackGround

transform.localPosition = Vector3.zero;

}

else if (pointobj.tag == "Groove")//當(dāng)射線檢測(cè)到的是Lft,Center,Right,這三個(gè)的時(shí)候

{

transform.SetParent(pointobj.transform);//將該物體的父物體設(shè)置為檢測(cè)到的物體

transform.localPosition = Vector3.zero;

}

else if (pointobj.tag == "BagItem")//當(dāng)射線檢測(cè)到的是Item時(shí),交換兩個(gè)的父物體

{

transform.SetParent(pointobj.transform.parent);

transform.localPosition = Vector3.zero;

pointobj.transform.SetParent(_selfParent);

pointobj.transform.localPosition = Vector3.zero;

}

else//以上都不滿足時(shí),這是我們并不期望的一個(gè)結(jié)果,所以返回初始的父對(duì)象

{

transform.SetParent(_selfParent);

transform.localPosition = Vector3.zero;

}

_canvasGroup.blocksRaycasts = true;//使射線不能穿過Item,也就是不能檢測(cè)到Item下面的物體

}

}

最后編輯于
?著作權(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)離奇詭異骏庸,居然都是意外死亡戚啥,警方通過查閱死者的電腦和手機(jī)杂数,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宛畦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揍移,你說我怎么就攤上這事次和。” “怎么了那伐?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵踏施,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我罕邀,道長(zhǎng)畅形,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任诉探,我火速辦了婚禮束亏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阵具。我一直安慰自己碍遍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布阳液。 她就那樣靜靜地躺著怕敬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帘皿。 梳的紋絲不亂的頭發(fā)上东跪,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音鹰溜,去河邊找鬼虽填。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曹动,可吹牛的內(nèi)容都是我干的斋日。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼墓陈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼恶守!你這毒婦竟也來了第献?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤兔港,失蹤者是張志新(化名)和其女友劉穎庸毫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一刁俭、第九天 我趴在偏房一處隱蔽的房頂上張望橄仍。 院中可真熱鬧,春花似錦牍戚、人聲如沸侮繁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宪哩。三九已至,卻和暖如春第晰,著一層夾襖步出監(jiān)牢的瞬間锁孟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工茁瘦, 沒想到剛下飛機(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)容