怎樣制作一款安卓2D單機(jī)手游
這就開(kāi)始做
關(guān)于Unity的介紹以及如何創(chuàng)建項(xiàng)目,我就不多說(shuō)了,因?yàn)榘俣群苋菀住,F(xiàn)在就開(kāi)始直接做,因?yàn)槲乙彩且呑鲞厡W(xué),所以必定會(huì)有很多不足。大佬們覺(jué)得哪里不對(duì),歡迎指正!
開(kāi)發(fā)環(huán)境
windows10
jdk
android sdk
Unity 2017.3?官網(wǎng)?游戲開(kāi)發(fā)軟件(必須)
VS2017 中文專業(yè)版?官網(wǎng)?C#編程調(diào)試軟件(推薦)
ReSharperUltimate.2017官網(wǎng)? C#代碼生成工具(可選)
制作游戲開(kāi)場(chǎng)動(dòng)畫(huà)
新建Unity 2D項(xiàng)目
做一款2D單機(jī)手游,回合制,沙盒模式。
做前準(zhǔn)備
我在網(wǎng)上找了一個(gè)武俠游戲的宣傳動(dòng)畫(huà),用于制作開(kāi)場(chǎng)動(dòng)畫(huà)。找到的那個(gè)動(dòng)畫(huà)時(shí)間太長(zhǎng),所以我下載了ffmpeg進(jìn)行動(dòng)畫(huà)剪裁,截取合適的動(dòng)畫(huà),作為我游戲的開(kāi)場(chǎng)動(dòng)畫(huà)。(侵刪)
1.如圖,將ffmpeg.exe和完整動(dòng)畫(huà)放到同一個(gè)文件夾。
2.打開(kāi)命令行:運(yùn)行->cmd,打開(kāi)后輸入下面的命令。
f: cd?F:Videos
(win10系統(tǒng)可以shift+鼠標(biāo)右鍵->在此處打開(kāi)命令窗口,免去輸入上述命令)
3.截取視頻
剪裁命令?ffmpeg -ss [開(kāi)始時(shí)間] -t [剪裁時(shí)長(zhǎng)] -i [輸入文件] -vcodec copy -acodec copy [輸出文件]
其中-vcodec copy是復(fù)制輸入文件的視頻編碼方式,-acodec copy是復(fù)制輸入文件的音頻編碼方式。
我要截取4s到18s的視頻,所以我輸入了下面的命令。
ffmpeg?-ss?00:00:04?-t?00:00:14?-i?f完整動(dòng)畫(huà).avi?-vcodec?copy?-acodec?copy?StartCartoon.mp4
導(dǎo)入動(dòng)畫(huà)
1.命令執(zhí)行完,得到StartCartoon.mp4動(dòng)畫(huà)視頻文件。
2.打開(kāi)Unity,在Project面板Assets文件夾下新建文件夾Resources,右鍵->Create->Folder,為文件夾取名為Resources,作為存儲(chǔ)資源的位置。
3.在文件夾Resources下繼續(xù)創(chuàng)建Movies文件夾,用來(lái)存放視頻文件。
4.Movies文件夾下,右鍵->Import new Asset,選擇剛才做好的視頻StartCartoon.mp4。
創(chuàng)建腳本
1.在Assets下新建場(chǎng)景文件夾Scenes。
2.新建場(chǎng)景Start,右鍵Scenes文件夾->Create->Scene,命名為Start,作為我們的開(kāi)始場(chǎng)景。
3.雙擊Start場(chǎng)景,選中Main Camera主攝像頭。
4.添加Script組件——開(kāi)始菜單,Inspector面板中,點(diǎn)擊Add Component->New Script->在name欄中輸入"StartMenu"->language選擇C Sharp。5.在Assets下新建場(chǎng)景文件夾Scripts,將新建的StartMenu.cs拖入Scripts文件夾中。
配置視頻文件
1.Movies下找到視頻StartCartoon,Import Version選擇Video Clip,選中Flip Horizontally(水平填充)、Flip Vertically(垂直填充)和Override for Android(為安卓重做),最后點(diǎn)擊Apply(應(yīng)用)。
2.先選中Main Camera,新建Video Player組件,Add Component->Video->Video Player。
3.將視頻拖入
4.設(shè)置視頻播放參數(shù)
Play On Awake?很重要!如果設(shè)置為false(未選中)時(shí),在awake的時(shí)候就已經(jīng)開(kāi)始播放視頻了,而此時(shí)聲音模塊還沒(méi)來(lái)得及加載,就會(huì)出現(xiàn)沒(méi)有聲音的情況;只有設(shè)置為true(選中)時(shí),當(dāng)你播放第一個(gè)視頻時(shí)才會(huì)有聲音,它保證了在聲音AudioSource模塊設(shè)置完成的情況先才開(kāi)始播放視頻。
Wait For First Frame 選中時(shí),決定是否在第一幀加載完成后才播放,只有在Play On Awake被勾選是才有效??梢苑乐挂曨l最前幾幀被跳過(guò)。
Loop?循環(huán)。
Render Mode?包含了多種視頻渲染的方式可供選擇,包括Camera Far Plane,Camera Near Plane,Render Texture,Material Override,Api Only。
1、Camera Far Plane:基于攝像機(jī)的渲染,渲染在攝像機(jī)的遠(yuǎn)平面上,需要設(shè)置用于渲染的攝像機(jī),同時(shí)可以修改alpha通道的值做透明效果,可用于背景播放器。
2、Camera Near Plane:基于攝像機(jī)的渲染,渲染在攝像機(jī)的近平面上,需要設(shè)置用于渲染的攝像機(jī),同時(shí)可以修改alpha通道的值做透明效果,可用作前景播放器。
3、Render Texture:將視頻畫(huà)面保存在Render Texture上,以供物體或者RawImage使用,可以用來(lái)做基于UGUI的播放器。
4、Material Override:將視頻畫(huà)面復(fù)制給所選Render的Material。需要選擇具有Render組件的物體,可以選擇賦值的材質(zhì)屬性??芍谱?60全景視頻和VR視頻。
5、Api Only: 待研究。
其中Camera Far Plane,Camera Near Planehe和Render Texture可以通過(guò)設(shè)置Aspect Ratio來(lái)選擇自適應(yīng)分辨率的方式.Audio Output Mode用于音頻的播放,None表示不播放音頻,Audio Source表示使用Audio Source進(jìn)行播放,Direct字面理解應(yīng)該是直接通過(guò)視頻來(lái)播放。我們需要新建一個(gè)AudioSource物體用于音頻播放,Audio Source的Clip不需賦值,其余參數(shù)可調(diào)。
Audio
Output Mode 選擇Audio Source,然后還要?jiǎng)?chuàng)建一個(gè)Audio Source組件(Add Component->Audio->Audio
Source,默認(rèn)配置即可),掛載到Audio Source里,不然視頻是沒(méi)有聲音的。
編輯腳本
1.打開(kāi)腳本,默認(rèn)情況下,Unity會(huì)自動(dòng)打開(kāi)VS2017,如果打開(kāi)的是Mono編輯器,則可以先關(guān)閉Mono,再找到菜單欄Edit->Preferences...->External Tools->External Script Editor中選中Visual Studio 2017,即可食用VS2017編寫C#腳本了。
2.編輯StartMenu腳本
using?UnityEngine; using?UnityEngine.Video; public?class?StartMenu?:?MonoBehaviour { ????public?VideoPlayer?VideoPlayer;?//1.聲明一個(gè)VideoPlayer對(duì)象 ????//?Use?this?for?initialization ????void?Start() ????{ ????????VideoPlayer?=?GetComponent();?//2.初始化VideoPlayer對(duì)象 ????????VideoPlayer.loopPointReached?+=?EndReached;?//當(dāng)前clip播放完成調(diào)用的事件 ????????VideoPlayer.audioOutputMode?=?VideoAudioOutputMode.AudioSource;?//設(shè)置聲音輸出模式 ????????VideoPlayer.SetTargetAudioSource(0,?GetComponent()); ????????VideoPlayer.IsAudioTrackEnabled(0); ????????VideoPlayer.Play();?//開(kāi)始播放視頻 ????} ????//?Update?is?called?once?per?frame ????void?Update() ????{ ????????if?(VideoPlayer.isPlaying) ????????{ ????????????//視頻正在播放時(shí),如果播放完畢或者點(diǎn)擊屏幕,則停止播放。 ????????????if?(VideoPlayer.clip.name?==?"StartCartoon"?&&?(ulong)VideoPlayer.frame?>=?VideoPlayer.frameCount)? ????????????{ ????????????????//判斷是否播放完畢 ????????????????VideoPlayer.Stop();?//停止播放 ????????????} ????????????if?(Input.GetMouseButtonDown(0)) ????????????{ ????????????????//點(diǎn)擊鼠標(biāo)左鍵(觸摸屏幕) ????????????????VideoPlayer.Stop(); ????????????} ????????} ????} ????private?void?EndReached(VideoPlayer?source) ????{ ????????//todo:?在此處寫視頻播放完畢后的處理代碼 ????} }
3.最后將Video Player拖入腳本的VideoPlayer對(duì)象。
預(yù)覽
這樣開(kāi)場(chǎng)動(dòng)畫(huà)就制作完成了,下面展示下我預(yù)覽的截圖
附件
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/klo220/article/details/79248985
【Unity 2017.3 制作安卓2D單機(jī)手游】——媲美愛(ài)