查看: 997|回复: 0
打印 上一主题 下一主题

[其他] 游戏基础案例(一)游戏主菜单制作

[复制链接]

711

主题

10

听众

5805

积分

高级设计师

Rank: 6Rank: 6

纳金币
2954
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-2-18 00:36:42 |只看该作者 |倒序浏览

制作游戏菜单:知识点

1.播放音乐:
     1.把音乐文件移到场景中,取名为Music
     2.在脚本中声明AudioSource music
     3.如果没播放就播放
     if(!music.isPlaying) music.Play();
     4.停止:
     music.Stop();

2.游戏状态:
     游戏状态怎么理解呢?就是个游戏发送一个状态,告诉它下一步应该做什么事情?这个状态起到了简化代码,使代码更有可读性
     比如,现在有以下状态,渲染主界面,渲染开始界面,渲染设置,渲染帮助,离开界面,那么在游戏状态中就可以这样声明:
     public const int STATE_MAINMEMU = 0;
     public const int STATE_STARTGAME = 1;
     public const int STATE_OPTION = 2;
     public const int STATE_HELP = 3;
     public const int STATE_QUIT = 4;
     然后设置一个当前的游戏状态
     public int gameState;
     游戏一开始要渲染主菜单界面
     void Start()
     {
          gameState = STATE_MAINMENU;
     }
     这样以后再更新中监听当前游戏状态,然后进行游戏:
     void Update()
     {
          switch(gameState)
          {
               case STATE_MAINMENU:
                    RenderMainMenu();
                break;
               case STATE_STARTGAME:
                    RenderStartGame();
                 break;
                .......
          }
     }
    这样,当执行某个动作使游戏进入另外一个状态:
     if(GUI.Button(new Rect(0,50,483,78),"","start")
     {
          gameState = STATE_STARTGAME;
     }
     整个游戏逻辑看起来很清楚简洁,它利用了消息响应的模式使游戏运行起来

3.GUISkin:
     GUISkin是这次学到的第二个收获,制作一个GUISkin就可以让游戏使用一套皮肤,然后直接从脚本中调用。比如,现在要制作一个每个按钮的背景,一共有七个按钮:start,option,help,quit,back ,music_on,music_off
     创建GUISkin方法:
     在Project中Create->GUI Skin:
     在Button选项中声明Size为7:对于Size 0 ,名字取为start,在Normal选项中把start的图像拖进去,制作完毕
     下面的6个全部这样制作。
      接着在脚本中调用皮肤:

     public GUISkin mySkin;
     void RenderMainMenu()
     {
          GUI.skin=myskin;
          //渲染游戏主菜单界面的的背景:
          GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),TextureBg);
          [url=]//渲染sta[/url]rt按钮的背景
          if(GUI.Button(new Rect(0,0,403,78),"","start")
          {

          }
     }

4.退出游戏程序:
     点击quit按钮停止:
     if(GUI.Button(new Rect(0,0,500,78),"","quit")
     {
          Appliction.quit();
     }



脚本程序 - MainMenu.cs:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class MainMenu: MonoBehaviour
  4. {
  5.                
  6.                  //游戏界面状态机
  7.                
  8.                  //主菜单界面
  9.                  public const int STATE_MAINMENU = 0;
  10.                  //开始游戏界面
  11.                  public const int STATE_STARTGAME = 1;
  12.                  //游戏设置界面
  13.                  public const int STATE_OPTION = 2;
  14.                  //游戏帮助界面
  15.                  public const int STATE_HELP = 3;
  16.                  //游戏退出界面
  17.                  public const int STATE_EXIT = 4;
  18.                
  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.                  void Start ()
  35.                 {
  36.                                  //初始化游戏状态为:主菜单界面
  37.                                 gameState = STATE_MAINMENU;
  38.                 }
  39.                
  40.                  void OnGUI()
  41.                 {
  42.                
  43.                                  switch (gameState)
  44.                                 {
  45.                                                  case STATE_MAINMENU:
  46.                                                                  //绘制主菜单界面
  47.                                                                 RenderMainMenu();
  48.                                                  break ;
  49.                                                  case STATE_STARTGAME:
  50.                                                                  //绘制游戏开始界面
  51.                                                                 RenderStart();
  52.                                                  break ;
  53.                                                  case STATE_OPTION:
  54.                                                                  //绘制游戏设置界面
  55.                                                                 RenderOption();
  56.                                                  break ;
  57.                                                  case STATE_HELP:
  58.                                                                  //绘制游戏帮助界面
  59.                                                                 RenderHelp();
  60.                                                  break ;
  61.                                                  case STATE_EXIT:
  62.                                                                  //绘制游戏退出界面
  63.                                                                  //目前直接关闭退出游戏
  64.                                                  break ;
  65.                                 }
  66.                                 

  67.                 }
  68.                  //绘制主菜单界面
  69.                  void RenderMainMenu()
  70.                 {
  71.                                  //设置界面皮肤
  72.                                  GUI .skin = mySkin;
  73.                                  //绘制游戏背景图
  74.                                  GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),textureBG);
  75.                                  //开始游戏按钮
  76.                                  if (GUI .Button( new Rect (0,30,623,153), "" ,"start" ))
  77.                                 {
  78.                                                  //进入开始游戏状态
  79.                                                  //目前由于是测试阶段
  80.                                                  //后期会在这里重新载入新的游戏场景
  81.                                                 gameState = STATE_STARTGAME;
  82.                                 }
  83.                                  //游戏设置按钮
  84.                                  if (GUI .Button( new Rect (0,180,623,153), "" ,"option" ))
  85.                                 {
  86.                                                  //进入开始游戏状态
  87.                                                 gameState = STATE_OPTION;
  88.                                 }
  89.                                  //游戏帮助按钮
  90.                                  if (GUI .Button( new Rect (0,320,623,153), "" ,"help" ))
  91.                                 {
  92.                                                  //进入游戏帮助状态
  93.                                                 gameState = STATE_HELP;
  94.                                 }
  95.                                  //游戏退出按钮
  96.                                  if (GUI .Button( new Rect (0,470,623,153), "" ,"exit" ))
  97.                                 {
  98.                                                  //退出游戏
  99.                                                  Application .Quit();
  100.                                 }
  101.                 }
  102.                  //绘制游戏开始界面
  103.                  void RenderStart()
  104.                 {
  105.                                  GUI .skin = mySkin;
  106.                                  GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),tex_startInfo);
  107.                                  //绘制返回按钮
  108.                                  if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
  109.                                 {
  110.                                                  //返回游戏主菜单
  111.                                                 gameState = STATE_MAINMENU;
  112.                                 }
  113.                 }
  114.                  //绘制游戏帮助界面
  115.                  void RenderHelp()
  116.                 {
  117.                                  GUI .skin = mySkin;
  118.                                  GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),tex_helpInfo);
  119.                                  if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
  120.                                 {
  121.                                                 gameState = STATE_MAINMENU;
  122.                                 }
  123.                 }
  124.                  //绘制游戏设置界面
  125.                  void RenderOption()
  126.                 {
  127.                                  GUI .skin = mySkin;
  128.                                  GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),textureBG);
  129.                                 
  130.                                  //开启音乐按钮
  131.                                  if (GUI .Button( new Rect (0,0,403,75), "" ,"music_on" ))
  132.                                 {
  133.                                                  if (!music.isPlaying)
  134.                                                 {
  135.                                  //播放音乐
  136.                 music.Play();
  137.             }

  138.                                 }
  139.                                  //关闭音乐按钮
  140.                                  if (GUI .Button( new Rect (0,200,403,75), "" ,"music_off" ))
  141.                                 {
  142.                                                  //关闭音乐
  143.                                                 music.Stop();
  144.                                 }
  145.                                  //返回按钮
  146.                                  if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
  147.                                 {
  148.                                                  //返回游戏主菜单
  149.                                                 gameState = STATE_MAINMENU;
  150.                                 }
  151.                 }
  152. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-28 06:28 , Processed in 0.098784 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部