Unity3D遊戲學習製做之一

Unity版本:
     Unity4.3.2f1
開發語言:
     C#

1.肯定一下此次要實現的內容:
     此次主要是要實現一個第一人稱的射擊類遊戲,整個遊戲場景裏面有
主角、幾個怪物、藥箱、子彈,相似CS.

2.先把要作的內容羅列出來:
  • 菜單頁面
    • 菜單背景貼圖
    • 進入遊戲按鈕
    • 退出遊戲按鈕
  • 遊戲界面
    • 第一人稱視覺實現
    • 主角射擊
    • 血量管理
    • 藥箱補血
    • 怪物動畫製做實現
    • 怪物AI實現
      • 站立停頓
      • 走路巡邏
      • 衝向主角
      • 攻擊主角
3.首先製做菜單頁面

打開Unity -> 建立項目UnityStudy:暫時還不須要導入什麼包 -> 點擊create後Unity重啓建立好咱們的項目 


調整開發界面,在Unity界面的右上角有個Layout的按鈕,點開選中2 by 3:


在Project的Assets裏面建立兩個文件夾:


在src目錄裏面建立:
文件GameState:狀態類,用於標記遊戲的狀態
public class GameState{
     public const int GAME_MENU = 1; //菜單頁面
     public const int GAME_START = 2;//遊戲開始
     public const int GAME_END = 3;//遊戲結束
     public const int GAME_QUIT = 4;//遊戲退出
}

文件SceneController:這個文件主要是用來控制整個遊戲的場景切換。
使用狀態來控制場景描繪內容。

      //當前遊戲狀態爲菜單頁面
     //之因此用定義爲靜態,主要是爲了後面的代碼分離,其餘的類能夠
     //修改遊戲狀態
     public static int currentGameState;

     //上一次的遊戲狀態
     //避免在update的時候重複調用遊戲內容
     private int preGameState = -1;
     
     //菜單界面背景貼圖
     public Texture2D gameMenuBg;
     
     //菜單界面
     private GameMenu gameMenu; 
     
     // Use this for initialization
     void Start () {
          currentGameState = GameState.GAME_MENU;
     }

     void OnGUI()
     {
          switch(currentGameState)
          {
               case GameState.GAME_MENU:
                    //在這裏必需要說明
                    //在類GameMenu.drawGameSelectPanel();裏面使用了GUI類
                    //若是把該方法放在OnGUI方法以外,會出現錯誤空指針對象:
                    //NullReferenceException: Object reference not set to an instance of an object
                    if (null == gameMenu)
                    {
                         gameMenu = new GameMenu();
                    }
                    //描繪背景
                    gameMenuBg = gameMenu.renderSelectGameBg(gameMenuBg);
                    //製做按鈕
                    gameMenu.drawGameSelectPanel();
                    break; 
               case GameState.GAME_START:
                    
                    break;
               case GameState.GAME_END:
                    
                    break;
               case GameState.GAME_QUIT:   
                    
                    break;
               default:
                    Debug.Log("未知狀態錯誤 state="+currentGameState);
                    break;
          }
     }

文件GameMenu:這個類主要是用來描繪菜單界面,包括背景以及兩個按鈕。
public Texture2D renderSelectGameBg(Texture2D selectGameBg)
     {
          Texture2D copy = selectGameBg;
          //把貼圖的起始點放在(0,0),並設置它的寬高是場景的寬高
          GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), copy);
          return copy;
     }
     
     public void drawGameSelectPanel()  
     {
          if (GUI.Button(new Rect((Screen.width - 100) * 0.5f, (Screen.height - 100) * 0.5f, 100, 30), "進入遊戲"))
          {
               SceneController.currentGameState = GameState.GAME_START;
          }
          
          if (GUI.Button(new Rect((Screen.width - 100) * 0.5f, (Screen.height - 30) * 0.5f, 100, 30), "退出遊戲"))
          {
               SceneController.currentGameState = GameState.GAME_QUIT;
          }
     }

把SceneController類在Unity中拖動到主場景的攝像機上面,這時選中攝像機,在Inspector
面板中會多出一個腳本組件:




上面這個變量是要爲菜單面板製做的貼圖背景,如今它仍是空的,
若是直接運行程序,會報一個警告。


因此找一張背景圖片導入到Assets文件夾,並把它拖動到裏面,這樣就能夠給背景附上值了。


運行項目,就會發現菜單界面製做成功了。
相關文章
相關標籤/搜索