- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基础实用的一篇经验教程!一、搭建游戏的框架。
一般的游戏都可以分为四个场景:
1.开始界面
2.游戏场景
3.暂停界面
4.结束界面
开始界面,就是存放开始菜单的地方了,游戏场景就是游戏的主场景,游戏的主要元素都在这边体现,暂停和结束画面我就不多说了。更多的还有在开始和主游戏场景之间加入过场动画等等。当然你也可以在暂停界面中插入广告
我们会发现这几个场景之间其实就是切换来切换去的关系。如果知道设计模式中的State模式,就会发现跟这个很象。可以通过State模式来实现这几个场景的分离,然后分边为他们添加不同的元素。
想要挂接在Unity3D中的结点的脚本都得继承MonoBehaviour,State就是所有的状态的父类了,主要是三个函数,Init()用于这个状态的初始化,Update用于场景的更新,Exit()用于当离开当前状态时所进行的一些操作,比如隐藏当前界面等。
创建一个空的Object用来挂接我们游戏的主脚本,代码如下:
using UnityEngine;
using System.Collections;
public class Main_Script : MonoBehaviour {
public State m_CurState;
public void ChangeState(State newState)
{
m_CurState.Exit();
m_CurState = newState;
m_CurState.Init();
}
// Use this for initialization
void Start () {
m_CurState.Init();
}
// Update is called once per frame
void Update ()
{
m_CurState.Update();
}
}
这样我们就可以轻松的在不同的状态中切换了。想要增加一个新的状态,就只需继承State类,然后在其中写这个状态所要的元素,在适当的地方ChangeState一下就好了。
脚本的层次结构如下:
例如我在按钮按下时切换到开始场景:
using System.Collections;
public class BeginGame : MonoBehaviour {
public StateRun m_RunState;
public Main_Script m_MainScript;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnMouseEnter()
{
print(enter);
}
void OnMouseUp()
{
m_MainScript.ChangeState(m_RunState);
}
void OnMouseExit()
{
print(exit);
}
}
这个脚本是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。
现在开始真正的游戏元素的编写了。
第一步,让飞机动起来。
首先是飞机的前进,通常2D中的做就是背景的循环滚动。
在3D中我们可以让摄像机移动,背景我们可以做超一个大地形。。在地形上摆一些固定的东西。
// Update is called once per frame
void Update () {
TurnLeft = false;
TurnRight = false;
if (Input.GetKey(KeyCode.W))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
//print(screenPos.y);
if (Screen.height screenPos.y)
this.transform.Translate(Vector3.forward * Time.deltaTime * m_nMoveSpeed);
}
if (Input.GetKey(KeyCode.S))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
if (0 screenPos.y)
this.transform.Translate(Vector3.forward * Time.deltaTime * -m_nMoveSpeed);
}
if (Input.GetKey(KeyCode.A))
{
Vector3 screenP
原创力文档


文档评论(0)