首页 > 代码库 > 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-游戏实战突出重围,第一天
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。