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 }
原文地址:https://www.cnblogs.com/niboy/p/4254646.html