1. 程式人生 > >第一個2D遊戲

第一個2D遊戲

遊戲名稱:祕密行動,也就是類似於合金彈頭。

遊戲是在泰課線上老師的講解下完成的。由於自己是第一次嘗試做遊戲,所以很多不懂的地方,還有很多Bug沒有解決。寫下播客是一方面是記錄這個過程,一方面是提升下自己的專業知識。

一.登入介面

這方面包括搭建登入介面的UI,新增動畫,控制UI邏輯,新增聲音管理

登入介面UI:

在將資源全匯入之後開始,首先Assets目錄下建立會用到的Folder,例如Scenes,Prefabs等,一定要養成良好的習慣。

然後該遊戲建立了兩個場景,一個用來登入UI展示,一個用來遊戲內容展示。建立遊戲場景的時候不要忘記新增索引,方便後期切換場景。下圖是我的場景:

注意:

場景不要忘記在Build Settings中匯入,因為自己在UI控制指令碼中切換場景的時候沒有首先匯入場景,所以出現了錯誤。

接下來在第一個場景中也就是索引為0的場景中建立相應的UI。第一個登入介面展示如下圖:

在Hierarchy中建立Image,Button,拖拽相應的貼圖資源。因為遊戲UI介面需要實現點選上圖的Play按鈕實現切換到下一個UI介面,所以在第一個UI介面下繼續建立相應的Image和Button。下圖是第二個UI介面展示。


Hierarchy介面如下:

Operation就是另一個UI。在這已經將所有的UI效果展示了出來,接下來該考慮怎麼點選圖中的Play按鈕實現UI切換。於是在這我建立了一個Manager空物體。在空物體中添加了相應的C#指令碼。

因為遊戲一開始是顯示第一個UI,所以應該將第二個UI手動隱藏掉。那麼意味著在指令碼中需要將Operation設定為true。才能切換之後展示出Operation的效果。在指令碼中第一步應該是切換到第二個UI,所以應該具備一個公開的方法。

 public void OnPlay1Click() {
        Operation.SetActive(true);
    }

除了在指令碼中提供這個公開的方法以外還需要在Inspector中給該按鈕的On Click賦值。如圖:

在此方法之前需要Public GameObject operation;

此外補充一點:

上圖出現的子彈孔是一個接一個出現的,也就是在第一個出現完成後第二個出現,依次類推。實現這個效果的方法;匯入DoTween,點選子彈孔在Inspector中新增DoTweenAnimation指令碼。此時Inspector中會出現Event,在Event中選擇OnComplete,將下個要顯示的子彈孔拖入,並且改變它們的SetActive為true。如圖:


二,UI介面聲音管理

關於聲音的管理,首先需要提供一個管理音效的指令碼,在這個指令碼中存放的是一些播放背景音樂或者一些特效的音樂。這個音樂管理的指令碼最好設定成為單例模式。

有關於聲音的:AudioSource,AudioClip,AudioListener。

AudioSource:

表示在3D空間中的音訊源。

AudioSource附加到一個GameObject用於在3D環境中播放聲音。單聲道聲音以3D播放。為了播放3D聲音,也需要有一個AudioListener。音訊監聽器通常附加在使用的相機上。立體聲總是不以距離為基礎衰減。你可以使用PlayPauseStop來播放音訊剪輯。也可以在播放時使用volume屬性調整音量,或者使用time來定位。多個聲音可以使用PlayOneShot在一個AudioSource上播放。可以使用PlayClipAtPoint在3D空間中的一個靜態位置播放剪輯。

AudioClip:

用於音訊資料的一個容器。

一個音訊剪輯儲存壓縮的ogg vorbis 或未壓縮的音訊檔案。AudioClips被引用和被用於AudioSources播放聲音。

AudioListener:

表示三維空間的一個偵聽器。

這個類實現像麥克風一樣的裝置。它記錄周圍的聲音並通過玩家的揚聲器播放。在場景中只能有一個偵聽器。

在這個指令碼中,需要提供播放的方法:我的指令碼中是有兩個方法,一個是通過音訊檔案來播放,一個是通過按照名字來播放,通常播放名字會比音訊檔案方便的多。

public void PlayAudio(AudioClip ac) {
        AudioSource.PlayClipAtPoint(ac,Camera.main.transform.position);
    }
    public void PlayByName(string name)
    {
        AudioClip ac = Resources.Load<AudioClip>("Sounds/" + name);
        PlayAudio(ac);
    }

AudioClips被AudioSource引用播放,所以在第一個方法中引數是AudioClip,也就是將想要播放的音訊檔案作為引數。因為AudioListener是掛載到MainCamera上的,所以PlayClipAtPoint()第二個引數表示位置就應該寫主攝像機的位置。如果一直使用第一種方法會比較麻煩,於是提供了一個通過名字來播放音效的方法。

在這提到了一個方法Resource.Load(),因為自己本身也是第一次接觸到,所以到處找了很久,對此方法有了一個大致的瞭解。在使用這個方法的時候一定要在Project面板中建立一個Resource檔案,可以在繼續在Resource下建立子目錄。我的方法中就存在一個"Sound/"目錄

整個遊戲開始的UI中,當子彈孔出現的時候會有音效,(我的控制UI指令碼名叫做LoginManager,音樂播放指令碼叫做SoundManager),所以應該在LoginManager中去呼叫SoundManager的方法。並且類似於上文補充的一點,應該在子彈孔的Inspector下的DoTweenAnimation的Event中將OnStart賦值。

注意:

DoTweenAnimation中的Event:

OnStart(),OnComplete();

OnStart()表示開始做什麼,OnComPlete表示結束做什麼。