首先,先写一个场景跳转管理器来管理跳转到哪个场景去
public class SceneCtrl : Singleton<SceneCtrl>
{
//记录当前场景
public SceneType sceneType
{
get;
private set;
}
//加载到登录场景
public void LoadToLogScene()
{
Application.LoadLevel("GameLoading");
sceneType = SceneType.ToLogScene;
}
//加载到选择角色场景
public void LoadToSelectScene()
{
Application.LoadLevel("GameLoading");
sceneType = SceneType.ToSelectRole;
}
//加载到主城场景
public void LoadToCityScene()
{
Application.LoadLevel("GameLoading");
sceneType = SceneType.ToCityScene;
}
//加载到游戏场景
public void LoadToGameScene()
{
Application.LoadLevel("GameLoading");
sceneType = SceneType.ToGameScene;
}
}
加载场景控制器通过协程切换场景
public class UILoadOnCtrl : MonoBehaviour
{
//场景控制器
[SerializeField]
private UILoadOnView m_Loading;
private AsyncOperation m_Async;
//当前进度
private float m_CruuentProgess;
private void Start()
{
StartCoroutine(Loading());
if (m_Loading==null)
{
m_Loading = GetComponent<UILoadOnView>();
}
}
IEnumerator Loading()
{
string str = string.Empty;
switch (SceneCtrl.Instance.sceneType)
{
case SceneType.ToLogScene:
str = "GameLog";
break;
case SceneType.ToCityScene:
str = "GameCity";
break;
case SceneType.ToGameScene:
str = "GameScene_ShanGu";
break;
case SceneType.ToSelectRole:
str = "Scene_SelectRole";
break;
default:
break;
}
m_Async = Application.LoadLevelAsync(str);
m_Async.allowSceneActivation = false;
yield return m_Async;
}
private void Update()
{
int CurrentPro = 0;
if (m_Async.progress<0.9f)
{
CurrentPro = Mathf.Clamp((int)m_Async.progress*100,1,100);
}
else
{
CurrentPro = 100;
}
if (m_CruuentProgess<CurrentPro)
{
m_CruuentProgess++;
}
else
{
m_Async.allowSceneActivation = true;
}
m_Loading.SetPregess(m_CruuentProgess*0.01f);
}
}
加载场景进度条设置
public class UILoadOnView : UISceneBaseView
{
//进度条
[SerializeField]
private Slider m_Slider;
//进度数字
[SerializeField]
private Text m_Text;
//设置进度条的值
public void SetPregess(float value)
{
m_Slider.value = value;
m_Text.text = string.Format("{0}%",(int)(value*100));
}
}