林書浩
摘 要 Unity 3D是一個(gè)可以讓玩家輕松制作各類三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開發(fā)工具,它可以運(yùn)行在Windows、Linux等多個(gè)平臺(tái)上,用它制作的游戲可以在Windows、Mac、iPhone、Android等多個(gè)平臺(tái)上運(yùn)行??ㄅ朴螒蜃鳛楫?dāng)今世界上的一大主流游戲類型,無(wú)疑占據(jù)了偌大的游戲市場(chǎng)的半壁江山,而集換式卡牌游戲游戲因其豐富有趣的游戲性引起了人們的高度重視。本文主要講述了使用Unity 3D制作一款卡牌游戲并詳細(xì)地概述了Unity 3D的制作流程。
關(guān)鍵詞 Unity 3D;卡牌游戲;游戲制作
引言
當(dāng)今社會(huì)上人們的壓力也可以說(shuō)是越來(lái)越大了,人們通過(guò)工作、學(xué)習(xí)說(shuō)積攢的工作壓力需要得到發(fā)泄,但是不正當(dāng)?shù)陌l(fā)泄手段會(huì)導(dǎo)致人們收到經(jīng)濟(jì)、輿論甚至是法律的制裁,而這時(shí)候游戲也應(yīng)運(yùn)而生。
在現(xiàn)在人們的生存壓力已經(jīng)大大減少了,人們可以更加輕松的生存下來(lái),但是人們的心理壓力卻越來(lái)越大,心理壓力雖然平時(shí)不顯山露水,但是若是堆積過(guò)多輕則抑郁寡歡,重則會(huì)積勞成疾。所以排泄心理壓力已經(jīng)成為人們不得不重視的一個(gè)行為。
1Unity引擎簡(jiǎn)述
Unity 3D有著功能強(qiáng)大的編輯器,使得游戲的制作不再枯燥無(wú)味,同時(shí)它可以讓作者更加直觀地查看游戲各個(gè)元素的屬性。這就使得制作者可以更加清晰的了解游戲的結(jié)構(gòu),達(dá)成可視化的操作。最重要的是Unity 3D引擎在編輯的時(shí)候并不需要通過(guò)編寫腳本來(lái)調(diào)用需要使用到的文件,只需要托拽這些文件就可以使用這些項(xiàng)目工程中的文件。Unity 3D還給制作者提供了大量實(shí)用的開發(fā)工具,可以通過(guò)調(diào)用這些工具的屬性直接達(dá)成項(xiàng)目屬性的修改不需要在進(jìn)行自定義操作,這些都可以使得開發(fā)人員在開發(fā)游戲的時(shí)候節(jié)省大量時(shí)間。
2游戲制作流程
我使用了Unity 3D引擎自帶的畫布功能,我在畫布上面添加了Sprite圖集精靈其功能主要是用于存儲(chǔ)與顯示圖片。
可以通過(guò)添加button控件來(lái)使某項(xiàng)東西可以獲得點(diǎn)擊效果,配合相應(yīng)的代碼就可以達(dá)成點(diǎn)擊事件。
制作者還可以將代碼直接拖入到自定義的組件下面這樣就可以直接通過(guò)組件來(lái)使用代碼的內(nèi)容。
制作者可以使用event trigger控件來(lái)實(shí)現(xiàn)鼠標(biāo)移動(dòng)的各種效果,可以通過(guò)添加新的Event Type并將需要操作的物體拖入對(duì)應(yīng)的事件框中,并將對(duì)應(yīng)代碼拖入其中就可以實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)的效果了。
2.1 拖拽卡牌會(huì)移動(dòng)
在前面的event trigger控件上添加Drag事件就可以通過(guò)下列代碼實(shí)現(xiàn)拖拽卡牌的效果。將下列代碼同樣輸入到card的類中。并將該物體拖拽到Drag事件集中選中該方法就可以實(shí)現(xiàn)拖拽移動(dòng)的效果,具體代碼如下OnMouseDrag()方法[1]。
public void OnMouseDrag()
{
//判斷onTimeCard中與cards組件下是否有卡牌
If (Control.onTimeCard != null && Control.onTimeCard !=this.gameObject)
{
return;
}
//該卡牌位置等于鼠標(biāo)位置。
transform.position = Input.mousePosition;
transform.SetParent(GameObject.Find(“TempCard”).transform);
//當(dāng)該卡牌的中點(diǎn)位置與tx組件中點(diǎn)位置相差小于200時(shí)
if(Vector3.Distance(transform.position, tx.position)<200)
{
tx.gameObject.SetActive(true);
}else
{
tx.gameObject.SetActive(false);
}
}
2.2 松開鼠標(biāo)會(huì)回到卡組
在前面的event trigger控件上添加Up事件就可以通過(guò)下面代碼來(lái)實(shí)現(xiàn)在拖拽卡牌時(shí)松開鼠標(biāo)的相應(yīng)效果了。同樣先將該組件拖拽到Up事件集下面,在選中card類下的該方法就可以實(shí)現(xiàn)松開鼠標(biāo)的相應(yīng)效果了[2]。
public void OnMouseUp()
{
if (Vector3.Distance(transform.position, tx.position) < 200){
transform.position = tx.position;
Control.onTimeCard = this.gameObject;
}
else{
transform.SetParent(GameObject.Find(“cards”).transform);
if (Control.onTimeCard == this.gameObject)
{
Control.onTimeCard = null;
}
}
}
2.3 刷新手牌
當(dāng)游戲的下個(gè)回合開始時(shí)玩家手上的卡牌應(yīng)該從新刷新。在Control類中編寫下列代碼實(shí)現(xiàn)控制游戲進(jìn)程的效果。因?yàn)镃ontrol類已經(jīng)綁定在了ScriptsControl組件上,所以只需要在next組件上添加button控件,再在上面添加新的OnClick事件直接將已經(jīng)綁定Control類的ScriptsControl組件拖入到OnClick事件并選擇相應(yīng)的方法就可以實(shí)現(xiàn)刷新手卡的效果。相應(yīng)代碼如下。