版本記錄
| 版本號 | 時(shí)間 |
|---|---|
| V1.0 | 2018.12.10 星期一 |
前言
Unity是由Unity Technologies開發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個(gè)全面整合的專業(yè)游戲引擎。Unity類似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件。其編輯器運(yùn)行在Windows 和Mac OS X下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平臺。也可以利用Unity web player插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。它的網(wǎng)頁播放器也被Mac 所支持。網(wǎng)頁游戲 坦克英雄和手機(jī)游戲王者榮耀都是基于它的開發(fā)。
下面我們就一起開啟Unity之旅。感興趣的看下面幾篇文章。
1. Unity開啟篇(一) —— Unity界面及創(chuàng)建第一個(gè)簡單的游戲 (一)
2. Unity開啟篇(二) —— Unity界面及創(chuàng)建第一個(gè)簡單的游戲 (二)
3. Unity開啟篇(三) —— 一款簡單射擊游戲示例 (一)
開始
首先看下寫作環(huán)境
C# 7.2, Unity 2018.1, Unity
在我們的Unity教程系列的第二部分中,您將學(xué)習(xí)如何使用C#從頭開始制作Unity中的第一個(gè)游戲:一個(gè)名為Bobblehead Wars的雙棒射擊游戲!
在這個(gè)系列的第一個(gè)教程中,我們制作了勇敢的英雄,但是還沒有碰到過外星敵人。
在本教程中,您將實(shí)現(xiàn)他的夢想。 但是,首先,您必須了解一個(gè)關(guān)鍵概念:GameObjects。
注意:本教程項(xiàng)目將繼續(xù)前一個(gè)教程停止的地方。 如果您沒有跟進(jìn),可以參考上面一篇文章。
Introducing GameObjects - 引入GameObjects
在Unity中,游戲場景包(game scenes)含具有您永遠(yuǎn)不會猜到的名稱的對象:GameObjects。
你的玩家有游戲?qū)ο螅庑侨?,屏幕上的子彈,?shí)際的等級幾何 - 基本上都是游戲本身GameObjects。
就像項(xiàng)目瀏覽器包含所有資源一樣,層次結(jié)構(gòu)包含場景中的GameObjects列表。
要看到這一點(diǎn),你需要讓你的項(xiàng)目打開,如果它還沒有打開,現(xiàn)在就打開。
注意:
Unity打開項(xiàng)目文件的方式有點(diǎn)奇怪。您可以導(dǎo)航文件系統(tǒng)并查找場景文件。雙擊場景,然后Unity將打開統(tǒng)一歡迎。在該屏幕中,您可以選擇要打開的項(xiàng)目。或者,如果您啟動(dòng)Unity或單擊
File \ Open Project,您將看到項(xiàng)目列表。選擇所需的項(xiàng)目,Unity將負(fù)責(zé)其余的工作。如果未列出您的項(xiàng)目,請單擊
Open按鈕以顯示系統(tǒng)對話框。嘗試導(dǎo)航到Unity項(xiàng)目的頂級目錄,然后單擊Select Folder,而不是搜索特定文件。引擎將檢測文件夾中的Unity項(xiàng)目并將其打開。
當(dāng)您打開較舊的Unity項(xiàng)目時(shí),您可能會收到Unity的警告,該項(xiàng)目是使用較舊版本的Unity創(chuàng)建的。所有這些意味著Unity可能會重新導(dǎo)入您的所有資產(chǎn)。也就是說,它將為您的所有資產(chǎn)創(chuàng)建新的元數(shù)據(jù)。毋庸置疑,對于大型游戲而言,這種重新導(dǎo)入可能需要很長時(shí)間。此外,由于Unity正在更新您的項(xiàng)目,您應(yīng)該始終先備份。

項(xiàng)目打開后,請查看您的層次結(jié)構(gòu)并計(jì)算GameObjects。

你的第一個(gè)想法可能是三個(gè)因?yàn)槟阍谇耙粋€(gè)教程中添加了三個(gè)GameObjects:space marine body and space marine head。
但是,還有另外兩個(gè)游戲?qū)ο螅?code>Main Camera和Directional Light。 還記得Unity默認(rèn)創(chuàng)建它們的方式嗎? 是的,這些也是GameObjects。
然而,還有更多的游戲?qū)ο蟆?您會注意到導(dǎo)入的GameObjects左側(cè)有顯示三角形。
按住PC上的Alt按鈕或Mac上的Option,單擊每個(gè)顯示三角形。

如您所見,您有很多GameObjects:

要記住的三個(gè)要點(diǎn):
-
GameObjects can contain other GameObjects - GameObjects可以包含其他GameObjects。 在基礎(chǔ)級別,這種有用的行為允許組織和父化彼此相關(guān)的
GameObject。 更重要的是,對父級游戲?qū)ο蟮母目赡軙绊懰麄兊淖佑螒驅(qū)ο?- 更多的是在這一瞬間。 -
Models are converted into GameObjects - 模型轉(zhuǎn)換為GameObjects。 Unity為您的模型的各個(gè)部分創(chuàng)建
GameObjects,您可以像任何其他GameObject一樣進(jìn)行更改。 - Everything contained in the Hierarchy is a GameObject - 層次結(jié)構(gòu)中包含的所有內(nèi)容都是GameObject。 甚至像相機(jī)和燈光這樣的東西都是GameObjects。 如果它在Hierarchy中,那么它是一個(gè)受你命令約束的GameObject。
我們的英雄非常無聊,你需要讓他移動(dòng),但首先,你需要重新定位你的游戲?qū)ο蟆?/p>
1. Moving GameObjects - 移動(dòng)GameObjects
在開始之前,通過單擊顯示三角形來折疊所有GameObject樹。
在層次結(jié)構(gòu)中選擇BobbleArena并花點(diǎn)時(shí)間觀察Inspector,它提供有關(guān)所選GameObject的信息。
GameObjects包含許多組件,您可以將其視為小功能單元。 所有GameObject都包含一個(gè)組件:Transform組件。

Transform組件包含GameObject的位置,旋轉(zhuǎn)和縮放。 使用inspector,您可以將這些設(shè)置為特定數(shù)字,而不必依賴于您的眼睛。 將鼠標(biāo)懸停在軸名稱上時(shí),您會看到指針旁邊出現(xiàn)箭頭。
按鼠標(biāo)左鍵并向左或向右拖動(dòng)鼠標(biāo)以調(diào)整這些數(shù)字。 這個(gè)技巧是一種通過小增量調(diào)整值的簡單方法。
選擇BobbleArena后,將Position設(shè)置為(-6.624,13.622,6.35)。 當(dāng)我開發(fā)這個(gè)游戲時(shí),arena最終處于這個(gè)位置。 你也可以把它放在游戲世界游戲的中心。 將Scale設(shè)置為(2.0,2.0,2.0)。 這為玩家提供了進(jìn)入arena的更多空間。

如果縮小Scene view,您可能會注意到太空飛船懸浮在空隙中;他很可能會質(zhì)疑他對重力的假設(shè)。 你可以移動(dòng)他的頭部然后移動(dòng)他的身體,但是如果你將他的身體部位組合成一個(gè)GameObject,那會更容易。
在“層次結(jié)構(gòu)”中,單擊Create按鈕,然后選擇Create Empty。

一個(gè)empty是一個(gè)GameObject,它只包含所有GameObjects所擁有的一個(gè)必需組件 - Transform組件,如前所述。
注意:您還可以通過單擊
GameObject \ Create Empty來創(chuàng)建一個(gè)空的GameObject。這適用于其他東西,如組件。沒有preferred的做事方式 - 選擇最適合您工作流程的方法。
2. Parenting the Space Marine
在層次結(jié)構(gòu)中,您將看到創(chuàng)建性地命名的新GameObject:GameObject。單擊GameObject并將其命名為SpaceMarine。
您可以在GameObjects的名稱中插入空格,例如Space Marine。但是,為了保持一致性,您將在本教程中使用camel大小寫來表示名稱。
將BobbleMarine-Body和BobbleMarine-Head拖入SpaceMarine GameObject。
當(dāng)您使用GameObjects時(shí),會發(fā)生一些事情。特別是,即使GameObjects不移動(dòng),子項(xiàng)的位置值也會改變。發(fā)生此修改是因?yàn)镚ameObject位置始終相對于父GameObject。

在層次結(jié)構(gòu)中選擇SpaceMarine。 轉(zhuǎn)到Scene view,然后按F將焦點(diǎn)對準(zhǔn)它。arena阻擋你的觀點(diǎn)。
謝天謝地,你不需要快速獲取Dumbledore。 你可以讓它消失! 在Hierarchy中選擇BobbleArena,在Inspector中,取消選中GameObject名稱左側(cè)的框。 這將使arena消失。

你現(xiàn)在應(yīng)該只看到英雄。 選擇SpaceMarine GameObject。 在檢查器中,將鼠標(biāo)懸停在X position label上,直到看到滑塊箭頭。 按住鼠標(biāo)左鍵并向左或向右移動(dòng)鼠標(biāo)。 注意所有GameObjects如何相對于父級移動(dòng)。
如你所見,父級確實(shí)有其優(yōu)勢。

當(dāng)您將GameObject放在另一個(gè)中時(shí),子GameObject的位置不會改變。不同之處在于GameObject現(xiàn)在相對于父級定位。也就是說,將子GameObject設(shè)置為(0,0,0)會將子移動(dòng)到父級的中心而不是游戲世界的中心。
你現(xiàn)在要做這個(gè)來組裝你的飛船。
選擇BobbleMarine-Body,然后在Inspector中將Position設(shè)置為(0,0,0)。選擇BobbleMarine-Head并在Inspector中將Position設(shè)置為(-1.38,6.16,1.05)。
恭喜!你的英雄組裝好了。
3. Positioning the Marine
現(xiàn)在是時(shí)候把太空船放在他正確的起始位置了。選擇BobbleArena,然后在Inspector中,選中名稱旁邊的框以重新啟用它。
選擇SpaceMarine,在Inspector中,將其位置設(shè)置為(-4.9,12.54,5.87)。另外,將旋轉(zhuǎn)設(shè)置為(0,0,0)。你的飛船應(yīng)該直接在艙口上方。如果不是這種情況,那么隨意調(diào)整值,直到這種情況。
一旦英雄到位,在場景視圖中按F鍵,這樣你就可以看到他了。

現(xiàn)在英雄應(yīng)該準(zhǔn)確地定位在電梯上。
Creating a Prefab
這個(gè)游戲具有令人毛骨悚然的怪蟲,像英雄一樣,它們由許多部分組成。 需要一些裝配。
在“層次結(jié)構(gòu)”中,單擊Create按鈕,然后從下拉菜單中選擇Create Empty。 單擊GameObject將其命名為Alien。
在層次結(jié)構(gòu)中選擇Alien,然后在Inspector中將位置設(shè)置為:(2.9,13.6,8.41)。
從項(xiàng)目瀏覽器中,將BobbleEnemy-Body從Models文件夾拖到Alien GameObject中。

將BobbleEnemy-Body Position設(shè)置為(0,0,0)。 現(xiàn)在外星人和英雄應(yīng)該在競技場中并排。

由于外星人沒有頭腦,令人毛骨悚然,英雄需要更多射擊,而不是那個(gè)細(xì)長的小框架。 從項(xiàng)目瀏覽器中,將BobbleEnemy-Head拖入Alien GameObject。 將Position設(shè)置為(0.26,1.74,0.31),將Rotation設(shè)置為(-89.96,0,0)并Scale設(shè)置為(100,100,100)。

那是一個(gè)兇猛的小蟲子。 他們聚在一起很好,你可以把他們誤認(rèn)為下一個(gè)超級明星打擊犯罪組合。

此時(shí),你有一個(gè)用于英雄的父游戲?qū)ο蠛土硪粋€(gè)用于外星人的游戲?qū)ο蟆?對于英雄來說,這很有效,因?yàn)槟阒恍枰粋€(gè)。 對于外星人來說,你需要很多 - 所以,這么多。
你可以復(fù)制并粘貼外星人來制作克隆,但他們都是個(gè)體。 如果您需要更改外星人的行為,則必須更改每個(gè)實(shí)例。
對于這種情況,最好使用prefab,這是一個(gè)主副本,可用于制作任意數(shù)量的單個(gè)副本。 預(yù)制件是您的朋友,因?yàn)楫?dāng)您更改有關(guān)它們的任何內(nèi)容時(shí),您可以將其應(yīng)用于其他實(shí)例。
制作預(yù)制件很簡單。 選擇Alien GameObject并將其拖動(dòng)到項(xiàng)目瀏覽器中的Prefabs文件夾中。

一些事情發(fā)生了變化。 Prefabs文件夾中有一個(gè)新條目,旁邊有一個(gè)圖標(biāo)。 您還會注意到層次結(jié)構(gòu)中GameObject的名稱現(xiàn)在為藍(lán)色。 您還會注意到該文件夾中已有預(yù)制件。 這些是您使用其余資產(chǎn)導(dǎo)入的預(yù)制件。

注意:您不必將模型拖動(dòng)到該特定文件夾中以創(chuàng)建預(yù)制件 - 所需要的只是將
GameObject拖動(dòng)到項(xiàng)目瀏覽器中的任何文件夾中。 有一個(gè)Prefabs文件夾只是很好的習(xí)慣。
藍(lán)色表示GameObject已經(jīng)從預(yù)制件或模型實(shí)例化,例如BobbleArena。 在層次結(jié)構(gòu)中選擇Alien GameObject,然后查看Inspector。 你會注意到一些額外的按鈕。

以下是這些新按鈕的細(xì)分:
- Select - 選擇將在項(xiàng)目瀏覽器中選擇預(yù)制件。 當(dāng)您有大量文件并希望輕松訪問預(yù)制件以進(jìn)行更改時(shí),這非常有用。
-
Revert - 還原將撤消您對實(shí)例所做的更改。 例如,你可能會玩大小或顏色,但最終會有一些可怕的東西,就像一只惡毒的粉紅色蜘蛛。 您可以單擊
Revert按鈕以恢復(fù)健全性。 - Apply - 應(yīng)用會將您對該實(shí)例所做的任何更改應(yīng)用于其預(yù)制件。 該預(yù)制件的所有實(shí)例也將更新。
創(chuàng)建預(yù)制實(shí)例非常簡單。 在項(xiàng)目瀏覽器中選擇Alien預(yù)制件,然后在場景視圖(Scene view)中將其拖到另一個(gè)Alien旁邊。

您還可以將實(shí)例拖到層次結(jié)構(gòu)中。如您所見,創(chuàng)建更多外星人就像從項(xiàng)目瀏覽器中拖動(dòng)Alien預(yù)制件一樣簡單。但你還不需要大批外星人,所以從層次結(jié)構(gòu)中刪除所有外星人。您可以通過在層次結(jié)構(gòu)中選擇GameObject并按鍵盤上的Delete(Mac上的Command-Delete)來刪除GameObject,也可以右鍵單擊它并選擇Delete。
1. Fixing the Models
接下來的待辦事項(xiàng)是修復(fù)一些模型。在這種情況下,Unity導(dǎo)入了模型但丟失了對紋理的引用。您可以通過向材質(zhì)添加紋理來解決此問題。
在Unity中,材質(zhì)是附加有程序的紋理,稱為著色器。您可以編寫自己的著色器,這超出了本教程的范圍。著色器確定紋理的外觀。例如,您可以編寫著色器以使石材紋理看起來粗糙或金屬質(zhì)感看起來有光澤。值得慶幸的是,Unity帶有自己的著色器為您做到這一點(diǎn)。
在項(xiàng)目瀏覽器的Models文件夾中,將BobbleArena-Column拖到Scene view視圖中。你會發(fā)現(xiàn)一種沉悶的白色材料。

如果源包中的材質(zhì)名稱或紋理名稱發(fā)生更改,Unity將失去與該材質(zhì)的連接。 它試圖通過為您創(chuàng)建一個(gè)新材料但沒有附加紋理來解決這個(gè)問題。
要解決此問題,您必須為材質(zhì)指定新紋理。 在Project Browser中,選擇Models子文件夾,然后展開BobbleArena-Column以查看所有子對象。

接下來,在Project Browser中選擇Cube_001,然后在Inspector中,單擊Main_Material著色器的顯示三角形。

你會發(fā)現(xiàn)有很多選擇! 這些選項(xiàng)配置此材質(zhì)的外觀。

例如,Metallic滑塊確定材料的類金屬質(zhì)量。 高金屬值意味著紋理將像金屬一樣反射光。 您會注意到大多數(shù)屬性左側(cè)有一個(gè)灰色框。 這些盒子用于紋理。
在這種情況下,您想要的只是模型上的圖像。 在Project Browser中,選擇Textures文件夾。 單擊并將Bobble Wars Marine texture拖動(dòng)到著色器屬性中的Albedo屬性框中。

Albedo屬性用于紋理,但您也可以在其中放置顏色。 完成此操作后,您的列現(xiàn)在將具有紋理。

競技場也遭遇了紋理問題。
在Hierarchy中,展開BobbleArena,然后展開Floor。 選擇Floor_Piece。

在Inspector中,您會注意到地板上貼有兩種材料。 BobbleArena-Main_Texture材質(zhì)沒有分配紋理。 您可以判斷,因?yàn)椴馁|(zhì)預(yù)覽全部為白色。

就像您對該列所做的那樣,在項(xiàng)目瀏覽器中選擇Textures文件夾。 單擊并將Bobble Wars Marine紋理拖動(dòng)到著色器屬性中的Albedo屬性框中。
你的樓層現(xiàn)在將獲得邊界。 多么時(shí)尚!

您還會注意到,不僅是一個(gè),而且所有地板部分都獲得了邊界。這是因?yàn)樗鼈兌际褂孟嗤牟??料。
2. Adding Obstacles
現(xiàn)在您已經(jīng)修復(fù)了模型,現(xiàn)在是時(shí)候在競技場中添加一堆列了。您將總共生成七列,并且您將使用prefabs執(zhí)行此任務(wù)。
注意:每當(dāng)看起來你應(yīng)該復(fù)制一個(gè)GameObject時(shí),請使用
prefab- 這是另一種最佳實(shí)踐。一些Unity開發(fā)人員堅(jiān)持使用prefab來處理所有事情,甚至是獨(dú)特的對象。我們的想法是,創(chuàng)建一個(gè)預(yù)制件并制作副本要比將一組現(xiàn)有的游戲?qū)ο筠D(zhuǎn)換為預(yù)制實(shí)例要容易得多。前一種方法需要最少的工作,而后一種方法要求您在保留每個(gè)實(shí)例的任何唯一更改的同時(shí)將共性提取到預(yù)制件中。這導(dǎo)致了很多工作。
在Hierarchy中,將BobbleArena-Column拖到Prefabs文件夾中,將其轉(zhuǎn)換為預(yù)制件。
在Hierarchy視圖中仍然選擇了BobbleArena-Column實(shí)例后,轉(zhuǎn)到Inspector并將position設(shè)置為(1.66,12.83,-54.48)。將scale設(shè)置為(3.5,3.5,3.5)。您確實(shí)希望所有預(yù)制件具有相同的比例,因此請單擊Apply按鈕。

現(xiàn)在是時(shí)候制作其余的專欄了。
在場景視圖中一次拖動(dòng)一個(gè)列從一個(gè)項(xiàng)目到另一個(gè)項(xiàng)目可能有點(diǎn)單調(diào)乏味,特別是當(dāng)有多個(gè)實(shí)例時(shí)。 通過在層次結(jié)構(gòu)中選擇一個(gè)并在PC上按Ctrl-D或在Mac上按Command-D復(fù)制列。
創(chuàng)建總共六個(gè)重復(fù)項(xiàng)并給它們以下位置:
Column 1: (44.69, 12.83, –28.25)Column 2: (42.10, 12.83, 30.14)Column 3: (–8.29, 12.83, 63.04)Column 4: (80.40, 12.83, –13.65)Column 5: (–91.79, 12.83, –13.65)Column 6: (–48.69, 12.83, 33.74)
你現(xiàn)在應(yīng)該在競技場中有七列。

競技場看起來不錯(cuò),但層次結(jié)構(gòu)有點(diǎn)混亂。 單擊Create button并選擇Create Empty以對其進(jìn)行整理。 將GameObject重命名為Columns并將每列拖動(dòng)到其中。

您會注意到列具有相似的名稱,并附加了唯一的數(shù)字。 由于它們基本上是一個(gè)實(shí)體,因此共享一個(gè)名稱就沒問題了。 按住Shift鍵并選擇層次結(jié)構(gòu)中的所有列。 在Inspector中,將名稱更改為Column。

注意:正如您所看到的,可以一次更改一堆
GameObjects的公共屬性。
Creating Spawn Points
嗜血的外星人有什么好處,除非他們大量生成?在本節(jié)中,您將設(shè)置生成點(diǎn)以產(chǎn)生敵人。
到目前為止,您已經(jīng)使用希望玩家看到的GameObjects來組裝游戲。當(dāng)涉及到產(chǎn)卵點(diǎn)時(shí),你不希望任何人看到它們。然而,重要的是你知道他們在哪里。
您可以創(chuàng)建一個(gè)3D立方體并將其放置在場景中以表示生成點(diǎn),然后在游戲開始時(shí)將其刪除,但這是一種笨重的方法。 Unity提供了一種稱為labels的簡單機(jī)制,它們是在Scene view中可見的游戲?qū)ο?,但在游戲過程中是不可見的。要查看它們的運(yùn)行情況,您將創(chuàng)建一組不同的生成點(diǎn),類似于您創(chuàng)建列的方式。
單擊Hierarchy中的Create按鈕,然后選擇Create Empty。將它命名為Spawn并將位置設(shè)置為(-5.44,13.69,90.30)。
在Inspector中,單擊復(fù)選標(biāo)記旁邊的彩色多維數(shù)據(jù)集。將出現(xiàn)具有所有不同標(biāo)簽樣式的彈出按鈕。點(diǎn)擊藍(lán)色膠囊(blue capsule)。

看看你的場景視圖;你會看到它已經(jīng)被注釋成產(chǎn)卵點(diǎn)了。

您可能無法在場景中看到label。 如果是這種情況,則需要增加label的大小。 為此,請單擊場景視圖中的Gizmos按鈕,然后將3D圖標(biāo)滑塊拖動(dòng)到最右側(cè)。 這將增加label的大小,以便您在縮小時(shí)可以看到它們。

您需要再創(chuàng)建10個(gè)生成點(diǎn)。 通過執(zhí)行以下操作使放置更容易:
- 1) 在
Scene view中,單擊場景Gizmo的中心立方體以將“場景”視圖切換為“等軸測(Isometric)”模式。 - 2) 單擊綠色的y軸箭頭,以便向下看場景。

現(xiàn)在繼續(xù)復(fù)制和重新定位10個(gè)更多的生成點(diǎn)。

不要擔(dān)心,如果你沒有讓它們完全相同 - 游戲設(shè)計(jì)更像是一門藝術(shù),而不是一門科學(xué)!
完成后,單擊Hierarchy中的Create按鈕,選擇Create Empty并將其命名為SpawnPoints。 將所有生成點(diǎn)拖入其中。 批量重命名它們就像你對Spawn的列一樣。

恭喜! 您的游戲現(xiàn)已正確設(shè)置。 一定要保存!
在這一點(diǎn)上,你有你的英雄,他的敵人,外星人和他們將戰(zhàn)斗到死亡的競技場。 你甚至為小蟲子創(chuàng)造了產(chǎn)卵點(diǎn)。 在您開始設(shè)置時(shí),您了解到:
-
GameObjects以及在使用Unity時(shí)它們?yōu)槭裁慈绱酥匾脑颉?/li> -
Prefabs用于何時(shí)創(chuàng)建單個(gè)GameObject的多個(gè)實(shí)例。 -
Labels標(biāo)簽可以幫助您在不干擾游戲的情況下對游戲開發(fā)進(jìn)行標(biāo)注。
你的游戲中仍然沒有動(dòng)作,但那沒關(guān)系。 你已經(jīng)準(zhǔn)備好學(xué)習(xí)如何給你的游戲帶來生命的氣息并將其帶走(通過太空船的大機(jī)槍)。
在本教程的下一部分中,您將為此游戲添加一些操作,學(xué)習(xí)如何使用組件(Components),讓您的太空飛船隨意射擊!
后記
本篇主要講述了一款簡單射擊游戲示例,感興趣的給個(gè)贊或者關(guān)注~~~
