unity fixedupdate_3D俯视角射击——用Unity还原东方弹幕(上)
前言
之前我們的專欄中介紹過2D的俯視角射擊,這次就來試試在3D場景下的實(shí)現(xiàn)。移動(dòng)射擊的實(shí)現(xiàn)方法差不多,所以本次的主要目標(biāo)是在3D場景下還原東方的符卡(彈幕)效果。
我們先來看看最終結(jié)果:
可配置的彈幕樣式本文主要內(nèi)容:
1. 3D場景俯視角射擊
2. 可配置化彈幕
3. 還原東方彈幕
注:為了提升表現(xiàn)效果而使用的模型動(dòng)畫、屏幕后效(PostProcessing)等方法不在本次教程范圍內(nèi)。同時(shí)本文只寫出了部分關(guān)鍵代碼,完整項(xiàng)目下載詳見本文末尾。
一、3D場景俯視角移動(dòng)
實(shí)現(xiàn)目標(biāo):鍵盤移動(dòng),鼠標(biāo)射擊。不射擊時(shí)面向移動(dòng)方向,射擊時(shí)面向射擊方向,轉(zhuǎn)向有轉(zhuǎn)向速度,射擊方向?yàn)槭髽?biāo)點(diǎn)擊方向。
在之前2D俯視角射擊中已經(jīng)介紹過移動(dòng)的方法,這里就不再贅述,想要了解的同學(xué)可參考:
Yumir:【反向元?dú)怛T士】用unity實(shí)現(xiàn)俯視角射擊是一種怎樣的體驗(yàn)?zhuanlan.zhihu.com當(dāng)然3D人物轉(zhuǎn)向應(yīng)需要轉(zhuǎn)向速度,否則會(huì)顯得很突兀,可用 Quaternion.LookRotation控制轉(zhuǎn)向, Quaternion.Slerp控制轉(zhuǎn)向速度。
二、彈幕可配置化
實(shí)現(xiàn)目標(biāo):通過修改Inspector面板中的參數(shù),即可實(shí)現(xiàn)簡單的彈幕樣式。
本次主要實(shí)現(xiàn)兩種彈幕樣式,散射彈幕和平行彈幕。實(shí)現(xiàn)這兩種樣式需要的參數(shù)(BulletData)如下。
public首先創(chuàng)建個(gè)球體作為子彈預(yù)制體,OnEnable時(shí),在FixedUpdate實(shí)現(xiàn)移動(dòng),當(dāng)規(guī)定了子彈的位置和方向,子彈就會(huì)朝著正前方移動(dòng)。
transform然后是通過設(shè)定的參數(shù)實(shí)現(xiàn)彈幕樣式:散射彈幕,如下圖所示,以角色正前方為初始方向,當(dāng)單次彈幕數(shù)量為奇數(shù)或是偶數(shù)時(shí),子彈旋轉(zhuǎn)角度的邏輯是不一樣的。
奇數(shù)時(shí),角色正前方會(huì)發(fā)射子彈,左右兩側(cè)的子彈角度為角色(當(dāng)前角度+-旋轉(zhuǎn)角度)偶數(shù)時(shí),角色正前方不會(huì)有子彈,左右兩側(cè)的子彈角度為(當(dāng)前角度+-旋轉(zhuǎn)角度/2)同理平行彈幕也不相同,下面給出代碼,其實(shí)就是一個(gè)簡單的數(shù)學(xué)運(yùn)算。
int代碼中使用到了對(duì)象池相關(guān)知識(shí),在本專欄之前文章中有詳細(xì)介紹過對(duì)象池,詳情可見:
陳虹松:【Unity】工具類系列教程——對(duì)象池!?zhuanlan.zhihu.com控制射擊間隔時(shí)間可以用協(xié)程的方式達(dá)成,我這里用了一個(gè)偷懶的方法:因?yàn)樵贔ixedUpdate中每秒是固定運(yùn)行50次(可在Project Setting中修改),所以在FixedUpdate中可以用i++來控制時(shí)間
if三、還原彈幕效果
1.波與粒的境界
用簡單的函數(shù)繪制成優(yōu)美的彈幕,在文章開頭大家應(yīng)該已經(jīng)看到了所實(shí)現(xiàn)的效果,這里再放上一張對(duì)比圖。
新建個(gè)空物體用來發(fā)射彈幕,除了之前提到的彈幕所需參數(shù)外,還需要
public實(shí)現(xiàn)其實(shí)非常簡單,每次發(fā)射5發(fā)子彈,角度間隔為360/5°,然后發(fā)射子彈的物體每幀進(jìn)行越來越快的旋轉(zhuǎn),彈幕就能形成上面的效果。
SelfRotation附上具體參數(shù)
2.怨靈貓亂步
可以看到子彈是從11個(gè)不同位置生成,每次生成4圈彈幕,每圈彈幕角度隨機(jī),經(jīng)過一定時(shí)間后才開始移動(dòng)。
子彈的延時(shí)還是通過記錄一個(gè)DelayI來實(shí)現(xiàn)。
void同時(shí)還需要一個(gè)與發(fā)射中心距離的參數(shù)
public修改子彈位置到中心點(diǎn)前方
go來看看效果
詳細(xì)參數(shù)可以下載本文末尾的項(xiàng)目自行查看。想要完美還原的話,剩下的就是將發(fā)射物體移動(dòng)到指定位置、調(diào)整延遲時(shí)間等,可以使用Dotween等方式實(shí)現(xiàn),本次就不再進(jìn)行展示了。
由于篇幅原因本次只展示了這么多,有興趣的同學(xué)可以自己嘗試去實(shí)現(xiàn)其他符卡。
最后不要忘了這是在3D場景下的彈幕,所以這樣也是能做到的。
工程地址:https://pan.baidu.com/s/1JEXp9FsNswaihwSBkiHs-Q
提取碼:mpik
對(duì)游戲開發(fā)學(xué)習(xí)感興趣的盆友,歡迎訪問:http://levelpp.com/
同時(shí),也歡迎加入游戲開發(fā)群攪基:610475807
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的unity fixedupdate_3D俯视角射击——用Unity还原东方弹幕(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: icmp基于tcp还是udp_面试爱考、
- 下一篇: canoco5冗余分析步骤_Python