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 }
时间: 2024-10-02 10:27:22

unity3d-游戏实战突出重围,第一天的相关文章

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

零基础unity3d游戏开发系列目录

零基础Unity3D游戏开发系列 第一章:游戏开发与游戏引擎(一) 零基础Unity3D游戏开发系列 第一章:游戏开发与游戏引擎(二) 零基础Unity3D游戏开发系列 第二章:Unity3D概览(一)界面... 零基础Unity3D游戏开发系列 第二章:Unity3D概览(一)创建与打开项目I 零基础unity3d游戏开发系列 第二章:unity3d概览(一)创建与打开项目II 零基础Unity3D游戏开发系列 第二章:Unity3D概览(一)创建与打开项目III 零基础Unity3D游戏开发

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

Unity3D游戏引擎实战开发视频教程

Unity3D游戏引擎实战开发从入门到精通(坦克大战项目实战.NGUI开发.GameObject) 适合人群:初级 课时数量:20课时 用到技术:Unity3D.VS2008.NGUI2.61.GameObject 涉及项目:坦克大战项目实战 咨询qq:1840215592 课程内容简介 Unity3D游戏引擎实战开发从入门到精通课程由浅入深的介绍Unity3D的开发流程.从软件使用到API接口的使用,从成品到优化.介绍整个Unity3D的基本开发过程及开发中碰到的基础问题进行深入讲解.对代码重

第一篇:Unity3d游戏开发之移动端完整包更新方案

由于Unity没法进行热更新,也就是局部更新,所以如果你在设计之前没有考虑好使用Lua,反射,或者其他方式实现热更新,但是又要面临游戏上线那么你可以考虑使用完整包更新,其实这对于游戏包不是很大的情况下,也是一个不错的选择,当然设计者在设计之初都想好了热更新那就宁当别论了. Unity3d 在移动端考虑Android和Ios平台的完整包更新 实现逻辑: 首先检查本地的版本和服务器的版本是否相同,如果相同则直接进入游戏,如果不同则下载服务器的最新文件,然后根据最新文件到资源服务器下载最新的安装包 我

unity3D游戏开发实战原创视频讲座系列12之U3D的2D开发新方法实战

 U3D的2D开发新方法实战 (Unity3d-4.x的打飞机2D游戏开发新的方法应用 ) 大纲介绍:不使用NGUI和TK2d插件,   使用 U3D内置强大的最大的工具. 开发过程设计到如下内容: 从图片集中截取出 精灵.(这些与以前的方法是不同的) 连续图片的动画制作. 对动画的编辑 Mecanim动画系统的使用 2D物理系统和碰撞检测. 游戏的简单完善(敌机的产生.背景滚动.声音.分数的实现). 会用8讲的时间来介绍. 视持续更新中.... 视频存放地址如下:http://ipd.pp

unity3d开发实战《啪啪三国》技术详解!

去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成.人员要求.常见的unity3d开发遇到的坑及解决办法.在演讲中,王伟峰也贡献了<啪啪三国>开发过程中总结的各种经验,从优化.插件库.服务器架构.SDK等很多细节进行了讲解.值得一说的是,王伟峰现场演讲十分幽默,冷笑话段子不断爆出,让在场观众在连续的笑声中听完这个特别的技术演讲. <ignore_js_op> 以下是王伟峰现场演讲实录

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者: