Unity3D-场景切换&场景间信息传递

要解决的问题0:从主场景A转到场景B,再回到主场景A,如何使回到A时的A中的各个实例物体的状态保持为转到B之前的状态?

ResourceFrom:http://unity3d.9tech.cn/news/2013/1231/39452.html

Jason

我在用Unity3D做一个回合制的战斗游戏,有两个场景(小镇的场景和战斗的场景),每当角色遇到怪兽,游戏就切换到战斗场景,角色就在这里战斗,直到打败怪兽或者被击败。

问题是怎样才能在回到townScene时保持进入战斗场景时的状态(角色位置、状态等等)

如果我用:
Application.LoadLevel( 'battlescene' );

然后:

Application.loadLevel( 'townScene' );

然后小镇场景将从第一次启动。怎样才能让townScene继续从角色离开的时候开始呢?

解:

amasiye

我认为有两种方法。 根据你的目标平台和资源的重要性取舍。

1) 如果资源不是问题

你可以把所有的正常场景和战斗场景放在一个场景(Scene)里。

  • 创建两个游戏对象(Empty Game Objects)(一个给Town Scene对象,另一个给Battle Scene对象)。还可以有两个版本的游戏角色,一个也行。然后写脚本,在战斗开始时把相机从Town Scene转换到battle scene,战斗结束回到Town Scene。
  • 如果每个角色都有一个版本,你可以简单的添加一个脚本,改变游戏角色控制的行为,在战斗模式和正常/小镇模式之间切换。
  • 如果你有两个版本的角色,你就要写个合适的角色控制脚本,根据你的使用情况激活/ 停用游戏角色。游戏角色有两个版本:一个战斗模式的和一个正常模式的。

2)如果资源是一个问题(我认为更有效的方法)

你可以使用 Application.LoadLevelAdditive 函数。这个函数能让你加载不同的场景,而不是摧毁当前场景的所有东西,所以基本上这样用它:

  • 在场景里创建单独的battlescene,创建空游戏对象,来保存场景中的全部对象。
  • 当你需要切换到战斗场景时使用(在正常的场景中重复这个步骤)
Application.LoadLevelAdditive ( 'battlescene' );
  • 如果你想卸载battlescene,你只要写代码Destroy battlescene游戏对象就可以,因为它包含战斗场景的所有东西。如果你想通过

第一种方法,你可以决定是否想要两种不同的角色版本。两个版本的好处之一是如果你不想细究游戏模式(特别是你的游戏规模很大的时候),可以通过缩小town scene游戏模型和更详细的battle scene细节来提高处理能力。

原文链接:http://stackoverflow.com/questions/13486840/unity-moving-to-another-scene-with-current-scene-being-paused

要解决的问题1:游戏场景A的转换到另一个场景B时怎样传递信息。

解:

方法1.利用类变量(静态变量)在整个游戏中都不会被重新加载,所以可以当作全局全场景变量使用。Prefab也可以作为静态变量的值;

方法2.单例;

方法3.利用DontDestroyOnLoad方法,使得某个GameObject所有信息保留到B场景。

要解决的问题2:无缝场景切换

参考:http://www.doc88.com/p-5015477192949.html

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值