[教程]超級(jí)簡(jiǎn)單的“對(duì)決”小游戲基礎(chǔ)版(Duel Game Basic)


前言

一個(gè)月的課程上完了,總體感覺比去年要好一些,當(dāng)然還是有很多需要改進(jìn)的地方。學(xué)生的普遍的反映是看圖文版的教程會(huì)比較方便一些,所以還是堅(jiān)持以這種方式來做吧。但從這一篇開始,會(huì)嘗試用一種新的方式。之前都是一邊做范例一邊截屏并寫文字,其實(shí)還是蠻手忙腳亂的,而且有時(shí)候出錯(cuò)了也不好修改。這一篇開始先錄視頻,然后對(duì)著視頻來寫圖文版教程,希望能夠更高效一些。

這個(gè)范例特別特別簡(jiǎn)單,屬于入門級(jí)別中的入門級(jí)別,是在上課的時(shí)候腦筋急轉(zhuǎn)彎想到的(當(dāng)然原身還是以前在手機(jī)上玩過的一個(gè)游戲)。

游戲的原身是“Ready Steady Bang”,有興趣的同學(xué)可以下載來試試,反正我是手殘,過不了幾關(guān)就Game Over了:

ready steady bang.png

本教程的在線視頻發(fā)在YouTube:[教程]使用Unity和PlayMaker制作一個(gè)超級(jí)簡(jiǎn)單的“對(duì)決”小游戲,主要原因是錄制的碼率達(dá)不到優(yōu)酷所要求的5M,所以在優(yōu)酷上反而只能達(dá)到“高清”分辨率,效果不是特別好。

上不了YouTube的同學(xué)可以在百度網(wǎng)盤下載視頻文件觀看學(xué)習(xí)。

另外,由于學(xué)生普遍反饋對(duì)于眾多Actions的英文名稱不熟悉,從而導(dǎo)致跟不上課堂節(jié)奏,因此從這篇教程開始,會(huì)將所涉及到的Action在文末進(jìn)行總結(jié)注釋。


制作流程

準(zhǔn)備場(chǎng)景

首先新建一個(gè)項(xiàng)目。

duel game basic_0001.png

導(dǎo)入PlayMaker插件,會(huì)在項(xiàng)目Assets文件夾中生成如下文件結(jié)構(gòu)。

duel game basic_0002.png

由于PM的安裝導(dǎo)入過程還是需要一定的時(shí)間的,而且未來可能會(huì)有很多附加的Actions包需要一并使用,所以個(gè)人建議把常用的Actions包導(dǎo)入以后,或者至少在安裝完P(guān)M主程序之后就關(guān)閉Unity3D,將這個(gè)項(xiàng)目文件夾打包保存起來,以后再要新建使用PM的項(xiàng)目時(shí),直接將這個(gè)壓縮包解壓改名使用即可,可以避免重新安裝的麻煩。

創(chuàng)建場(chǎng)景元素:

  • 一個(gè)Ground當(dāng)?shù)孛?,一個(gè)Cube當(dāng)敵人,攝影機(jī)放正;
  • 添加必要的UI,一個(gè)Hint Text作為游戲進(jìn)程提示(告訴玩家什么時(shí)候可以開槍了),一個(gè)Score Text顯示玩家分?jǐn)?shù);
    • Hint Text上還添加了一個(gè)Shadow組件(直接用Add Component功能,輸入“Shadow”即可找到)以增加一點(diǎn)陰影效果;
duel game basic_0003.png
  • 最后還需要添加一個(gè)空物體GameController作為添加FSM的對(duì)象。
duel game basic_0005.png

設(shè)計(jì)交互邏輯

GameController添加一個(gè)FSM。

這個(gè)游戲的進(jìn)程非常簡(jiǎn)單,所以我們只在GameController上添加一個(gè)FSM作為全部的交互邏輯設(shè)計(jì)即可,但未來比較復(fù)雜的項(xiàng)目則需要針對(duì)不同的游戲物體添加不同的FSM。

我在GameController的FSM中建立如下Graph(流程圖),這是沒有添加任何Action的Graph,只是用來表示交互邏輯的設(shè)計(jì)思路:

duel game basic_0004.png

這里所使用的FINISHED事件是一個(gè)系統(tǒng)事件,代表“該狀態(tài)中的所有工作都已經(jīng)結(jié)束”,當(dāng)條件滿足時(shí)會(huì)自動(dòng)觸發(fā)狀態(tài)跳轉(zhuǎn),但其他的事件(比如Start、Player Fire等)都是自定義事件,需要用Action來進(jìn)行觸發(fā)。

  • 當(dāng)場(chǎng)景被載入時(shí),進(jìn)入Start狀態(tài),在該狀態(tài)中會(huì)進(jìn)行游戲場(chǎng)景相關(guān)參數(shù)的預(yù)設(shè)工作;
  • 預(yù)設(shè)工作完成,進(jìn)入Wait狀態(tài),這個(gè)狀態(tài)中會(huì)等待一個(gè)隨機(jī)的時(shí)間,然后開始“對(duì)決”,Wait狀態(tài)中會(huì)提示讓玩家等待;
  • 開始“對(duì)決”即進(jìn)入Duel狀態(tài),這時(shí)會(huì)提示玩家可以開槍,并通過鼠標(biāo)左鍵的按下觸發(fā)Player Fire事件,或者通過一個(gè)隨機(jī)等待時(shí)間來觸發(fā)Enemy Fire事件,兩個(gè)事件分別導(dǎo)致不同的結(jié)果狀態(tài);
  • 如果玩家先開槍,則玩家勝利,進(jìn)入Win狀態(tài),玩家得分,隨即繼續(xù)游戲(通過進(jìn)入Continue狀態(tài),然后返回Wait狀態(tài));
  • 如果敵人先開槍,則敵人勝利,進(jìn)入Fail狀態(tài),重新開始游戲(通過進(jìn)入Restart狀態(tài),然后返回Start狀態(tài))。

這時(shí)我們可以運(yùn)行場(chǎng)景來測(cè)試一下整個(gè)邏輯。綠框狀態(tài)代表“當(dāng)前所處的狀態(tài)",可以用Alt+鼠標(biāo)左鍵單擊的方式來手動(dòng)觸發(fā)自定義事件來查看狀態(tài)的跳轉(zhuǎn)情況。

duel game basic_00071.png
  • 考慮到“玩家提前開槍”的可能性,為Wait狀態(tài)添加一個(gè)Too Quick事件,觸發(fā)該事件則會(huì)進(jìn)入Warning狀態(tài),警告玩家,然后直接判定玩家該局游戲失?。ㄟM(jìn)入Fail狀態(tài))
duel game basic_0007.png

需要注意的是,這里所設(shè)計(jì)(或規(guī)劃)好的邏輯流程不一定就是我們最后所使用的流程,有時(shí)候因?yàn)榱鞒踢^于簡(jiǎn)單(比如我們這個(gè)范例),會(huì)將多個(gè)邏輯狀態(tài)合并成為一個(gè);也有時(shí)候會(huì)因?yàn)镻M功能的限制或者因?yàn)榱鞒踢^于復(fù)雜,需要將一個(gè)邏輯狀態(tài)拆分成多個(gè),甚至分成不同的FSM來實(shí)現(xiàn)。

即便是這個(gè)簡(jiǎn)單的范例,在后面我們也會(huì)對(duì)目前這個(gè)Graph進(jìn)行調(diào)整。

添加Actions制作交互功能

下面開始為各個(gè)State(狀態(tài))添加Actions(行為),使其能夠執(zhí)行一些實(shí)際的交互功能。

首先給Start狀態(tài)添加一個(gè)Wait行為,設(shè)置讓其等待2秒之后再觸發(fā)FINISHED事件。

duel game basic_0008.png
duel game basic_0010.png

然后給Wait狀態(tài)添加“隨機(jī)等待”的功能。這里先使用Random Float行為獲得一個(gè)隨機(jī)等待時(shí)間,儲(chǔ)存為變量wait time,然后用Wait行為讀取這個(gè)時(shí)間作為等待時(shí)間,設(shè)置Finish Event為Start。

這個(gè)操作與使用Random Wait行為所獲得的結(jié)果是一樣的。

duel game basic_0009b.png

在Duel狀態(tài)中添加一個(gè)Get Mouse Button Down行為,以監(jiān)測(cè)鼠標(biāo)左鍵(Left)是否被按下,如果是,則觸發(fā)Player Fire事件。

同時(shí)添加一個(gè)Random Wait行為,設(shè)置一個(gè)Enemy反應(yīng)時(shí)間(0.4~1s),等待結(jié)束則觸發(fā)Enemy Fire事件。

按這樣的方式來設(shè)置,不論P(yáng)layer Fire事件和Enemy Fire事件哪個(gè)先被觸發(fā),都會(huì)跳轉(zhuǎn)到別的狀態(tài),從而導(dǎo)致另一個(gè)事件永遠(yuǎn)不會(huì)被觸發(fā)。同時(shí),由于Get Mouse Button Down行為在前而Random Wait行為在后,所以即便兩個(gè)事件的觸發(fā)條件被同時(shí)滿足(基本可能發(fā)生這種情況),也是Player Fire事件先被觸發(fā)。

duel game basic_0011.png

給Win狀態(tài)添加Int Add行為,新建一個(gè)Int變量score int,并指定該行為為score int增加1。然后添加一個(gè)Wait行為,使其可以在Win狀態(tài)停留2秒鐘,再跳轉(zhuǎn)到Wait狀態(tài),進(jìn)入下一輪游戲。

duel game basic_0012.png
duel game basic_0014.png

在Variables面板中將score int變量設(shè)置為在Inspector中可見,并確保其初始值為0。

duel game basic_0013.png

給Fail狀態(tài)添加Set Int Value行為,指定讓變量score int值歸0,然后也添加一個(gè)Wait行為,使其停留2秒鐘后再跳轉(zhuǎn)到Wait狀態(tài),重新開始游戲。

嚴(yán)格按照邏輯來講,“分?jǐn)?shù)歸零”的操作應(yīng)該放在Start狀態(tài)中,因?yàn)檫@個(gè)狀態(tài)是用來進(jìn)行初始化設(shè)置的,失敗之后重新開始,自然要重新初始化,但像現(xiàn)在這樣在Fail狀態(tài)中就歸零分?jǐn)?shù),然后跳轉(zhuǎn)Wait狀態(tài),結(jié)果上不能說錯(cuò),但邏輯上并不是很正確。

當(dāng)然,在使用PM的時(shí)候,這樣的“調(diào)整”、“簡(jiǎn)化”會(huì)時(shí)常發(fā)生,說不上來就是是好是壞,畢竟“靈活性”與“不規(guī)范”有時(shí)候是一體兩面的存在。

duel game basic_0015.png

比起“重置游戲參數(shù)”這樣的精細(xì)操作來,更為簡(jiǎn)單粗暴地制作“游戲重置”的方法是使用“重新載入本場(chǎng)景”的Unity內(nèi)置功能,在PlayMaker中就是是使用Restart Level行為。我們可以將Fail狀態(tài)的FINISHED事件直接連給Restart狀態(tài),然后給Restart狀態(tài)添加一個(gè)Restart Level行為。

duel game basic_0016.png

將Duel狀態(tài)中的Get Mouse Button Down行為復(fù)制(Ctrl+C)并粘貼(Ctrl+V)給Wait狀態(tài),將Send Event設(shè)置為Too Quick(或者直接添加該行為并照此設(shè)置也可以)。這是給Wait狀態(tài)添加“監(jiān)測(cè)玩家是否提前開槍”的功能,如果是,則觸發(fā)Too Quick事件跳轉(zhuǎn)到Warning狀態(tài)。

duel game basic_0017.png
duel game basic_0018.png

在Warning狀態(tài)中添加Wait行為,設(shè)置為1秒后完成。(然后就會(huì)跳轉(zhuǎn)到Fail狀態(tài),玩家失敗。)

duel game basic_0019.png

運(yùn)行場(chǎng)景,當(dāng)玩家失敗并觸發(fā)場(chǎng)景重置時(shí),場(chǎng)景會(huì)變得很暗,原因是重置后的場(chǎng)景失去了光照貼圖。這是由于Unity3D5.6版本會(huì)自動(dòng)為3D項(xiàng)目場(chǎng)景生成臨時(shí)的光照貼圖,這樣我們默認(rèn)就能看到比較“亮”的三維場(chǎng)景,但由于這個(gè)光照貼圖是臨時(shí)的,所以重置場(chǎng)景之后就丟失了。

duel game basic_0020.png

我們可以通過菜單Window -> Lighting -> Settings打開Lighting面板,在Scene一欄中取消最下面Auto Generate的選項(xiàng)讓Unity不再自動(dòng)創(chuàng)建光照貼圖。

duel game basic_0021.png

然后分別將Cube和Ground物體設(shè)置成“光照貼圖靜態(tài)”(勾選上Mesh Renderer組件中的Lightmap Static選項(xiàng))。

duel game basic_0022.png

由于Ground地面物體特別大,所以最好將Scale in Lightmap參數(shù)設(shè)置小一些(我設(shè)置成0.1),以免浪費(fèi)。

這里已經(jīng)有提示說“Object's size in lightmap has reached the max atlas size.”,也就是說系統(tǒng)已經(jīng)在提示你這個(gè)物體的光照貼圖已經(jīng)大得超標(biāo)了。

duel game basic_0023.png

然后點(diǎn)擊Lighting面板中的Generate Lighting按鈕為場(chǎng)景創(chuàng)建一個(gè)光照貼圖。

duel game basic_0024.png

經(jīng)過一定時(shí)間的等待。

duel game basic_0025.png

在場(chǎng)景文件的同級(jí)目錄下會(huì)出現(xiàn)一個(gè)與場(chǎng)景文件同名的文件夾,其中的文件,就是我們烘焙出來的光照貼圖數(shù)據(jù)和反射探針數(shù)據(jù)。

duel game basic_0026.png

選擇場(chǎng)景物體,在Lighting面板的Object maps一欄中可以看到當(dāng)前物體的光照貼圖。

duel game basic_0027.png

關(guān)于光照貼圖烘焙以及場(chǎng)景燈光的相關(guān)知識(shí),可以參考我的其他文章。

對(duì)UI元素進(jìn)行控制

因?yàn)槲沂褂玫氖禽^新的Unity GUI(俗稱uGUI)功能來制作的UI元素,所以需要用到PlayMaker的uGUI相關(guān)Actions來進(jìn)行控制,這些Actions并沒有被整合進(jìn)PM安裝包中,需要單獨(dú)下載安裝。

https://hutonggames.fogbugz.com/default.asp?W1192 可以找到這個(gè)行為包,只需要下載 Package for uGUI Proxy With Full set of Actions 就好了。

duel game basic_0028.png

安裝完成后在Action Browser中就可以看到uGui一欄,其中有很多很多的Actions。

如果不想安裝第三方行為包(其實(shí)這個(gè)行為包也是官方做的,并不是什么第三方),也可以使用PM的Set Property行為來控制Text組件。

由于我們這個(gè)范例中的UI都是Text,所以只需要使用U Gui Text Set Text行為來設(shè)置其所顯示的文本就行了。在Action Browser中輸入關(guān)鍵字就可以找到相關(guān)行為,不需要在列表中慢慢尋找。

duel game basic_0029.png

在Start狀態(tài)中添加U Gui Text Set Text行為,由于Owner(本物體,也就是GameController物體)上并沒有Text組件,所以行為會(huì)提示是否需要添加該組件,但我們并不是要來控制Owner的UI文字,而是要控制Hint Text物體的UI文字,所以需要設(shè)置Game Object參數(shù)為Specific Game Object,新建一個(gè)Game Object變量hint text object并指定其為這里的指定游戲物體。因?yàn)樵赟tart狀態(tài)時(shí)我不需要任何文字顯示,所以在Text參數(shù)中只輸入一個(gè)空格鍵。

duel game basic_0030.png

這時(shí)其實(shí)我們還沒有指定控制Hint Text游戲物體。我們需要在Variables面板中找到hint text object變量,使其顯示在Inspector中,然后將場(chǎng)景中的Hint Text物體拖到hint text object變量中才真正完成參數(shù)的指定工作。

duel game basic_0030b.png

將這個(gè)U Gui Text Set Text行為復(fù)制粘貼到其他幾個(gè)狀態(tài)中,并修改Text參數(shù)使Hint Text在不同的狀態(tài)能夠顯示不同的提示文字。

duel game basic_0031.png
duel game basic_0032.png
duel game basic_0033.png
duel game basic_0034.png
duel game basic_0035.png

同理可以一樣設(shè)置在不同狀態(tài)更新Score Text中所顯示的分?jǐn)?shù)UI文字。

不過,為了簡(jiǎn)單(畢竟是初級(jí)入門教程嘛),我采用另一種“簡(jiǎn)單粗暴”的方法,讓Score Text物體實(shí)時(shí)監(jiān)控score int變量的值并將其顯示出來。

為Score Text添加一個(gè)FSM。

duel game basic_0037.png

在State 1中添加一個(gè)Get Fsm Int行為,指定Game Object參數(shù)為一個(gè)新的Game Object變量game controller object,指定Fsm Name為“FSM”,Variable Name為“score int”(這是我們之前就在GameController游戲物體的FSM中都已經(jīng)設(shè)置好了的),并設(shè)置Store Value參數(shù)為新建的int變量score int。

這個(gè)行為的作用是,從目標(biāo)游戲物體的目標(biāo)FSM中獲取一個(gè)變量的數(shù)值,并保存為本FSM的一個(gè)變量。雖然這里我們獲取的目標(biāo)變量和本地變量都取了一樣的名字,但由于其隸屬于不同的FSM,所以重名不會(huì)有影響。

duel game basic_0039.png

手動(dòng)將GameController物體指定給game controller object變量。

duel game basic_0038.png

由于要實(shí)時(shí)監(jiān)控score int變量值,所以Get Fsm Int行為需要勾選Every Frame選項(xiàng)。

然后再添加一個(gè)Convert Int To String行為,將(本FSM的)score int變量轉(zhuǎn)換為一個(gè)字符串變量score string,同樣勾選Every Frame選項(xiàng)以保持同步。

duel game basic_0040.png

最后添加一個(gè)U Gui Text Set Text行為,讓Owner(本物體)的Text組件中的文字顯示score string變量中的字符串,同樣勾選Every Frame選項(xiàng)以保持實(shí)時(shí)更新。

duel game basic_0041.png

在這種處理方式下,Score Text每幀都會(huì)獲取分?jǐn)?shù)值、轉(zhuǎn)換數(shù)據(jù)類型、更新UI顯示,更優(yōu)化的處理方法是讓其只在需要的時(shí)候才會(huì)進(jìn)行此操作,比如只在分?jǐn)?shù)發(fā)生變化的時(shí)候才會(huì)進(jìn)行一次“獲取分?jǐn)?shù)值、轉(zhuǎn)換數(shù)據(jù)類型、更新UI顯示”的操作序列。

添加音效

http://soundbible.com/ 找到幾個(gè)聲音:380 Gunshot、9mm Gunshot、Computer Error Alert,并將其導(dǎo)入到Assets文件夾中。

duel game basic_0044.png
duel game basic_0045.png
duel game basic_0049.png

給Win狀態(tài)添加一個(gè)Play Sound行為,指定其播放player gun shot變量中的聲音。

duel game basic_0042.png

給Fail狀態(tài)添加一個(gè)Play Sound行為,指定其播放enemy gun shot變量中的聲音。

duel game basic_0046.png

給Warning狀態(tài)添加一個(gè)Play Sound行為,指定其播放warning sound變量中的聲音。

duel game basic_0050.png

將這3個(gè)變量(player gun shot、enemy gun shot、warning sound)都設(shè)置為在Inspector中可見,并將對(duì)應(yīng)的聲音素材指定給這3個(gè)變量。

duel game basic_0047.png
duel game basic_0051.png

現(xiàn)在我們不知不覺中已經(jīng)設(shè)置了很多變量了,它們默認(rèn)是按照名稱字母順序排列,因此不同類型不同用途的變量混合在一起,看上去非?;靵y。我們可以通過對(duì)不同變量指定Category的方式將其分組,這個(gè)分組也會(huì)反映在Inspector面板上。

duel game basic_0048.png

增加游戲難度

這個(gè)游戲的機(jī)制非常簡(jiǎn)單,就是比誰(shuí)快,所以增加游戲難度的最簡(jiǎn)單的方法就是提高Enemy的反應(yīng)時(shí)間。我們之前是通過硬編碼的方式在Random Wait行為中設(shè)置Enemy的反應(yīng)時(shí)間為0.4s~1s,可以修改成將這個(gè)“最快/最慢反應(yīng)時(shí)間”的屬性設(shè)置給Enemy物體,然后用GameController去獲取,然后再設(shè)置給Random Wait行為。這樣一來,就可以通過“更換不同的敵人”來達(dá)到修改游戲難度的目的。

也可以在每次勝利之后,也就是在Win狀態(tài)和Wait狀態(tài)之間,對(duì)Enemy的反應(yīng)時(shí)間進(jìn)行修正,比如“每次勝利之后敵人反應(yīng)速度提高一成(即原反應(yīng)時(shí)間的90%)”,這樣敵人的反應(yīng)則會(huì)越來越快,游戲也越來越難。

本地雙人對(duì)戰(zhàn)模式

如果想要將游戲改成“Player1 vs. Player2”的本地對(duì)戰(zhàn)模式,則可以將Duel狀態(tài)中的Random Wait換成另外一種監(jiān)測(cè)玩家輸入的行為(比如Get Key Down),然后兩個(gè)玩家一個(gè)用鼠標(biāo)左鍵,一個(gè)用鍵盤空格鍵,看誰(shuí)反應(yīng)快。當(dāng)然如果這樣的話,則需要設(shè)置兩個(gè)不同的Score UI,以顯示不同玩家的分?jǐn)?shù)。

總而言之,在這個(gè)超級(jí)簡(jiǎn)單的游戲原型的基礎(chǔ)上,可以進(jìn)行很多新的拓展。

我計(jì)劃在Duel Game Advanced版本中加入角色動(dòng)作,并以雙人對(duì)戰(zhàn)為主要模式,敬請(qǐng)期待!


本教程涉及到的Actions:

Wait
等待指定時(shí)間之后觸發(fā)指定事件。勾選Real Time選項(xiàng)將使其忽視游戲時(shí)間縮放(Time Scale)的設(shè)置,比如利用Time Scale = 0來暫停游戲時(shí),如果沒有勾選Real Time選項(xiàng),該Wait行為也會(huì)暫停,但如果勾選了Real Time選項(xiàng),則不會(huì)受到游戲時(shí)間暫停的影響。

Random Float
獲得一個(gè)在所設(shè)置的最大/最小值中間的隨機(jī)float值,并儲(chǔ)存為指定變量。

Get Mouse Button Down
當(dāng)鼠標(biāo)的指定按鍵(Left、Middle、Right)被按下時(shí),觸發(fā)指定事件。如果In Update Only選項(xiàng)被勾選,則在同一游戲幀內(nèi),該行為僅執(zhí)行一次(即按住鼠標(biāo)不放不會(huì)導(dǎo)致無(wú)限循環(huán)錯(cuò)誤)。

Random Wait
在所設(shè)置的最大/最小時(shí)間范圍內(nèi)隨機(jī)等待一個(gè)時(shí)間段后觸發(fā)指定事件。勾選Real Time選項(xiàng)將使其忽視游戲時(shí)間縮放(Time Scale)的設(shè)置,比如利用Time Scale = 0來暫停游戲時(shí),如果沒有勾選Real Time選項(xiàng),該Wait行為也會(huì)暫停,但如果勾選了Real Time選項(xiàng),則不會(huì)受到游戲時(shí)間暫停的影響。

Int Add
將所指定的int類型變量的數(shù)值增加一定值(可以設(shè)置增加量為負(fù)值)。

Set Int Value
將所指定的int類型變量的數(shù)值設(shè)置為所輸入的數(shù)值(或所指定的int類型變量的值)。

Restart Level
重新載入當(dāng)前關(guān)卡(所有本地變量數(shù)值都會(huì)重置,但全局變量數(shù)值不會(huì))。

U Gui Text Set Text
將指定物體的Text組件的Text參數(shù)(即其顯示的UI文字內(nèi)容)設(shè)置為所輸入的字符串(或所指定的string類型變量的值)。

Get Fsm Int
獲得所指定的游戲物體上指定名稱的FSM中指定名稱的int變量的數(shù)值,并儲(chǔ)存為自身FSM的int變量。這個(gè)行為也可以用來獲取同一個(gè)游戲物體上的不同F(xiàn)SM中的int變量的數(shù)值。

Convert Int To String
將一個(gè)int(整數(shù))類型的變量轉(zhuǎn)換成string(字符串)類型的變量,并儲(chǔ)存起來。Format參數(shù)可以對(duì)這個(gè)轉(zhuǎn)換進(jìn)行一定的格式化,比如對(duì)于3這個(gè)int,如果直接轉(zhuǎn)換會(huì)得到“3”這個(gè)字符串,如果設(shè)置Format為“0000.00”,則會(huì)得到“0003.00”,如果設(shè)置Format為“Score:00”,則會(huì)得到“Score:03”。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 準(zhǔn)備場(chǎng)景 下載并導(dǎo)入官方Space Shooter教程的范例素材包,我們僅使用其中的模型、材質(zhì)、貼圖、Pre...
    shimmery閱讀 6,681評(píng)論 0 16
  • 這篇文章默認(rèn)大家已經(jīng)對(duì)Unity3D和PlayMaker有一定的了解,所以沒有把所有操作步驟都寫的非常詳細(xì),不太看...
    shimmery閱讀 6,604評(píng)論 6 15
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,623評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 2017.6.13 明天要考spss,算是專業(yè)課吧,很奇怪地不慌,上午睡了半天直到中午,看了兩集楚喬傳,懶洋洋地當(dāng)...
    死在二三十閱讀 271評(píng)論 0 0

友情鏈接更多精彩內(nèi)容