• 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 }
  • 相关阅读:
    nyoj_518_取球游戏_201404161738
    nyoj_528_找球号(三)_201404152050
    nyoj_68_三点顺序_201404152013
    nyoj_123_士兵杀敌(四)_201404131143
    树状数组
    nyoj_116_士兵杀敌(二)_201404131107
    hdu_1024_糖果大战_201404021640
    hdu_1205_吃糖果_201404021440
    nyoj_278_排队_201403282135
    nyoj_127_星际之门(一)_201403282033
  • 原文地址:https://www.cnblogs.com/niboy/p/4254646.html
Copyright © 2020-2023  润新知