1.在scene文件夹中([siːn]),右键->create->scene,名字叫SelectMenu(选择角色场景)。
2.把新建场景拖拽到hierarchy[ˈhaɪərɑːki]中。
3.此时才能在file->build setting中Add open scene,这三步的顺序不能颠倒。右边 0 1的编号是可以相互拖拽交换的。
4.想要完成跳转需要用到一个全新的函数BroadcastMessage。定义写的清楚,可以直接远程调用mono继承类中的函数,后面的1是loading函数的参数。 学到下边AsyncOperation时,就发现加载过程是有必要重新新建一个脚本的。
还可能用到StartCoroutine(协作)函数,也是用来调用其他函数的。一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。StartCoroutine函数是立刻返回的,但是yield可以延迟结果。直到协同程序执行完毕。很好理解的yield执行完以后,程序才继续向下执行。这个我的程序中明显是需要的,作用其实就是把登录代码卡住。执行函数的返回值是IEnumerator类型的。
在MessagerManager中新定义一个变量 async
AsyncOperation 是 Unity 引擎中的一个类,在异步操作过程中使用,例如加载资源和场景等。一个 AsyncOperation 实例代表一个正在进行的异步操作,并且可以查询该异步操作的状态和进度。通过查询该类的属性(如 isDone 和 progress),可以了解异步操作的状态,以及跟踪它的进度。此外,您还可以为异步操作设置回调函数,以便在操作完成时得到通知。
此时把ResceneScript.cs粘到Scripts文件夹中。粘入之后没有警告,此时loginHandler中对应功能的代码如下:
case LoginProtocol.LOGIN_SRES://1
{Debug.Log("成功登录,要进行场景跳转了");//继承一些信息,来自loginhadler里面的,有原代码很省事的--把message对住就没问题了StringDTO dto = Coding<StringDTO>.decode(model.message);//基本就完全等于是我自己写的Debug.Log("dto.value:"+ dto.value);if (dto.value == null || dto.value == string.Empty)//登录如果失败啥都不做就可以了{Debug.Log("登陆失败!");//顺便修改一下对应文字即可TMP_Text c = GameObject.FindWithTag("logText").GetComponent<TMP_Text>(); ;//得到两个Text对象c.text = "登录失败";}else{TMP_Text d = GameObject.FindWithTag("logText").GetComponent<TMP_Text>(); ;//得到两个Text对象d.text = "登录成功";Debug.Log("成功登录,要进行场景跳转了");GameInfo.ACC_ID = dto.value;//静态类起到全局效果GameInfo.GAME_STATE = GameState.LOADING;BroadcastMessage("Loading", 1);//到时候肯定有收的,这个才是游戏真正的消息机制--暂时还用不到//GameInfo.GAME_STATE = GameState.LOADING;//加载状态其实我也用不到//StartCoroutine("load",1);//调用一个写作函数--作用其实就是把登录代码卡住。Debug.Log("等待下一次挑战");} break;
}
BroadcastMessage("Loading", 1);理论上就进入ResceneScript.cs了。