通过上一篇那些资料的学习,现在假定你能比较熟练的操作unity3D了。

本人也是Unity3D的初学者,这边记录一下我的游戏制作经过,希望对别人有所帮助吧,欢迎大家一起讨论。

 

一、搭建游戏的框架。

一般的游戏都可以分为四个场景:

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");
}
}


这个脚本是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。