- 最后登录
- 2016-10-1
- 注册时间
- 2013-12-28
- 阅读权限
- 90
- 积分
- 5805
- 纳金币
- 2954
- 精华
- 3
|
制作游戏菜单:知识点
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:- using UnityEngine;
- using System.Collections;
- public class MainMenu: MonoBehaviour
- {
-
- //游戏界面状态机
-
- //主菜单界面
- public const int STATE_MAINMENU = 0;
- //开始游戏界面
- public const int STATE_STARTGAME = 1;
- //游戏设置界面
- public const int STATE_OPTION = 2;
- //游戏帮助界面
- public const int STATE_HELP = 3;
- //游戏退出界面
- public const int STATE_EXIT = 4;
-
- //GUI皮肤
- public GUISkin mySkin;
-
- //游戏背景贴图
- public Texture textureBG;
- //开始菜单截图
- public Texture tex_startInfo;
- //帮助菜单贴图
- public Texture tex_helpInfo;
-
- //游戏音乐资源
- public AudioSource music;
- //当前游戏状态
- private int gameState;
-
- void Start ()
- {
- //初始化游戏状态为:主菜单界面
- gameState = STATE_MAINMENU;
- }
-
- void OnGUI()
- {
-
- switch (gameState)
- {
- case STATE_MAINMENU:
- //绘制主菜单界面
- RenderMainMenu();
- break ;
- case STATE_STARTGAME:
- //绘制游戏开始界面
- RenderStart();
- break ;
- case STATE_OPTION:
- //绘制游戏设置界面
- RenderOption();
- break ;
- case STATE_HELP:
- //绘制游戏帮助界面
- RenderHelp();
- break ;
- case STATE_EXIT:
- //绘制游戏退出界面
- //目前直接关闭退出游戏
- break ;
- }
-
- }
- //绘制主菜单界面
- void RenderMainMenu()
- {
- //设置界面皮肤
- GUI .skin = mySkin;
- //绘制游戏背景图
- GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),textureBG);
- //开始游戏按钮
- if (GUI .Button( new Rect (0,30,623,153), "" ,"start" ))
- {
- //进入开始游戏状态
- //目前由于是测试阶段
- //后期会在这里重新载入新的游戏场景
- gameState = STATE_STARTGAME;
- }
- //游戏设置按钮
- if (GUI .Button( new Rect (0,180,623,153), "" ,"option" ))
- {
- //进入开始游戏状态
- gameState = STATE_OPTION;
- }
- //游戏帮助按钮
- if (GUI .Button( new Rect (0,320,623,153), "" ,"help" ))
- {
- //进入游戏帮助状态
- gameState = STATE_HELP;
- }
- //游戏退出按钮
- if (GUI .Button( new Rect (0,470,623,153), "" ,"exit" ))
- {
- //退出游戏
- Application .Quit();
- }
- }
- //绘制游戏开始界面
- void RenderStart()
- {
- GUI .skin = mySkin;
- GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),tex_startInfo);
- //绘制返回按钮
- if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
- {
- //返回游戏主菜单
- gameState = STATE_MAINMENU;
- }
- }
- //绘制游戏帮助界面
- void RenderHelp()
- {
- GUI .skin = mySkin;
- GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),tex_helpInfo);
- if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
- {
- gameState = STATE_MAINMENU;
- }
- }
- //绘制游戏设置界面
- void RenderOption()
- {
- GUI .skin = mySkin;
- GUI .DrawTexture(new Rect(0,0, Screen .width,Screen .height),textureBG);
-
- //开启音乐按钮
- if (GUI .Button( new Rect (0,0,403,75), "" ,"music_on" ))
- {
- if (!music.isPlaying)
- {
- //播放音乐
- music.Play();
- }
- }
- //关闭音乐按钮
- if (GUI .Button( new Rect (0,200,403,75), "" ,"music_off" ))
- {
- //关闭音乐
- music.Stop();
- }
- //返回按钮
- if (GUI .Button( new Rect (0,500,403,78), "" ,"back" ))
- {
- //返回游戏主菜单
- gameState = STATE_MAINMENU;
- }
- }
- }
复制代码 |
|