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