做了一个小2.5d游戏场景制作,但要如何制作场景切换呀

Unity切换场景时如何回到原有场景状态?
Unity切换场景时如何回到原有场景状态?
本文选自系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。本文将为读者讲解Unity切换场景时如何回到原有场景状态。
我在用Unity3D做一个回合制的战斗游戏,有两个场景(小镇的场景和战斗的场景),每当角色遇到怪兽,游戏就切换到战斗场景,角色就在这里战斗,直到打败怪兽或者被击败。
问题是怎样才能在回到townScene时保持进入战斗场景时的状态(角色位置、状态等等)
如果我用:
1Application.LoadLevel('battlescene');
1Application.loadLevel('townScene');
然后小镇场景将从第一次启动。怎样才能让townScene继续从角色离开的时候开始呢?
我认为有两种方法。 根据你的目标平台和资源的重要性取舍。
1) 如果资源不是问题
你可以把所有的正常场景和战斗场景放在一个场景里。
创建两个游戏对象(一个给Town Scene对象,另一个给Battle Scene对象)。还可以有两个版本的游戏角色,一个也行。然后写脚本,在战斗开始时把相机从Town Scene转换到battle scene,战斗结束回到Town Scene。
如果每个角色都有一个版本,你可以简单的添加一个脚本,改变游戏角色控制的行为,在战斗模式和正常/小镇模式之间切换。
如果你有两个版本的角色,你就要写个合适的角色控制脚本,根据你的使用情况激活/ 停用游戏角色。游戏角色有两个版本:一个战斗模式的和一个正常模式的。
2)如果资源是一个问题(我认为更有效的方法)
你可以使用
函数。这个函数能让你加载不同的场景,而不是摧毁当前场景的所有东西,所以基本上这样用它:
在场景里创建单独的battlescene,创建空游戏对象,来保存场景中的每一个对象。
在正常的场景中重复这个步骤
当你需要切换到战斗场景时使用
1Application.LoadLevelAdditive ('battlescene');
如果你想卸载battlescene,你只要写代码破坏battlescene游戏对象就可以,因为它包含战斗场景的所有东西。如果你想通过
第一种方法,你可以决定是否想要两种不同的角色版本。两个版本的好处之一是如果你不想细究游戏模式(特别是你的游戏规模很大的时候),可以通过缩小town scene游戏模型和更详细的battle scene细节来提高处理能力。
原文链接:
& &本文选自系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。本文将为读者讲解Unity切换场景时如何回到原有场景状态。
我在用Unity3D做一个回合制的战斗游戏,有两个场景(小镇的场景和战斗的场景),每当角色遇到怪兽,游戏就切换到战斗场景,角色就在这里战斗,直到打败怪兽或者被击败。
问题是怎样才能在回到townScene时保持进入战斗场景时的状态(角色位置、状态等等)
如果我用:
1Application.LoadLevel('battlescene');
1Application.loadLevel('townScene');
然后小镇场景将从第一次启动。怎样才能让townScene继续从角色离开的时候开始呢?
我认为有两种方法。 根据你的目标平台和资源的重要性取舍。
1) 如果资源不是问题
你可以把所有的正常场景和战斗场景放在一个场景里。
创建两个游戏对象(一个给Town Scene对象,另一个给Battle Scene对象)。还可以有两个版本的游戏角色,一个也行。然后写脚本,在战斗开始时把相机从Town Scene转换到battle scene,战斗结束回到Town Scene。
如果每个角色都有一个版本,你可以简单的添加一个脚本,改变游戏角色控制的行为,在战斗模式和正常/小镇模式之间切换。
如果你有两个版本的角色,你就要写个合适的角色控制脚本,根据你的使用情况激活/ 停用游戏角色。游戏角色有两个版本:一个战斗模式的和一个正常模式的。
2)如果资源是一个问题(我认为更有效的方法)
你可以使用
函数。这个函数能让你加载不同的场景,而不是摧毁当前场景的所有东西,所以基本上这样用它:
在场景里创建单独的battlescene,创建空游戏对象,来保存场景中的每一个对象。
在正常的场景中重复这个步骤
当你需要切换到战斗场景时使用
1Application.LoadLevelAdditive ('battlescene');
如果你想卸载battlescene,你只要写代码破坏battlescene游戏对象就可以,因为它包含战斗场景的所有东西。如果你想通过
第一种方法,你可以决定是否想要两种不同的角色版本。两个版本的好处之一是如果你不想细究游戏模式(特别是你的游戏规模很大的时候),可以通过缩小town scene游戏模型和更详细的battle scene细节来提高处理能力。
原文链接:
发表评论:
TA的最新馆藏[转]&Unity 中场景切换 - 推酷
Unity 中场景切换
Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在。如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一些画面、动画表现出一些让玩家期待的东西,大家就要去认真考虑。这篇文章主要介绍两种增加切换中如何播放画面或者动画等等,提高玩家的浸入感,当然你也可以做成
1 操作基础函数
Loads the level by its name or index.
加载场景,加载之前你需要把场景在 Build Settings添加,场景加载后,场景中的激活物体会调用MonoBehavior:OnLevelWasLoaded().使用该方法的时候,之前场景中的物体将会被直接删除。
LoadLevelAdditive
Loads a level additively. 该方法不销毁当前场景中的物体,新场景中的物体将会被添加进来,这个方法在一些连续加载的场景中非常有用哈。
LoadLevelAdditiveAsync
Loads the level additively and asynchronously in the background. 在后台异步记载场景 unity会在后台线程中加载所有的场景资源,这就允许你在加载新场景过程中播放一个进度条或者通过异步加载为玩家创造一个流程的世界 该方法会返回 AsyncOperation结构,结构中 isDone表示是否完成, progress给出当前的播放进度。注意的是在编辑器中后台线程的性能要低于游戏中。
LoadLevelAsync
Loads the level asynchronously in the background. 在后台异步记载场景 unity会在后台线程中加载所有的场景资源,这就允许你在加载新场景过程中播放一个进度条或者通过异步加载为玩家创造一个流程的世界 该方法会返回 AsyncOperation结构,结构中 isDone表示是否完成, progress给出当前的播放进度。注意的是在编辑器中后台线程的性能要低于游戏中。
LoadLevel和LoadLevelAsync,在加载完成后之后将会立刻销毁原先场景中的物体,而 LoadLevelAdditive和 LoadLevelAdditiveAsync 加载后将会保留原先的场景中的物体,这种方式可以实现无缝融合的场景,只需要你在适当的位置加载后面的场景,不过你还是要考虑资源的释放问题。
同步还是异步
&&&& 异步加载能够获得加载过程的进度和是否加载完成,通过这种方式你可以在切换中增减进度条或者其他表现,这种方式一般通过协程完成:
public class ExampleClass : MonoBehaviour
IEnumerator Start()
AsyncOperation async = Application.LoadLevelAsync(&MyBigLevel&);
yield return async;
Debug.Log(&Loading complete&);
需要注意的是:在使用之前需要在
Build Settings
中 添加Scene。
2 切换画面实现方法
场景切换中实现画面或者动画的方式有很多种,我现在看到的主要有两种,这里大致做下两种方式:
第一种方式:
增加新场景的方式可以参考雨松的博客:
,增加新场景的优点是增加了很多的灵活性,你在中间过渡场景中增加视频播放、图片或者是GUI,缺点就是如果你想在实现通用性,就需要顶层做一些数据辅助,比如加载前的场景中设置好切换时播放的图片到顶层数据管理模块中,在浸入切换场景后在获取这些数据,根据这些数据来切换播放的动画等等。
左图为测试工程中三个场景,Pre为当前场景,Middle为切换场景,Next是需要加载的场景。右图为middle场景中的存在的物体,挂有实现脚本。 案例逻辑:Pre场景中直接进入middle场景,在middle场景中预先加载Next场景,确保新场景加载完之后不会立刻显示Next的场景,而是等待用户的触摸或者点击操作
具体的操作过程:
(1)在Pre场景中使用同步加载方法直接进入middle场景,因为Middle场景非常小,所以这个过程会非常快
Application.LoadLevel(&Middle&);
(2)Middle场景的逻辑
public class NewBehaviourScript2 : MonoBehaviour
Texture BackImage = null;
private AsyncOperation async = null;
void Start ()
//此物体在下一个场景中不会被销毁
DontDestroyOnLoad(this);
//开始加载场景
StartCoroutine(&LoadScene&);
//异步加载
IEnumerator LoadScene()
async = Application.LoadLevelAsync(&Next&);
yield return async;
Debug.Log(&Complete!&);
void OnGUI()
//切换场景中的背景,可以是图片或者动画,或者~~
GUI.DrawTexture(new Rect(<span style="color: #, <span style="color: #, Screen.width, Screen.height), BackImage);
//加载过程中显示进度,也可以是进度条
if (async != null && async.isDone == false)
GUIStyle style = new GUIStyle();
style.fontSize = <span style="color: #;
GUI.Label(new Rect(<span style="color: #, <span style="color: #0, Screen.width, <span style="color: #), async.progress.ToString(&F2&), style);
//在加载结束后,弹出是否下个场景,模拟手游中&触摸任意位置进入游戏&
if (async != null && async.isDone == true)
if (GUI.Button(new Rect(<span style="color: #0, <span style="color: #0, <span style="color: #0, <span style="color: #0), new GUIContent(&跳起进入下一个场景&)))
Destroy(this);
A 场景中添加一个占满全屏的背景图,当然也可以使用动画、视频等,场景加载后马上开始加载下一个场景(异步),根据异步加载进度进行进度条、动画等等进度控制
B 注意:MiddleObj物体被设置为
,也就是在新的场景中不销毁,即使在新场景加载后也会占满全屏的背景仍然存在,直到物体被销毁
C MiddleObj物体销毁的方式有两种,一种是手动方式,就像下面代码中使用的,点击Middle场景中的按钮销毁自己 ,另外一种自动方式是在新场景(Next场景)中的
MonoBehavior:OnLevelWasLoaded()函数中销毁该物体。
void OnLevelWasLoaded(int level)
GameObject obj = GameObject.Find(&MiddleObj&);
if (obj != null)
GameObject.Destroy(obj);
雨松在实现新加载场景中先将场景中的所有物体隐藏,场景切换之后再慢慢的显示出来,而不是通过
的方式,也是一种办法哈。如果想要把这种方式设计为通用模式,可以增加一个数据管理器,在加载前提前设置好需要的图片、动画资源等内容,OK ,就可以在多个场合使用啦。
第二种方式使用prefab
这种方式和第一种方式原理上其实类似,只不过不使用新的场景,而是在Pre场景中增加类似于上面Middle场景中的MiddleObj物体中的逻辑,并且设置为
。这种方式中可以参考的就是
场景管理插件,
的使用可以参考:
具体使用我就不多说了哈,咱先看看其实现的关键原理: SceneManger使用异步加载新场景,进入加载之后,就会根据选择使用不同的屏幕效果,并且这个效果是不会在新场景中消失的,直到需要的效果目标达到,就会显出出先场景。 SceneManger 提供了一些列的屏幕效果Prefab以及场景管理方式,很不错的插件哈。&&&&&&
测试代码下载:
l976 ,内带有SceneManager 插件(花15大洋买的)
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致J2ME打造一个RPC小游戏。求最简单的框架,包括场景切换,数据存储等 - J2ME当前位置:& &&&J2ME打造一个RPC小游戏。求最简单的框架,包括场景J2ME打造一个RPC小游戏。求最简单的框架,包括场景切换,数据存储等&&网友分享于:&&浏览:3次J2ME制作一个RPC小游戏。求最简单的框架,包括场景切换,数据存储等。J2ME制作一个RPC小游戏。求最简单的框架,包括场景切换,数据存储等。大致是一个小人物,(办公室内)有几个部门,小人物走到相应部门后弹出相应的场景,并处理数据,最后保存。求一个大致的框架,或者一个相仿的有注释的源码,谢谢大家啦。------解决方案--------------------自己写吧&&应该不是很难好&只要把坐标算好&------解决方案--------------------什么
引用:引用:
自己写吧&&应该不是很难好&只要把坐标算好
我已经写一半了,遇到点问题,想请教一下。------解决方案--------------------引用:怎么切换不同屏幕的场景呢?&
&使用游戏状态转换&诸如开始暂停之类&跳到下一个界面&就再写一个游戏状态------解决方案--------------------引用:引用:
怎么切换不同屏幕的场景呢?&
&使用游戏状态转换&诸如开始暂停之类&跳到下一个界面&就再写一个游戏状态
&或者用我资源里面&有一个j2me坦克游戏&里面相当标准的游戏框架了&800行&midp&1.0&就是了&------解决方案--------------------引用:引用:引用:引用:
怎么切换不同屏幕的场景呢?&
&使用游戏状态转换&诸如开始暂停之类&跳到下一个界面&就再写一个游戏状态
&或者用我资源里面&有一个j2me坦克游戏&里面相当标准的游戏框架了&800行&midp&1.0&就是了
谢谢你,你能发……
进我主页&里面&有下载&我的资源&一个j2me&比较完整的架构&直接写逻辑就是&&可以做rpg------解决方案--------------------&
引用:引用:引用:引用:引用:引用:
怎么切换不同屏幕的场景呢?&
&使用游戏状态转换&诸如开始暂停之类&跳到下一个界面&就再写一个游戏状态
&或者用我资源里面&有一个j2me坦克……
这个是万能j2me框架&基本什么游戏都照着些可以&里面没有坦克大战&只有一个框架&些的比较完整的框架
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 2.5d游戏场景制作教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信