




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
怪物點(diǎn)擊動(dòng)作玩耍11.1玩法介紹在怪物群中穿梭斬殺武士能夠自動(dòng)行走.點(diǎn)擊按鍵攻擊怪物!點(diǎn)擊鼠標(biāo)按鍵后發(fā)起攻擊,打倒怪物在指定時(shí)間內(nèi)盡可能多地?fù)舻构治铩?1.1玩法介紹一次性斬殺多個(gè)怪物,對(duì)于密集分布的多個(gè)怪物,可以通過(guò)一次攻擊就將其全部斬殺。被砍中的怪物向四周八方飛散飛。近處斬殺怪物將得到高分!斬殺怪物時(shí)離得越近,得分越高。假設(shè)不消逝失誤,怪物的數(shù)量將會(huì)增加!得分也會(huì)增加。連續(xù)斬殺怪物后,消逝的怪物數(shù)量會(huì)漸漸增加。盡可能零失誤地持續(xù)斬殺怪物,是獲得高分的秘訣。31.1玩法介紹遇到怪物后將失敗!一旦武士和怪物發(fā)生接觸,玩耍就會(huì)完畢。41.2簡(jiǎn)潔的操作和爽快感 不一論創(chuàng)作何種玩耍,都會(huì)有一些剛開(kāi)頭時(shí)就必需考慮的一些事情,那就是玩耍的內(nèi)容.
我們?cè)谕嫱嫠5臅r(shí)候,在編寫(xiě)代碼的時(shí)候,在漫無(wú)目的地掃瞄網(wǎng)負(fù)的時(shí)候,可能在很偶然的瞬間,腦子里突然消逝出了關(guān)于玩耍的靈感。構(gòu)思玩耍題材的這個(gè)過(guò)程,其實(shí)是很有樂(lè)趣的。的仆人公武士。問(wèn)了之后才知道,除了角色外,還有把怪物逐個(gè)砍到的動(dòng)畫(huà)。就在那個(gè)瞬間,筆者萌發(fā)了“用這個(gè)角色來(lái)制作玩耍”的想法就這樣,在和設(shè)計(jì)師深人溝通后,制作這個(gè)玩耍的念頭就產(chǎn)生了。
準(zhǔn)備玩耍的內(nèi)容時(shí)有一些要留意的事項(xiàng)。首先就是操作簡(jiǎn)潔。為了便于操作,我們只使用鼠標(biāo)的一個(gè)按鍵,沒(méi)有移動(dòng)和跳動(dòng)操作,略顯單調(diào),不過(guò)假設(shè)能營(yíng)造出點(diǎn)擊按健時(shí)的韻律感,確定是一款好玩的玩耍。
還有一個(gè)要點(diǎn)是斬殺時(shí)的爽快感。畫(huà)面上的大量怪物要夸大的向四處飛散。
玩耍的場(chǎng)景大體如下頁(yè)的插圖所示.
這次我們從角色的形象動(dòng)身構(gòu)思了玩耍的內(nèi)容靈感這爾西說(shuō)不定什么時(shí)候就會(huì)冒出來(lái).一旦感覺(jué)到“這似乎可以作成玩耍呢!”就要把它記錄下來(lái),或許什么時(shí)候就能派上用場(chǎng)了(確實(shí)是這樣的)。52.1腳本一覽672.2本章小節(jié)無(wú)限滾動(dòng)的背景無(wú)限滾動(dòng)的背景的改進(jìn)治理怪物消逝的模式武士和怪物的碰撞檢測(cè)得分凹凸的判定使怪物被砍中后四處飛散83無(wú)限滾動(dòng)的背景3.1關(guān)聯(lián)文件FloorControl.cs93.2概要 在怪物這個(gè)玩耍中,代表玩家的武士始終向右方前進(jìn),在玩耍完畢之前勢(shì)必將移動(dòng)特殊遠(yuǎn)的距離。假設(shè)將所需要的背景全部做到一個(gè)模型中,那么數(shù)據(jù)量將特殊大。而且還必需在玩耍開(kāi)頭的時(shí)候就生成這些背景,特殊麻煩。
在“怪物”這個(gè)玩耍中,背景僅僅用于顯示,和玩耍的內(nèi)容沒(méi)有關(guān)系。即使重復(fù)消逝同樣的背景也不會(huì)影響玩耍的內(nèi)容。顯示在畫(huà)面中的也只局限于武士四周的一小局部而已。
既然這樣,我們就可以反復(fù)利用幾個(gè)一樣的組件來(lái)合成背景,并且只在玩家的周邊將各個(gè)組件逐個(gè)顯示出來(lái)。103.3背景組件的顯示位置 我們預(yù)備了三種類型的背景組件。分別是背景A、背景B和背景C。
背景組件 通過(guò)循環(huán)并列顯示A,B,C三種背景組件,就能夠呈現(xiàn)出沒(méi)有縫隙的背景。而實(shí)質(zhì)上各個(gè)組件只有一個(gè)顯示在了畫(huà)面中。 剛開(kāi)頭時(shí),A,B,C各個(gè)組件都顯示在武士的四周。當(dāng)玩耍開(kāi)頭武士移動(dòng)了確定距離后,各個(gè)組件將移動(dòng)到下一個(gè)適宜的位置。由于總共有二種組件,所以組件的移動(dòng)寬度=3x一個(gè)組件的寬度。這個(gè)值在源代碼中存放于變量total_width中。1112 請(qǐng)?jiān)赨nity中啟動(dòng)玩耍,按下暫停按鍵切換到場(chǎng)景(Scene)視圖。可以看到背景只顯示在了武士的四周。133.3背景組件的顯示位置 把這個(gè)流程用代碼描述出來(lái),就是下面這樣〔從FloorControl類中摘出的一局部〕。143.3背景組件的顯示位置推斷組建是否該移動(dòng)的規(guī)律位于代碼的(a)行。floor_position表示背景組件的位置,camera_positio。表示攝像機(jī)的位置。雖然程序中使用了攝像機(jī)的位置來(lái)準(zhǔn)備背景的移動(dòng),但為了便于理解,這里我們使用武士的位
置來(lái)說(shuō)明。由于武士位于畫(huà)面中
央偏左的位置,嚴(yán)格來(lái)說(shuō)攝像機(jī)
和武士的X坐標(biāo)值并不一樣。但
是為了便于理解背景移動(dòng)的算
法,不妨認(rèn)為這個(gè)等式成立:
攝像機(jī)的X坐標(biāo)=武士的X坐標(biāo)。組件位于floor-position.x時(shí)
,該組件再次消逝時(shí)的坐標(biāo)
“floor_position.x+total_width”
假設(shè)攝像機(jī)的X坐標(biāo)大于中間點(diǎn)
floor_Position.x+total_width/2.0f,那么距離下次消逝的位置比距離現(xiàn)在的位置更近,組件將移動(dòng)到下
一地點(diǎn)。153.3背景組件的顯示位置3.4小結(jié) 這次我們介紹了無(wú)限循環(huán)的背景的根本制作方法。有些需要碰撞檢測(cè)的玩耍中會(huì)創(chuàng)立一個(gè)所謂的“地形”模型,但即便是在那種狀況下,不影響玩耍性的遠(yuǎn)景也常常通過(guò)這種循環(huán)顯示背景組件的方法來(lái)表現(xiàn)。164無(wú)限滾動(dòng)的背景的改進(jìn)4.1關(guān)聯(lián)文件FloorControl.cs174.2概要 上節(jié)介紹的算法中,背景只在每次調(diào)用Update時(shí)移動(dòng)一次。這樣一來(lái),假設(shè)武士
移動(dòng)的距離很長(zhǎng),就有
可能消逝背景和角色的
移動(dòng)不和諧的狀況。
雖然我們這個(gè)玩耍中并
不會(huì)到達(dá)那樣快的移動(dòng)
速度,但是有些玩耍中
消逝過(guò)玩家角色移動(dòng),
或者在場(chǎng)景中移動(dòng)到錯(cuò)
誤位置的現(xiàn)象。下面就
讓我們來(lái)考慮一下這種
狀況的解決方法。184.3稍作嘗試 讓我們來(lái)實(shí)際體驗(yàn)一下上節(jié)所述的問(wèn)題。作為調(diào)試,這里保存了武士能夠一瞬間移動(dòng)很遠(yuǎn)的距離這一功能。啟動(dòng)玩耍后請(qǐng)按下W鍵。如圖,可
以看到在武士四周的
背景不復(fù)存在了。 在Unity中執(zhí)行時(shí)
,將其切換到場(chǎng)景視
圖后使用逐幀模式觀
察,可以看到背景組
件在緩緩移動(dòng)。 在這種狀況下,
為了能夠正確顯示背
景,該如何處理呢?194.4背景組件顯示位置的改進(jìn) 在前一小節(jié)中,我們提到了一樣類型的背景組件會(huì)依據(jù)total_wzdth=一個(gè)組件的寬帶x組件數(shù)量(3個(gè))的間隔重復(fù)消逝。也就是說(shuō),程序?qū)囊韵轮抵校?/p>
選取一個(gè)最靠近武士坐標(biāo)的值作為背景組件消逝的位置。因此,只要求出上面算式(1)中。的值,就可以確定背景應(yīng)當(dāng)消逝的位置。接下來(lái),讓我們看看改進(jìn)后的FIoorControl.Update方法。20214.4背景組件顯示位置的改進(jìn)
在圖中,dist是武士的移動(dòng)距離。將dist除以背景組件的整體寬度total_width后的結(jié)果賦值給n。224.4背景組件顯示位置的改進(jìn) n是整數(shù),但是經(jīng)除法求出的結(jié)果并不愿定是整數(shù)。因此把結(jié)果代入n之前,需要先做四舍五入處理。假設(shè)只是簡(jiǎn)潔地進(jìn)展類型轉(zhuǎn)換(cast),將直接舍去小數(shù)局部,請(qǐng)讀者留意這一點(diǎn)。 之所以使用四舍五人而不是直接舍去小數(shù)局部,是為了在舍去和進(jìn)位兩種狀況中選取最靠近武士坐標(biāo)的狀況。這種思路和上節(jié)提到的“越過(guò)中間點(diǎn)”的推斷是一樣的。234.4背景組件顯示位置的改進(jìn) 可以使用Mathf.RoundTolnt方法來(lái)實(shí)現(xiàn)四舍五入。Mathf是Unity中的一個(gè)功能類。它含有很多根本的數(shù)學(xué)訓(xùn)‘算功能。 還有一種實(shí)現(xiàn)四舍五人的方法:讓數(shù)字加上0.5后再舍去小數(shù)局部:可以利用Mathf.FIoorTolnt方法舍去小數(shù)局部。 使用RoundToInt和FloorToInt方法時(shí),需要留意輸入值為負(fù)數(shù)的狀況:RoundToInt直接對(duì)確定值進(jìn)展操作,而FloorTolnt則會(huì)連同符號(hào)推斷數(shù)值大小。 右表舉例列出了分別用這兩種方法對(duì)正
負(fù)數(shù)進(jìn)展操作的結(jié)果。 在這個(gè)玩耍中,武士的坐標(biāo)只取正數(shù)。山于即使武士會(huì)往相反的方向移動(dòng)也要判定“更近的一端”,因此程序中使用了RoundToInt方法。但是在某此玩耍中,則可能需要找出“更靠近左邊的一端”,這種狀況下就應(yīng)當(dāng)使用FloorToInt方法總之,我們應(yīng)當(dāng)依據(jù)不同的狀況靈敏選擇最好的方法。244.4背景組件顯示位置的改進(jìn) 到此為止,我們對(duì)循環(huán)顯示背景組件的方法做了改進(jìn)。不過(guò)大局部狀況下,使用前一小節(jié)所介紹的方法就足夠了,一般沒(méi)有必要考慮怪物和武士的移動(dòng)。開(kāi)發(fā)過(guò)程中花太多精力在無(wú)關(guān)緊要的事情上簡(jiǎn)潔造本錢末倒置,不過(guò)在時(shí)間允許的狀況下適當(dāng)做一些有益的嘗試,一或許會(huì)對(duì)后續(xù)的開(kāi)發(fā)很有幫助。請(qǐng)讀者在明確“完成玩?!边@一目標(biāo)的同時(shí),享受這種探究的樂(lè)趣。254.5小結(jié)5怪物消逝模式的治理5.1關(guān)聯(lián)文件LevelControl.csOniGroupControl.cs265.2概要 玩耍啟動(dòng)后不久,畫(huà)面右方將消逝怪物。玩耍的目標(biāo)是不停地砍倒怪物并持續(xù)前進(jìn)。27 根本上,怪物只有跑向武士這一個(gè)動(dòng)作。武士和怪物都沿直線跑動(dòng),玩家的操作僅僅是在適宜的時(shí)機(jī)按下按鍵。特殊簡(jiǎn)潔。但是簡(jiǎn)潔的操作絕不意味著玩耍是無(wú)趣的。 在面對(duì)智能手機(jī)的玩耍中,很多都僅僅支持點(diǎn)擊屏幕操作。但其中大受玩家歡送、百玩不膩的玩耍也不占少數(shù)。 和這些玩耍類似,我們這個(gè)玩耍的精華在于把握好點(diǎn)擊按鍵的節(jié)奏:通過(guò)調(diào)整怪物消逝的頻率和速度,可以實(shí)現(xiàn)多種不同的情境。 下面讓我們花些時(shí)間來(lái)設(shè)計(jì)怪物消逝的方式,讓玩耍變得更好玩。285.2概要5.3怪物消逝的時(shí)間點(diǎn) 下面我們來(lái)看看該如何準(zhǔn)備怪物消逝的間隔。假設(shè)怪物相繼消逝的間隔很短,玩家就必需很快地點(diǎn)擊按鍵,這樣玩耍就比較難。相反,假設(shè)怪物消逝的間隔比較長(zhǎng),或者移動(dòng)的速度比較慢,那么玩耍就會(huì)比較簡(jiǎn)潔。
首先考慮到怪物的運(yùn)動(dòng)速度和消逝間隔=難易度,我們?cè)诿看纬晒艄治锖缶驮黾油嫠5碾y度。固然這里需要設(shè)置一個(gè)上限,并使消逝失誤后玩耍會(huì)回到最初的狀態(tài)。
每當(dāng)武士前進(jìn)了確定距離,怪物就將在其前方消逝(圖1.11)。怪物消逝的位置位于武士前,正好在畫(huà)面之外立刻進(jìn)人畫(huà)面的位置。假設(shè)這個(gè)距離過(guò)短畫(huà)面上將會(huì)突然消逝一個(gè)怪物。反之假設(shè)過(guò)長(zhǎng),則會(huì)導(dǎo)致在畫(huà)面的渲染區(qū)域之外存在很多怪物,增加不必要的處理開(kāi)銷。
在設(shè)計(jì)怪物消逝模式的時(shí)候,需算出武士從當(dāng)前位置動(dòng)身應(yīng)當(dāng)前進(jìn)多遠(yuǎn)才讓下一個(gè)怪物消逝。假設(shè)玩家能很順當(dāng)?shù)財(cái)貧⒐治?,就讓這個(gè)距離越來(lái)越短,而假設(shè)玩家消逝失誤,則恢復(fù)到最初的長(zhǎng)度。
實(shí)際試玩這個(gè)玩耍后,就可以體會(huì)到隨著怪物消逝的間隔變短,玩耍的難度也在漸漸增加。
不恰當(dāng)?shù)乃俣然蜷g隔的上限值可能將汗致無(wú)法完全除怪物,因此玩耍開(kāi)發(fā)者們要通過(guò)反趁試玩來(lái)調(diào)整得出適宜的值。29305.3怪物消逝的時(shí)間點(diǎn)315.3怪物消逝的時(shí)間點(diǎn)5.4怪物消逝模式的變化 雖然速度加快會(huì)導(dǎo)致玩耍變難,不過(guò)反復(fù)試玩幾次后玩家就會(huì)驚異地覺(jué)察自己完全能夠適應(yīng)了。即使是一開(kāi)頭覺(jué)得比較難的速度,經(jīng)過(guò)jL次挑戰(zhàn)后似乎也變得沒(méi)有什么了·這主要是由于目前怪物消逝的間隔是固定值的緣由。 請(qǐng)讀者想象一下和著音樂(lè)打拍子的情景。大家應(yīng)當(dāng)都有過(guò)這樣的體會(huì),即“即使節(jié)拍很快也跟上了”。其實(shí)兩者的原理是全都的。由于不管速度多快,但節(jié)奏是一樣的,所以玩家只需要依據(jù)同樣的時(shí)間間隔點(diǎn)擊按鍵就可以打倒怪物。 為了使玩家能夠體會(huì)到點(diǎn)擊按鍵的爽快感,要求玩耍具備確定的節(jié)奏。不過(guò)假設(shè)始終使用同樣的節(jié)奏,玩家很簡(jiǎn)潔就可以消退怪物,這樣玩耍就顯得有些無(wú)趣了。 也就是說(shuō),問(wèn)題不在于速度,而在于節(jié)拍是固定的。那么我們?cè)囍扛粢欢螘r(shí)間,就使用特殊的消逝模式。這里我們制作了以下幾種和一般模式不一樣的特殊模式。32連續(xù):怪物以短于正常時(shí)的時(shí)間間隔涌上來(lái)。緩慢:怪物移動(dòng)的速度比一般模式的最低速度還慢,并且消逝的間隔很長(zhǎng)。玩家在持續(xù)玩難度較大的關(guān)卡時(shí)會(huì)感覺(jué)疲乏,因此可以插入這個(gè)模式供玩家休息調(diào)整。趕超:后消逝的怪物追趕并超越更早消逝的怪物。后登場(chǎng)的怪物將會(huì)更早到達(dá)武士的位置,這樣會(huì)使玩家難于準(zhǔn)備出手的時(shí)機(jī),讓其措手不及。可以說(shuō)是這個(gè)玩耍中比較難的一種模式。加速→減速:登場(chǎng)的怪物到達(dá)畫(huà)面中心四周位置后加速,快要接近武士時(shí)減速,然后再朝武士前進(jìn)。玩耍的情景就似乎伴隨著“危急!快跑!”“不!這樣不行!”這樣的臺(tái)詞。相比用于把握玩耍的難易度,這種模式更適合用于營(yíng)造玩耍的演示效果。345.4怪物消逝模式的變化 我們把這4種特殊模式和一般模式混在一起來(lái)把握怪物的消逝。每經(jīng)過(guò)假設(shè)干次一般模式后就隨機(jī)選擇一種特殊模式。一般模式的持續(xù)次數(shù)也通過(guò)隨機(jī)準(zhǔn)備。355.4怪物消逝模式的變化 開(kāi)頭特殊模式時(shí),以及從特殊模式恢復(fù)到一般模式時(shí),必需確保畫(huà)面中的怪物已經(jīng)完全消逝。這樣可以防止特殊模式和一般模式中的怪物同時(shí)消逝。 比方我們看看在“加速→減速”模式中消逝一般怪物的狀況。當(dāng)怪物在畫(huà)面右邊加速前進(jìn)時(shí)假設(shè)消逝了別的怪物,有時(shí)就會(huì)造成兩個(gè)怪物以特殊短的時(shí)間間隔到達(dá)武士的位置。 為了避開(kāi)這種狀況,需要在使用特殊模式前后等待一段時(shí)間,直到畫(huà)面上的怪物“編隊(duì)”完全消逝。 那么,下面我們就來(lái)看看上述流程的實(shí)際代碼吧。365.4怪物消逝模式的變化375.4怪物消逝模式的變化3839(a)首先檢查是否已經(jīng)預(yù)備好了生成下一批怪物。就像前面所說(shuō)明的那樣,這是為了防止在特殊模式中消逝其他怪物。
(b)假設(shè)還沒(méi)做好生成怪物的預(yù)備,需要檢查現(xiàn)在和下一批怪物的消逝模式是特殊模式還是一般模式。當(dāng)滿足以下兩種條件時(shí),可以生成下一批怪物。
(b1)當(dāng)前為特殊模式并且畫(huà)面中已經(jīng)沒(méi)有怪物了
(b2)當(dāng)前為一般模式
(C)以現(xiàn)在的武士所在位置為基準(zhǔn),計(jì)算出怪物的生成位置。怪物從登場(chǎng)開(kāi)頭到消逝為止,武士前進(jìn)的距離隨各模式不同而不同。因此,需要在預(yù)備好生成怪物的時(shí)候,就定好怪物將要產(chǎn)生的位置。計(jì)算出怪物的生成位置后,產(chǎn)生怪物的預(yù)備工作就完成了。這之后直到新的怪物被創(chuàng)立出來(lái),(b)和(c)的處理都將被跳過(guò)。
(d)武士的位置超過(guò)oni_generate_line后生成新的怪物。
(e)最終,提前選擇下一次將生成的怪物的類型。相對(duì)于在怪物生成后立刻選擇下一批怪物的類型,程序在怪物從畫(huà)面上消逝時(shí)就要計(jì)算下一批怪物產(chǎn)生的位置。處理流程可能略微有些簡(jiǎn)潔,請(qǐng)讀者參考下面的程序流程圖理解一下。405.4怪物消逝模式的變化415.4怪物消逝模式的化變5.5小結(jié) 除了這里舉例的4種模式之外,應(yīng)當(dāng)還有很多種算法。讀者可以在理解了程序的構(gòu)造原理后,試著自己制造一些好玩的模式。426武士和怪物的碰撞檢測(cè)6.1關(guān)聯(lián)文件OniGroupControl.cs436.2概要 按下鼠標(biāo)按鍵后武士將揮刀迎擊,假設(shè)能成功砍到,怪物將向四處飛去。不過(guò)假設(shè)沒(méi)有砍倒怪物卻接觸到了它,玩耍則將完畢。為了實(shí)現(xiàn)這種功能,需要檢驗(yàn)武士對(duì)象和怪物對(duì)象之間的沖突,也就是所謂的碰撞(collision)檢測(cè)處理。 在很多玩耍中,碰撞檢測(cè)是特殊重要的一環(huán),不過(guò)在程序處理方面往往是比較麻煩的但是在Unity中,只需設(shè)定好外形就可以進(jìn)展碰撞檢測(cè)的計(jì)算。特殊便利! 不過(guò)這并不意味著我們可以什么都不用考慮。使用何種外形來(lái)進(jìn)展碰撞檢測(cè),將極大地影響玩耍的效果。在這一點(diǎn)上,即使承受了Unity,也照舊需要依靠開(kāi)發(fā)人員的閱歷和直覺(jué)。446.3分別對(duì)各個(gè)怪物進(jìn)展碰撞檢測(cè)的問(wèn)題 首先我們嘗試對(duì)武士承受立方體,對(duì)怪物承受球體來(lái)執(zhí)行碰撞檢測(cè)。角色之間的碰撞檢測(cè),常常使用這種粗略的幾何外形來(lái)進(jìn)展。這樣做的好處是相較于嚴(yán)格的幾何外形,計(jì)算量會(huì)少很多。而且對(duì)于大局部玩耍而言,這種做法都能得到比較逼真的結(jié)果。45 一般來(lái)說(shuō),球體的計(jì)算量更小。由于玩耍中會(huì)消逝大量的怪物,所以我們選擇了計(jì)算量盡可能小的球體作為檢測(cè)外形。 設(shè)定好外形之后,就可以用Unity來(lái)執(zhí)行碰撞檢測(cè)的計(jì)算。然后再實(shí)現(xiàn)碰撞后武士的行為似乎就大功告成了。不過(guò)事實(shí)上等玩耍運(yùn)行起來(lái)以后,會(huì)覺(jué)察還存在很多問(wèn)題。 第一個(gè)問(wèn)題是,武士會(huì)繞開(kāi)怪物前進(jìn)的問(wèn)題。466.3分別對(duì)各個(gè)怪物進(jìn)展碰撞檢測(cè)的問(wèn)題 這是由于怪物的碰撞檢測(cè)外形比武士的小很多。在Unity的碰撞處理中,為了使對(duì)象在發(fā)生碰撞后仍可以依據(jù)原來(lái)的前進(jìn)方向運(yùn)動(dòng),對(duì)碰撞對(duì)象加人了滑動(dòng)之類的處理。請(qǐng)回憶一下動(dòng)作玩耍中角色遇到墻壁時(shí)的反響。依據(jù)斜線方向始終按住方向鍵,大局部玩耍中角色都將和墻壁發(fā)生摩擦連續(xù)移動(dòng)。
讓碰撞后的對(duì)象進(jìn)展滑動(dòng),多數(shù)狀況下都會(huì)使玩耍玩起來(lái)更簡(jiǎn)潔自然,不過(guò)在我們的這個(gè)玩耍卻帶來(lái)了危害。
另外還有一個(gè)問(wèn)題是,攻擊的難度將加大。476.3分別對(duì)各個(gè)怪物進(jìn)展碰撞檢測(cè)的問(wèn)題 點(diǎn)擊鼠標(biāo)按鍵后武士開(kāi)頭揮舞砍刀。攻擊檢測(cè)將伴隨著這個(gè)攻擊動(dòng)作進(jìn)展。和怪物的碰撞檢測(cè)相像,我們也使用球體來(lái)進(jìn)展檢測(cè)。 雖然用于攻擊檢測(cè)的球體尺寸夠大,不過(guò)從武士的中心位置往內(nèi)或者往外偏移的地方有可能仍位于攻擊范圍之外。這樣就會(huì)消逝看起來(lái)似乎攻擊成功了其實(shí)卻并未命中的狀況。即使只剩下了一個(gè)怪物也有可能導(dǎo)致玩耍以失敗告終。像這樣,假設(shè)略微錯(cuò)過(guò)了時(shí)機(jī)就會(huì)造成失誤的話,玩耍就變得太難了。 針對(duì)這個(gè)問(wèn)題,試著轉(zhuǎn)變碰撞檢測(cè)的外形及其尺寸也是一種解決方法。不過(guò)怪物自身的尺寸原來(lái)就很小,假設(shè)加大的話又將消逝另外一個(gè)極端,即“看起來(lái)沒(méi)有擊中,結(jié)果卻擊中了”的狀況可能會(huì)增多。 讓我們?cè)囋嚻渌慕鉀Q方法。486.3分別對(duì)各個(gè)怪物進(jìn)展碰撞檢測(cè)的問(wèn)題6.4把怪物編成小組 玩耍中的怪物總是扎堆消逝。同一批次的怪物彼此之間比較密集,另
外武士總是沿著
直線前進(jìn)。因此
即使把同一批怪
物編為一個(gè)小組
來(lái)處理似乎也沒(méi)
有問(wèn)題。
于是我們用
OniGroup對(duì)象把
怪物集合起來(lái),
將怪物作為它的
子元素來(lái)處理。
碰撞檢測(cè)也改為
對(duì)OniGroup對(duì)象
整體進(jìn)展。49 怪物小組的碰撞檢測(cè)使用立方體,尺寸和武士的碰撞檢測(cè)所用的立方體大抵一樣。這樣設(shè)置以后,武士就不能再越過(guò)怪物或者從一側(cè)
繞過(guò)怪物了。
另外,假
設(shè)OniGroup檢測(cè)
到來(lái)自武士的攻
擊后,作為子元
素的全部怪物都
將受到攻擊。這
樣一來(lái),前面提
到的由于怪物的
位置稍有差異就
導(dǎo)致攻擊不成功
的狀況就不會(huì)再
有了。并且玩耍
也增加了多個(gè)怪物被同時(shí)砍飛的爽快感。506.4把怪物編成小組 Unity中允許直接使用模型的外形來(lái)進(jìn)展碰撞檢測(cè)·不過(guò)很多玩耍中都承受粗略的外形,而且也能到達(dá)像我們這次的玩耍一樣良好的效果。特殊是那些尺寸比其他角色小很多的對(duì)象以及大量對(duì)象一起移動(dòng)的狀況下,把它們集中歸為一個(gè)小組做碰撞檢測(cè)是很好的方法。516.5小結(jié)7得分凹凸的判定7.1概要 大局部玩耍都鼓舞玩家不斷挑戰(zhàn)更高的得分。雖然也有像角色扮演(RPG)這類更留意情節(jié)而不關(guān)注得分的玩耍,不過(guò)支持玩家通過(guò)互聯(lián)網(wǎng)與其他玩家同臺(tái)競(jìng)技,進(jìn)而挑戰(zhàn)更高得分的玩耍正變得越來(lái)越多。
這次我們開(kāi)發(fā)的是一個(gè)斬殺怪物的玩耍。成功斬殺怪物后,怪物消逝的數(shù)量會(huì)越來(lái)越多。玩家要盡可能地持續(xù)斬殺怪物,這樣才能在玩耍完畢之前殺掉大量的怪物。反之,玩家一旦失手,怪物消逝的數(shù)量就會(huì)削減。
固然,我們可以直接把倒下的怪物數(shù)量作為玩家的得分,但這里我們不妨多琢磨一下,看看怎樣才能讓玩耍更好玩。
例如,假設(shè)武士在追趕怪物的過(guò)程中始終不攻擊怪物,最終將撞上怪物。在接近怪物的過(guò)程中,假設(shè)太近的話就會(huì)失手。玩家要在確保不撞上怪物的前提下盡可能地接近怪物并斬殺,這樣玩耍的技術(shù)難度就增加了。
這次我們?cè)O(shè)定了一個(gè)“靠近斬殺怪物將得到高分”的規(guī)章,但假設(shè)靠得太近又會(huì)導(dǎo)致武士撞上怪物而失手,這樣玩耍就變得更加刺激了。
假設(shè)覺(jué)得玩耍缺點(diǎn)什么,或許可以嘗試著往玩耍中加人這種“高風(fēng)險(xiǎn)&高回報(bào)”的玩法。527.2武士的攻擊判定 在爭(zhēng)論如何推斷攻擊距離的遠(yuǎn)近之前,我們先說(shuō)明一下攻擊判定的原理。
玩家點(diǎn)擊鼠標(biāo)按鍵后,武士就會(huì)發(fā)起攻擊行為。而攻擊判定的計(jì)算就將伴隨著攻擊行為的整個(gè)過(guò)程。
在搏斗類玩耍中,往往需要對(duì)玩家角色的拳腳和所使用的武器執(zhí)行攻擊判定同樣,也需要對(duì)被攻擊者的每個(gè)關(guān)節(jié)部位進(jìn)展損害計(jì)算。正由于有了這樣精細(xì)的碰撞檢測(cè),才能夠?qū)崿F(xiàn)諸如“蹲下躲開(kāi)對(duì)方的盤(pán)旋踢”“腳部受到攻擊而.導(dǎo)致行走速度減緩”等玩耍特性。
不過(guò)我們這個(gè)玩耍的碰撞檢測(cè)并不需要細(xì)致到這種程度。由于怪物以很快的速度朝武士靠近,
假設(shè)要嚴(yán)格依據(jù)刀的外形來(lái)進(jìn)展碰撞
檢測(cè),擊中的難度將大大增加。所以
這里我們用一個(gè)大的球形來(lái)進(jìn)展碰撞
檢測(cè),并在播放攻擊動(dòng)作的時(shí)候?qū)⑵?/p>
放置在武士前面。53 攻擊的碰撞檢測(cè)的執(zhí)行時(shí)間,會(huì)比攻擊動(dòng)作的播放時(shí)間略微長(zhǎng)一些。假設(shè)提前按下鼠標(biāo)按鍵,怪物就將進(jìn)入上面所說(shuō)的碰撞檢測(cè)的球體中,這就意味著攻擊成功。搏斗玩耍中常常有“預(yù)推斷”的說(shuō)法。像這種敵人朝著玩家快速撲來(lái)的玩耍,加人這種機(jī)制后會(huì)讓玩耍變得更簡(jiǎn)潔上手。547.2武士的攻擊判定7.3推斷在多近的距離斬殺 通過(guò)提前進(jìn)展碰撞檢測(cè)和延長(zhǎng)檢測(cè)的時(shí)間,就可以應(yīng)對(duì)怪物快速運(yùn)動(dòng)的狀況。那么,現(xiàn)在讓我們回到主題,看看如何才能計(jì)算出.
“武士在多近的距離斬殺了怪物”。“要計(jì)算武士在多近的距離斬殺了怪物,看看怪物和武士之間的距離不就行了嗎?”55我們用腳本PlayerControl.cs來(lái)治理攻擊判定開(kāi)頭后的時(shí)間。
其中,attack_timer是用來(lái)記錄攻擊判定持續(xù)時(shí)間的計(jì)時(shí)器。在按鍵被按下的瞬間會(huì)用一個(gè)特定的值對(duì)它進(jìn)展初始化,隨著時(shí)間的削減,當(dāng)它的值變?yōu)?時(shí),則意味著攻擊判定執(zhí)行完畢。567.3推斷在多近的距離斬殺 attack_timer表示的只是攻擊判定的“剩余時(shí)間”,為了獲得被用于判段“在多近的距離斬殺”的“經(jīng)過(guò)時(shí)間”,我們還需要預(yù)備一個(gè)叫作GetAttackTimer的方法。
SceneControl.cs的AddDefeatNum方法在武士攻擊命中怪物時(shí)被執(zhí)行。
577.3推斷在多近的距離斬殺 最終,設(shè)定用于度量經(jīng)過(guò)時(shí)間和得分凹凸關(guān)系的ATTACK_TIME_GREAT和ATTACK_TIME_GOOD的值。假設(shè)經(jīng)過(guò)時(shí)間小于ATTACK_TIME_GREAT并在足夠近的距離內(nèi)斬殺了怪物則判定為GREAT,假設(shè)時(shí)間比ATTACKJIME_GOOD短則判定為GOOD,除此之外在遠(yuǎn)距離斬殺怪物的狀況則判定為。KAY。每次攻擊后都記錄下判定的結(jié)果,在玩耍完畢后再通過(guò)這些結(jié)果來(lái)準(zhǔn)備玩家的總體成績(jī)。58 通過(guò)轉(zhuǎn)變用于衡量得分凹凸的經(jīng)過(guò)時(shí)間的閡值(ATTACK_TIME_GREAT和ATTACK_TIME_GOOD),可以調(diào)整玩耍中獲得高分的難度。比起制作程序本身,有時(shí)候調(diào)整這些數(shù)值反而更花時(shí)間。但由于這些數(shù)值是準(zhǔn)備玩耍平衡性的重要因素,因此建議讀者通過(guò)比照效果調(diào)整出最適宜的數(shù)值。597.4小結(jié)8使被砍中的怪物向四處飛散8.1概要
被武士砍中后,怪物將向四周八方飛散。
動(dòng)作的不同將導(dǎo)致攻擊力度的強(qiáng)弱表現(xiàn)不同,被攻擊的各個(gè)對(duì)象的反響也有很大差異。在搏斗玩耍中,對(duì)對(duì)手一頓拳打腳踢之后,看到其步履蹄姍的樣子,往往可以感受到他的苦痛。相反假設(shè)對(duì)手顯得鎮(zhèn)靜不迫,即使動(dòng)作再華美也只能給人一種攻擊力很弱的印象。 有時(shí)候我們常常聽(tīng)到“攻擊反響”的說(shuō)
法。在玩玩耍時(shí)大家應(yīng)當(dāng)都有過(guò)感覺(jué)按鍵和搖
桿似乎變重了的經(jīng)受吧?可以說(shuō)這種玩耍通過(guò)視
覺(jué)和聽(tīng)覺(jué)把攻擊反響特殊完善地呈現(xiàn)了出來(lái)。
我們將通過(guò)怪物的四處飛散來(lái)表現(xiàn)武士的
攻擊強(qiáng)度。另外,我們也將實(shí)現(xiàn)上節(jié)提到的靠
近斬殺怪物會(huì)獵取高分的規(guī)章,并使“在多近
的跟離斬殺了怪物”影響怪物的飛散方式。
不過(guò)每次都承受同樣的方式飛散開(kāi)未免有
些單調(diào),因此我們會(huì)調(diào)整飛散的方向使每次的
效果都略有不同。608.2想象一下“圓錐體”在考慮實(shí)現(xiàn)方法之前,我們首先整理一下“需要做什么”。用專業(yè)術(shù)語(yǔ)來(lái)說(shuō)這叫作需求分析。要讓怪物華美地四處飛散讓每次的動(dòng)作都各不一樣 “華美”這種描述對(duì)于編程來(lái)說(shuō)是一個(gè)比較暖昧的說(shuō)法。應(yīng)當(dāng)描述得更為具體一些。
前面我們已經(jīng)提到過(guò)把假設(shè)干個(gè)怪物編成一個(gè)刁、組,并通過(guò)這個(gè)小組來(lái)執(zhí)行被攻擊判定。受到攻擊時(shí)小組內(nèi)的全部怪物都將四處飛散。而假設(shè)怪物們都向著同樣的方向飛去,將毫無(wú)“華美”可言。換句話說(shuō),所謂的“華美”,應(yīng)當(dāng)是這些怪物盡量朝著不同的方向飛散開(kāi)來(lái)。
這個(gè)被刀砍中然后各自飛散開(kāi)的過(guò)程,更類似于炸彈爆炸的畫(huà)面。由于怪物被刀砍中時(shí)受到了某一方向的作用力,因此往相反的一側(cè)飛出才顯得自然。武士具有右斬、左斬的動(dòng)作。每個(gè)動(dòng)作都將令怪物向反方向飛出。
“靠近斬殺時(shí)怪物將更華美地飛散開(kāi)’,這個(gè)要素也是必要的。雖然單純轉(zhuǎn)變速度也能到達(dá)類似的效果,但為了讓玩家更簡(jiǎn)潔地了解是否完善地砍中了怪物,我們將飛散的方向改為前前方向。假設(shè)從前面飛來(lái)的怪物都依據(jù)一樣的方向彈開(kāi),就能讓玩家猛烈地感受到攻擊的力度那么我們?cè)俅渭?xì)化需要完成的工作。61怪物朝不同方向飛出依據(jù)動(dòng)作的不同往左或往右飛出依據(jù)斬殺時(shí)距離的遠(yuǎn)近調(diào)整為前前方向每次飛出的方式都有變化 要是每次一飛出的方式都不一樣,很多讀者可能會(huì)想到使用隨機(jī)數(shù)。不過(guò)假設(shè)僅對(duì)飛出的方向和速度進(jìn)展隨機(jī)化處理,雖然可以轉(zhuǎn)變飛出的方向,但是不能夠保證怪物會(huì)按我們期盼的方向飛出。
像這樣“想在隨機(jī)化的同時(shí)進(jìn)展某種程度的傾向把握”的時(shí)候,解決問(wèn)題的關(guān)鍵就是先確定好關(guān)鍵性的原則,再使用隨機(jī)數(shù)轉(zhuǎn)變細(xì)節(jié)參數(shù)。
這
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商平臺(tái)的結(jié)構(gòu)化設(shè)計(jì)與用戶體驗(yàn)
- 國(guó)內(nèi)餐飲合同范本
- 優(yōu)化團(tuán)隊(duì)協(xié)作方式計(jì)劃
- 消費(fèi)者心理下的紅光治療儀市場(chǎng)需求分析
- 智能照明在展覽館照明中的應(yīng)用考核試卷
- 推廣返利合同范本
- 出租車行業(yè)城市形象塑造考核試卷
- 制定倉(cāng)庫(kù)清點(diǎn)工作的實(shí)施方案計(jì)劃
- 娛樂(lè)業(yè)會(huì)計(jì)的個(gè)人工作計(jì)劃
- 圖書(shū)選題的市場(chǎng)調(diào)研考核試卷
- 聽(tīng)胎心音操作評(píng)分標(biāo)準(zhǔn)
- HWSD數(shù)據(jù)庫(kù)土壤中文名稱
- 地產(chǎn)集團(tuán)地產(chǎn)體系員工職業(yè)序列及職業(yè)等級(jí)管理規(guī)定
- 安徽華星化工有限公司殺蟲(chóng)單廢鹽資源化處理項(xiàng)目環(huán)境影響報(bào)告書(shū)
- 平安健康文明主題班會(huì)
- 消防工程管理辦法附流程圖
- 雨水管道中粗砂回填
- 金庸群俠傳x最完整攻略(實(shí)用排版)
- 團(tuán)意操作流程詳解課件
- SH/T 0356-1996燃料油
- GB/T 9846.4-2004膠合板第4部分:普通膠合板外觀分等技術(shù)條件
評(píng)論
0/150
提交評(píng)論