纳金网
标题:
游戏基础案例(一)游戏主菜单制作
[打印本页]
作者:
刀锋狼
时间:
2015-2-18 00:36
标题:
游戏基础案例(一)游戏主菜单制作
制作游戏菜单:知识点
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;
}
}
}
复制代码
欢迎光临 纳金网 (http://rs.narkii.com/club/)
Powered by Discuz! X2.5