unity3d-游戏实战突出重围,第一天
此游戏是根据书上一步一步敲的。是一个入门级别的游戏。
游戏状态机
说到游戏状态机,就不得不提到开发中最常用的MVC模式。
MVC模式的全称是Model-View-Control,他将整个游戏划分为三大模块:模型组件,视图组件和控制器组件。
模型组件是视图组件与控制器组件之间通信的桥梁,比如:在控制主角移动时,系统先通过控制器输入键盘事件并将具体操作信息发送给模型组件,然后模型组件通过一系列的逻辑计
算,得到主角移动后的位置,并将相关信息发送给视图组件,最后视图组件接收消息并将主角的位置正确的显示在屏幕中。
游戏状态机对游戏进行模块化,并且将其划分为很多不同的游戏状态,在脚本最上层用一个变量来记录当前的游戏状态,这样,游戏逻辑与游戏渲染就可以根据当前的
游戏状态来执行各自的任务了。因为这个变量凌驾于MVC模式之上。所以在各自循环中都可以判断当前的游戏状态。
using UnityEngine;
using System.Collections; public class nq01 : MonoBehaviour
{ //游戏界面状态机 //主菜单界面
public const int STATE_MAINMENU = ;
//开始游戏界面
public const int STATE_STARTGAME = ;
//游戏设置界面
public const int STATE_OPTION = ;
//游戏帮助界面
public const int STATE_HELP = ;
//游戏退出界面
public const int STATE_EXIT = ;
//GUI皮肤
public GUISkin mySkin; //游戏背景贴图
public Texture textureBG;
//开始菜单贴图
public Texture tex_startInfo;
//帮助菜单贴图
public Texture tex_helpInfo; //游戏音乐资源
public AudioSource music;
//当前游戏状态
private int gameState; // Use this for initialization
void Start()
{
//初始化游戏状态为主菜单界面
gameState = STATE_MAINMENU;
} // Update is called once per frame
void Update()
{ }
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;
default:
break;
}
}
/// <summary>
/// 绘制游戏帮助界面
/// </summary>
private void RenderHelp()
{
GUI.skin = mySkin;
GUI.DrawTexture(new Rect(, , Screen.width, Screen.height), tex_helpInfo);
//返回按钮
if (GUI.Button(new Rect(, , , ), "", "back"))
{
gameState = STATE_MAINMENU;
}
}
/// <summary>
/// 绘制游戏设置界面
/// </summary>
private void RenderOption()
{
GUI.skin = mySkin;
GUI.DrawTexture(new Rect(, , Screen.width, Screen.height), textureBG); //开启音乐按钮
if (GUI.Button(new Rect(, , , ), "", "music_on"))
{
if (!music.isPlaying)
{
//播放音乐
music.Play();
}
}
//关闭音乐按钮
if (GUI.Button(new Rect(, , , ), "", "music_off"))
{
//关闭音乐
music.Stop();
}
//返回按钮
if (GUI.Button(new Rect(, , , ), "", "back"))
{
gameState = STATE_MAINMENU;
}
}
/// <summary>
/// 绘制游戏开始界面
/// </summary>
private void RenderStart()
{
GUI.skin = mySkin;
GUI.DrawTexture(new Rect(, , Screen.width, Screen.height), tex_startInfo);
if (GUI.Button(new Rect(, , , ), "", "back"))
{
gameState = STATE_MAINMENU;
}
}
/// <summary>
/// 绘制主菜单界面
/// </summary>
private void RenderMainMenu()
{
//设置界面皮肤
GUI.skin = mySkin;
//绘制游戏背景图
GUI.DrawTexture(new Rect(, , Screen.width, Screen.height), textureBG); //开始游戏按钮
if (GUI.Button(new Rect(, , , ), "", "start"))
{
//进入开始游戏状态
//由于目前处于测试阶段
//后期会在这里重新载入新的游戏场景
gameState = STATE_STARTGAME;
}
//游戏设置按钮
if (GUI.Button(new Rect(, , , ), "", "option"))
{
//处于开始游戏状态
gameState = STATE_OPTION;
}
//游戏帮助按钮
if (GUI.Button(new Rect(, , , ), "", "help"))
{
//进入游戏帮助状态
gameState = STATE_HELP;
}
//游戏退出按钮
if (GUI.Button(new Rect(, , , ), "", "exit"))
{
//退出游戏
Application.Quit();
}
}
}
unity3d-游戏实战突出重围,第一天的更多相关文章
- Unity3D游戏开发和网络游戏实战书籍及配套资源和一些视频教程分享
目录 1. 按 2. pdf 3. 配套资源 3.1. Unity网络游戏实战第二版 3.2. Unity网络游戏实战第一版 4. 视频教程 5. 更多坦克大战代码 1. 按 本文主要分享了: Uni ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- Unity3D游戏在iOS上因为trampolines闪退的原因与解决办法
http://7dot9.com/?p=444 http://whydoidoit.com/2012/08/20/unity-serializer-mono-and-trampolines/ 确定具体 ...
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...
- Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
上一节,我们写出了一个疯狂产生平台的东西.所谓上帝欲使其灭亡,必先使其疯狂.所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台.btw如果哪天你觉得自己的老板行为乖张,难以理喻. ...
- 将Unity3D游戏移植到Android平台上
将Unity3D游戏移植到Android平台是一件很容易的事情,只需要在File->Build Settings中选择Android平台,然后点击Switch Platform并Build出ap ...
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- Unity3D项目实战笔记(5):延时功能的几种实现
我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...
- Unity3D游戏UI开发经验谈
原地址:http://news.9ria.com/2013/0629/27679.html 在Unity专场上,108km创始人梁伟国发表了<Unity3D游戏UI开发经验谈>主题演讲.他 ...
- Unity3D游戏开发之连续滚动背景
Unity3D游戏开发之连续滚动背景 原文 http://blog.csdn.net/qinyuanpei/article/details/22983421 在诸如天天跑酷等2D游戏中,因为游戏须要 ...
随机推荐
- [No0000169]Potplayer倍速播放快捷键修改速率步长
右键-播放-播放设置-速度调整单位改成0.5,即可一次加速到1.5
- tensorflow如何正确加载预训练词向量
使用预训练词向量和随机初始化词向量的差异还是挺大的,现在说一说我使用预训练词向量的流程. 一.构建本语料的词汇表,作为我的基础词汇 二.遍历该词汇表,从预训练词向量中提取出该词对应的词向量 三.初始化 ...
- A little issue in Mathematical Thought from Ancient to Modern Times, Vol. 3
At P985 of the book, says But there are cuts that are not determined by rational numbers. If we put ...
- ul li 的 float:left;
如 ul li{float:left;} 出来的效果不仅是原本默认竖着排的元素变横排,还是往左边排,重点是元素是按顺序排的,如果float等于right,则不仅是往右排,且元素是倒着排的,如原来的a ...
- [dpdk][kni] dpdk kernel network interface
文档:https://doc.dpdk.org/guides/prog_guide/kernel_nic_interface.html 摘要: The KNI kernel loadable modu ...
- 2018/05/02 每日一学Linux 之 .bash_profile和.bashrc的区别
最近一直在学习其他,导致博客就疏忽了,很不好(其实就是自己懒了......). -- 为什么要使用 .bash_profile和.bashrc ? 在平常的使用中,有些文件夹或者命令很长,在执行时需要 ...
- 几种Linux 查询外网出口IP的方法(转)
原文:http://www.cnblogs.com/wudonghang/p/354289a61129731e7d2075968356e6ad.html Curl 纯文本格式输出: curl ican ...
- ubuntu安装jupyter 并设置远程访问
Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程,可视化和说明文本的文档. 简单的介绍就是:Jupyter Notebook是Ipython的升级版,而Ipyt ...
- Code once, debug everywhere.
1.通常语言调用一个函数会出exception的情况,在javascript里面返回的是undefined.等到程序运行不正常的时候,你看到数据结构的有些地方为什么是undefined,只能哭了. 2 ...
- TCP/IP具体解释--TCP首部的TimeStamp时间戳选项
TCP应该是以太网协议族中被应用最为广泛的协议之中的一个,这里就聊一聊TCP协议中的TimeStamp选项.这个选项是由RFC 1323引入的,该C建议提交于1992年.到今天已经足足有20个年头.只 ...