首页 > 代码库 > unity3d-游戏实战突出重围,第一天

unity3d-游戏实战突出重围,第一天

 

       此游戏是根据书上一步一步敲的。是一个入门级别的游戏。

 

 

       技术分享

 

 

 

游戏状态机

  说到游戏状态机,就不得不提到开发中最常用的MVC模式。

MVC模式的全称是Model-View-Control,他将整个游戏划分为三大模块:模型组件,视图组件和控制器组件。

模型组件是视图组件与控制器组件之间通信的桥梁,比如:在控制主角移动时,系统先通过控制器输入键盘事件并将具体操作信息发送给模型组件,然后模型组件通过一系列的逻辑计

算,得到主角移动后的位置,并将相关信息发送给视图组件,最后视图组件接收消息并将主角的位置正确的显示在屏幕中。

 

游戏状态机对游戏进行模块化,并且将其划分为很多不同的游戏状态,在脚本最上层用一个变量来记录当前的游戏状态,这样,游戏逻辑与游戏渲染就可以根据当前的

游戏状态来执行各自的任务了。因为这个变量凌驾于MVC模式之上。所以在各自循环中都可以判断当前的游戏状态。

  1 using UnityEngine;  2 using System.Collections;  3   4 public class nq01 : MonoBehaviour  5 {  6   7     //游戏界面状态机  8   9     //主菜单界面 10     public const int STATE_MAINMENU = 0; 11     //开始游戏界面 12     public const int STATE_STARTGAME = 1; 13     //游戏设置界面 14     public const int STATE_OPTION = 2; 15     //游戏帮助界面 16     public const int STATE_HELP = 3; 17     //游戏退出界面 18     public const int STATE_EXIT = 4; 19     //GUI皮肤 20     public GUISkin mySkin; 21  22     //游戏背景贴图 23     public Texture textureBG; 24     //开始菜单贴图 25     public Texture tex_startInfo; 26     //帮助菜单贴图 27     public Texture tex_helpInfo; 28  29     //游戏音乐资源 30     public AudioSource music; 31     //当前游戏状态 32     private int gameState; 33  34     // Use this for initialization 35     void Start() 36     { 37         //初始化游戏状态为主菜单界面 38         gameState = STATE_MAINMENU; 39     } 40  41     // Update is called once per frame 42     void Update() 43     { 44  45     } 46     void OnGUI() 47     { 48         switch (gameState) 49         { 50             case STATE_MAINMENU: 51                 //绘制主菜单界面 52                 RenderMainMenu(); 53                 break; 54             case STATE_STARTGAME: 55                 //绘制游戏开始界面 56                 RenderStart(); 57                 break; 58             case STATE_OPTION: 59                 //绘制游戏设置界面 60                 RenderOption(); 61                 break; 62             case STATE_HELP: 63                 //绘制游戏帮助界面 64                 RenderHelp(); 65                 break; 66             case STATE_EXIT: 67                 //绘制游戏退出界面 68                 //目前直接关闭并退出游戏 69                 break; 70             default: 71                 break; 72         } 73     } 74     /// <summary> 75     /// 绘制游戏帮助界面 76     /// </summary> 77     private void RenderHelp() 78     { 79         GUI.skin = mySkin; 80         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), tex_helpInfo); 81         //返回按钮 82         if (GUI.Button(new Rect(0, 500, 403, 78), "", "back")) 83         { 84             gameState = STATE_MAINMENU; 85         } 86     } 87     /// <summary> 88     /// 绘制游戏设置界面 89     /// </summary> 90     private void RenderOption() 91     { 92         GUI.skin = mySkin; 93         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), textureBG); 94  95         //开启音乐按钮 96         if (GUI.Button(new Rect(0, 0, 403, 75), "", "music_on")) 97         { 98             if (!music.isPlaying) 99             {100                 //播放音乐101                 music.Play();102             }103         }104         //关闭音乐按钮105         if (GUI.Button(new Rect(0, 200, 403, 75), "", "music_off"))106         {107             //关闭音乐108             music.Stop();109         }110         //返回按钮111         if (GUI.Button(new Rect(0, 500, 403, 78), "", "back"))112         {113             gameState = STATE_MAINMENU;114         }115     }116     /// <summary>117     /// 绘制游戏开始界面118     /// </summary>119     private void RenderStart()120     {121         GUI.skin = mySkin;122         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), tex_startInfo);123         if (GUI.Button(new Rect(0, 500, 403, 78), "", "back"))124         {125             gameState = STATE_MAINMENU;126         }127     }128     /// <summary>129     /// 绘制主菜单界面130     /// </summary>131     private void RenderMainMenu()132     {133         //设置界面皮肤134         GUI.skin = mySkin;135         //绘制游戏背景图136         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), textureBG);137 138         //开始游戏按钮139         if (GUI.Button(new Rect(0, 30, 623, 153), "", "start"))140         {141             //进入开始游戏状态142             //由于目前处于测试阶段143             //后期会在这里重新载入新的游戏场景144             gameState = STATE_STARTGAME;145         }146         //游戏设置按钮147         if (GUI.Button(new Rect(0, 180, 623, 153), "", "option"))148         {149             //处于开始游戏状态150             gameState = STATE_OPTION;151         }152         //游戏帮助按钮153         if (GUI.Button(new Rect(0, 320, 623, 153), "", "help"))154         {155             //进入游戏帮助状态156             gameState = STATE_HELP;157         }158         //游戏退出按钮159         if (GUI.Button(new Rect(0, 470, 623, 153), "", "exit"))160         {161             //退出游戏162             Application.Quit();163         }164     }165 }

 

unity3d-游戏实战突出重围,第一天