您的位置:首页 > 移动开发 > Unity3D

Unity 游戏场景控制Scene Manager

2014-01-27 12:42 169 查看

引言

游戏基本架构大致分为介绍界面(introduction),主菜单界面(Menu),游戏界面(Game),设置界面(Setting),排行榜(high score)。

在很多开发引擎中都结合以上架构存在类似的概念。安卓的活动(Activity),视图(View)等。在Unity中更是有场景(Scene)这一个概念。

Scene就是一组相关联的游戏对象的一个集合,通常每个集合就是一个场景,但是也有可能只是一个场景的一部分!

那么怎么管理游戏场景及游戏关卡是很重要的一个问题。其中涉及到场景跳转,场景加载等。如下介绍一款插件:Scene Manager。

提供官网地址。其中有DEMO,Tutorials,documentation,support。可供学习。



也可在unity 资源商店导入。



上该篇讲述后的工程视频:

http://v.youku.com/v_show/id_XNjY2NzA5NDY0.html

Unity实现过程

介绍:一个菜单界面,点击进入游戏关卡一,点击进入游戏关卡二,点击回到菜单界面。

新建一个Unity工程,命名为SceneManagerTest.

保存场景为MyMainMenu.新建2个场景(游戏关卡一,二)为MyLevel1,MyLevel2.

导入插件包。其中插件包中的实例就不说了,直接进入简单的应用开发吧。

在工程视图中新建"Resources"、"MyScenes"、"MyScripts"、三个文件夹。



复制SceneManagerDemo中的SMGameEnvironment.cs脚本到MyScripts文件夹中,复制Transitions文件夹到新建的Resources下,删除SceneManagerDemo.



在Resources文件夹下新建"MyConfig"文件夹,选中Assets点击工程视图中的Create,点击选择“SceneConfiguration”,在MyConfig文件夹中可以看到"SMSceneConfiguration.cs".

选中“SMSceneConfiguration”,在检视面板中可以看到之前我们新建的三个场景,点击Activate按钮



在见识面板中的"AvaliableScenes"中选择场景,点击对应的功能按钮(Level、Screen等)如下图示:



在MyMainMenu场景中新建一个空物体,命名为MyMenuController,新建ShowGame.cs脚本如下:并将脚本挂在MyMenuController物体上。

using UnityEngine;
using System.Collections;

//我自定义啦。。

public class ShowGame : MonoBehaviour {

private SMSceneManager mSMSceneManager;
private SMILevelProgress mLevelProgress;
// Use this for initialization
void Start () {
mSMSceneManager = SMGameEnvironment.Instance.SceneManager;
mLevelProgress = mSMSceneManager.UnmodifiableLevelProgress;
}

// Update is called once per frame
void Update () {

}

void OnGUI(){
//if(!mLevelProgress.HasPlayed){
if(GUI.Button(new Rect(200,200,200,200),"MenuScene")){
mSMSceneManager.LoadFirstLevel();
}
//}
}
}


分别在MyLevel1,MyLevel2场景中新建空物体为MyLevel1Controller,MyLevel2Controller,新建ShowNextLevel.cs脚本一并挂于空物体MyLevel1Controller,MyLevel2Controller上、

using UnityEngine;
using System.Collections;

//我自定义啦。。

public class ShowNextLevel : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}

void OnGUI(){
if(GUI.Button(new Rect(200,200,200,200),this.name)){
SMGameEnvironment.Instance.SceneManager.LoadNextLevel();
}}
}


注意:记得将SMGameEnvironment.cs中的23行中的DemoConfig改为MyConfig

其中SMGameEnvironment.cs脚本如下:

using UnityEngine;
using System.Collections;

public class SMGameEnvironment {
private static SMGameEnvironment instance;
private SMSceneManager sceneManager;
public static SMGameEnvironment Instance {
get {
if (instance == null) {
instance = new SMGameEnvironment();
}
return instance;
}
}

public SMSceneManager SceneManager {
get {
return sceneManager;
}
}

public SMGameEnvironment() {
sceneManager = new SMSceneManager(SMSceneConfigurationLoader.LoadActiveConfiguration("MyConfig"));
sceneManager.LevelProgress = new SMLevelProgress(sceneManager.ConfigurationName);
// Comment this in to enable the blinds transition type
// sceneManager.TransitionPrefab = "Transitions/MyTransition";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: