UNITY5.3怎么用脚本切换场景切换

Unity3D 使用 WWW 加载场景并显示进度条
互联网 & 10-20 15:14:38 & 作者:佚名 &
这篇文章主要介绍了Unity3D 使用 WWW 加载场景并显示进度条,并附上相关代码,有需要的朋友参考下
Unity3D 加载场景有很多种方式,做一些小的 DEMO 的时候往往是直接使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函数加载场景,具体可查看(http://www.xuanyusong.com/archives/1427),但是这种办法不适合在真正的 Unity3D 开发中,因为前一种需要把所有的场景都打包,这在某些情况下是不现实的,比如开发页游,我们不可能把所有的场景都打包让用户下载,我们需要一个场景一个场景的加载,这时候我们可以使用 WWW 先通过 HTTP 加载场景到本地缓存,然后再使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函数加载场景,使用这种加载方式,不仅不需要 Build Settings -& Add Current 处理加载场景,进度条的显示也更加容易,但是使用这种方式,需要先把场景打包成 unity3d(查看详情) 或者 assetbundle(查看详情) 文件。
先把测试场景搭建好,如图:
然后添加一个 C# 脚本,取名 UseWww.cs,全部代码如下:代码如下:using UnityEusing System.Cpublic class UseWww : MonoBehaviour { public UISlider progressB public UILabel lblS private WWW private string sceneP void Awake() {
this.scenePath = "file:///" + Application.dataPath + "/Assets/MainScene.unity3d";
// 开始加载场景
this.StartCoroutine (this.BeginLoader ()); } void Update() {
if (this.www != null && this.progressBar != null && !this.www.isDone)
// 更新进度
this.progressBar.value = this.www.
} } private IEnumerator BeginLoader() {
this.lblStatus.text = "场景加载中,请稍候。。。";
// 加载场景使用 WWW.LoadFromCacheOrDownload,函数,这样加载完成才能使用 Application.LoadLevel 或者 Application.LoadLevelAsync
this.www = WWW.LoadFromCacheOrDownload (scenePath, Random.Range(0, 100));
yield return this.
if(!string.IsNullOrEmpty(this.www.error))
this.lblStatus.text = "场景加载出错!";
if (this.www.isDone)
this.lblStatus.text = "场景正在初始化,请等待。。。";
Application.LoadLevelAsync("MainScene");
} }}然后把这个脚本挂载到游戏场景的一个对象中,设置好相关属性,如图:
运行我们的游戏,可以查看进度条的加载情况,当加载完成,自动跳转到下一个场景中,如图:
因为前面我封装了一个 WWW 加载管理器(查看详情),我们可以直接拿来使用,我们建立一个新的 C# 脚本,取名 UseWwwLoaderManager.cs,全部代码如下:代码如下:using UnityEusing System.Cpublic class UseWww : MonoBehaviour { public UISlider progressB public UILabel lblS private WWW private string sceneP void Awake() {
this.scenePath = "file:///" + Application.dataPath + "/Assets/MainScene.unity3d";
// 开始加载场景
this.StartCoroutine (this.BeginLoader ()); } void Update() {
if (this.www != null && this.progressBar != null && !this.www.isDone)
// 更新进度
this.progressBar.value = this.www.
} } private IEnumerator BeginLoader() {
this.lblStatus.text = "场景加载中,请稍候。。。";
// 加载场景使用 WWW.LoadFromCacheOrDownload,函数,这样加载完成才能使用 Application.LoadLevel 或者 Application.LoadLevelAsync
this.www = WWW.LoadFromCacheOrDownload (scenePath, Random.Range(0, 100));
yield return this.
if(!string.IsNullOrEmpty(this.www.error))
this.lblStatus.text = "场景加载出错!";
if (this.www.isDone)
this.lblStatus.text = "场景正在初始化,请等待。。。";
Application.LoadLevelAsync("MainScene");
} }}然后我们把原先的脚本从场景移除,挂载这个新的脚本,如图:
运行游戏,可以看到与上面同样的加载效果。
百度网盘下载地址:http://pan.baidu.com/s/1hq7pgd2 密码: lc4y
大家感兴趣的内容
12345678910
最近更新的内容【求助】Unity脚本换了场景就用不了,要改什么?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:84,037贴子:
【求助】Unity脚本换了场景就用不了,要改什么?收藏
就换了个地形,其他脚本没动过,不知道为什么除了UI之外其他控制器都失效了,也动不了GameController的脚本using System.Cusing System.Collections.Gusing UnityEusing UnityEngine.UI;using UnityEngine.SceneMpublic class GameController : MonoBehaviour {
public CameraController _
public GameObject pauseP
public GameObject gameoverP
public Text scoreT
private bool _isPlaying =
public bool IsPlaying
return _isP
_isPlaying =
private bool _pause =
public bool Pause
_isPlaying =
if (!_pause) Time.timeScale = 1;
else Time.timeScale = 0;
private static GameController _
public static GameController Instance
void Awake()
_instance =
// Use this for initialization
void Start ()
// Update is called once per frame
void Update ()
if (!IsPlaying)
if (Input.GetKeyDown(KeyCode.Escape))
SetPause();
public void LoadGame()
_camera.Active(player.cameraPos.transform);
public void SetPause()
Pause = !P
if (Pause) pausePanel.SetActive(true);
else pausePanel.SetActive(false);
public void GameOver()
IsPlaying =
gameoverPanel.SetActive(true);
gameoverPanel.transform.Find(&Score&).GetComponent&Text&().text = &分数:& +
public void Restart()
SceneManager.LoadScene(0);
public void AddScore(int _score)
if (!IsPlaying)
score += _
scoreText.text = &分数:& +
public void OnStartButtonClick()
LoadGame();
public void OnQuitButton()
Application.Quit();
}镜头控制器脚本using System.Cusing System.Collections.Gusing UnityEpublic class CameraController : MonoBehaviour{
public float followS
private Transform targetT
// Use this for initialization
void Start()
// Update is called once per frame
void FixedUpdate()
if (!GameController.Instance.IsPlaying)
if (targetTank != null)
transform.position = Vector3.Lerp(transform.position, targetTank.position, followSpeed * Time.fixedDeltaTime);
//transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, targetTank.eulerAngles, followSpeed * Time.deltaTime);
transform.eulerAngles = targetTank.eulerA
private void SetTarget(Transform target)
this.targetTank =
public void Active(Transform target)
StartCoroutine(_Active(target));
private IEnumerator _Active(Transform target)
while (Vector3.Distance(transform.position, target.position) &= 0.5f)
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, target.eulerAngles, Time.deltaTime);
transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime);
GameController.Instance.IsPlaying =
SetTarget(target);
登录百度帐号第2课时:检查场景和脚本
当前位置:
单买整套教程¥0元
VIP专享价¥0元
翼狐网,才能观看该教程。
下一节:咨询游戏设计文档来开始我们的脚本
粉丝:&5084人
后可以查看该教程您的学习记录哦~
共30节已完结
微信扫一扫,随时随地学习
声音有问题
看不了-无法播放
英文无中文字幕
200套VIP教程等你免费看
本节评论(1)
全部评论(21)
源自:使用GUI.Box 函数制作第一个积分榜
对于还没过四级的我.....
翼虎助教-小叶
感谢您观看翼虎网的unity视频教程,本教程是外国的教材的,如果造成您在学习上的不便,请您见谅,祝您学习进步!
GaмeОひer
源自:添加一个高度偏移来显示所有的名字
潘达利亚的迷雾
源自:检查最后的游戏代码
源自:检查最后的游戏代码
源自:检查最后的游戏代码
源自:检查最后的游戏代码
源自:检查最后的游戏代码
源自:检查最后的游戏代码
本教程是由Digital-Tutors机构出品的Unity手机游戏开发保存数据与Highscores教程,时长:3小时34分,使用软件:Unity 3.4,作者:Chris Glick。Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品。作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎。在这个Unity的教程中,我们会学习如何使用数组来保存数据的不同部分,还有如何使用for循环来显示列表。接着我们将学习将数据重构入highscore类。我们将学习到一些可以访问玩家参数的命令,还有排列与保存数据的逻辑。我们还会学习如何使用手机键盘,还有如何为手机平台存储数据。从基本的设置,包括了显示设置到更高级的结构,例如high score,更重要的是我们要学会如何在关闭以后后保存数据。
该教程需要购买才能下载
只有VIP才能下载
VIP课程免费下载
精品教程享7折优惠
工程文件免费下载
分享到微信朋友圈
打开微信,点击底部的“发现”,使用“扫一扫“即可将网页分享到我的朋友圈7被浏览727分享邀请回答1添加评论分享收藏感谢收起1添加评论分享收藏感谢收起写回答修改天空盒颜色的例子(C#):
using UnityE
using System.C
public class example : MonoBehaviour {
public Color colorStart = Color.
public Color colorEnd = Color.
public float duration = 1.0F;
void Update() {
float lerp = Mathf.PingPong(Time.time, duration) /
RenderSettings.skybox.SetColor("_Tint", Color.Lerp(colorStart, colorEnd, lerp));
修改天空盒材质的例子(C#):
// 加载所有 skybox 纹理
Texture2D sbFront = Resources.Load("Texture/Skybox/skybox_Front") as Texture2D;
Texture2D sbBack = Resources.Load("Texture/Skybox/skybox_Back") as Texture2D;
// 创建新的 SkyBox 材质
Material mySkyBoxMat = new Material(Resources.Load("Shaders/myOwnSkyboxShader") as Shader);
// 将所有纹理添加到材质中
mySkyBoxMat.SetTexture("_FrontTex", sbFront);
mySkyBoxMat.SetTexture("_BackTex", sbBack);
// 设置RenderSettings skybox 变量
RenderSettings.skybox = mySkyBoxM
稍微完整些的例子(C#):
using UnityE
using System.C
public class SkyboxSetter : MonoBehaviour
// 创建Skybox材质
public static Material CreateSkyboxMaterial(SkyboxManifest manifest)
Material result = new Material(Shader.Find("RenderFX/Skybox"));
result.SetTexture("_FrontTex", manifest.textures[0]);
result.SetTexture("_BackTex", manifest.textures[1]);
result.SetTexture("_LeftTex", manifest.textures[2]);
result.SetTexture("_RightTex", manifest.textures[3]);
result.SetTexture("_UpTex", manifest.textures[4]);
result.SetTexture("_DownTex", manifest.textures[5]);
public Texture2D[]
void OnEnable()
SkyboxManifest manifest = new SkyboxManifest(textures[0], textures[1], textures[2], textures[3], textures[4], textures[5]);
Material material = CreateSkyboxMaterial(manifest);
SetSkybox(material);
// 材质加到天空盒
void SetSkybox(Material material)
GameObject camera = Camera.main.gameO
Skybox skybox = camera.GetComponent&Skybox&();
if (skybox == null)
skybox = camera.AddComponent&Skybox&();
skybox.material =
public struct SkyboxManifest
public Texture2D[]
public SkyboxManifest(Texture2D front, Texture2D back, Texture2D left, Texture2D right, Texture2D up, Texture2D down)
textures = new Texture2D[6]
&代码测试结果:
按照RenderSettings.skybox = mySkyBoxM方式设置并没有成功,用下面例子中的SetSkybox运行成功。
需要注意的是,Texture目录需要放在Resources目录下,最终的目录结构是这样的:
项目主目录/Assets/Resources/Textures/Skybox/skybox_Front.jpg
楼主,该代码要放在哪个对象上
您还没有登录,请或}

我要回帖

更多关于 flash场景切换 的文章

更多推荐

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

点击添加站长微信