From 199bb3d2e8acb62ec82076699cd8d98a02d0591d Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Thu, 24 Dec 2020 11:53:10 +0800 Subject: [PATCH] Loading场景只做登录,开始游戏后跳转到LoadingScene场景 LoadingScene场景做战斗场景的加载 --- Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs | 333 +++++++++++++++++++++++++------------------------------ 1 files changed, 153 insertions(+), 180 deletions(-) diff --git a/Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs b/Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs index 539a428..dcb5521 100644 --- a/Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs +++ b/Assets/Scripts/GameAnalytics_SDK/UI/LoginUI.cs @@ -8,54 +8,148 @@ using UnityEngine.Networking; using Protobuf; using Google.Protobuf; +using DG.Tweening; public class LoginUI : MonoBehaviour { - private AsyncOperation async = null; bool isLogining; private JsonData loginData; + + //private Button repairBtn;//修复 + //private Button noticeBtn;//公告 + private Button startBtn;//开始游戏 + private Slider progressSlider;//进度条 + + private Text versionTxt;//版本号 + private Text resVersion;//资源版本号 + float waitTime;//切换场景等待时间 + + [SerializeField] + private Sprite nextSprite; + + [SerializeField] + private Image bg; + + [SerializeField] + private List<GameObject> other; // Start is called before the first frame update void Start() { - TDAA_SDKManager.Ins.SDKInit(ChannelID.Gm.ToString()); - TDAA_SDKManager.Ins.Statistics(1);//成功加载登陆界面的人数 + AudioSourceManager.Ins.Play(AudioEnum.BGM1); + + EventCenter.Ins.RemoveAllListener(); + TDAA_SDKManager.Ins.AddListener(); + isLogining = false; - transform.Find("Panel/Button").GetComponent<Button>().onClick.AddListener(OnClickLoginBtn); - transform.Find("Panel/Button (1)").GetComponent<Button>().onClick.AddListener(OnClickResetBtn); + //repairBtn = transform.Find("Panel/RepairBtn").GetComponent<Button>(); + startBtn = transform.Find("Panel/StartBtn").GetComponent<Button>(); - if (Application.platform == RuntimePlatform.Android) + versionTxt = transform.Find("Panel/Version").GetComponent<Text>(); + + progressSlider = transform.Find("Panel/Progress").GetComponent<Slider>(); + progressSlider.value = 0; + progressSlider.gameObject.SetActive(false); + + startBtn.onClick.AddListener(OnClickLoginBtn); + startBtn.gameObject.SetActive(true); + + // repairBtn.onClick.AddListener(() => + // { + // OnClickResetBtn(); + // }); + + //transform.Find("Panel/Button (1)").GetComponent<Button>().onClick.AddListener(OnClickResetBtn); + + if (!GameConfig.useSDK) { - //GetetDeviceIMEI();//获取安卓手机IMEI - imei0 = TDAA_SDKManager.Ins.GetDeviceId();//使用设备ID - } - else if (Application.platform == RuntimePlatform.WindowsEditor) - { - imei0 = "MyTestGemBattle123"; + if (Application.platform == RuntimePlatform.Android) + { + //GetetDeviceIMEI();//获取安卓手机IMEI + imei0 = TDAA_SDKManager.Ins.GetDeviceId();//使用设备ID + } + else if (Application.platform == RuntimePlatform.WindowsEditor) + { + imei0 = "MyTestGemBattle123"; + } + + GameConfig.Imei = imei0; } + versionTxt.text = "版本号:" + Application.version; + //resVersion.text 暂时没有使用 + transform.Find("Panel/PlayerID").GetComponent<Text>().text = "玩家ID:" + imei0; + if (GameConfig.isFirstStart) + { + waitTime = 0f; + Debug.Log("初始化TDAA_SDKManager"); + TDAA_SDKManager.Ins.SDKInit(ChannelID.Gm.ToString()); + TDAA_SDKManager.Ins.Statistics(1);//成功加载登陆界面的人数 + } + //SetStart(); } - private void OnEnable() + /// <summary> + /// 设置开始状态 + /// </summary> + private void SetStart() { - SocketEvent.Ins.Add<IMessage>((int)Opcode.LoginS2C, LoginS2C); + startBtn.gameObject.SetActive(true); + int resId = Mathf.FloorToInt(Mathf.Clamp01(GameConfig.GameCompletedCount)); + Image img = startBtn.transform.GetChild(0).GetComponent<Image>(); + img.sprite = Resources.Load<Sprite>($"UI/Loading/{resId}"); + img.SetNativeSize(); + if (GameConfig.GameCompletedCount > 0) + { + for (int i = 0; i < other.Count; ++i) + { + other[i].SetActive(false); + } + bg.sprite = nextSprite; + bg.SetNativeSize(); + } } - private void OnDestroy() + /// <summary> + /// 开始游戏 + /// </summary> + void loginNext() { - SocketEvent.Ins.Remove<IMessage>((int)Opcode.LoginS2C, LoginS2C); + progressSlider.gameObject.SetActive(true); + startBtn.gameObject.SetActive(false); + AudioSourceManager.Ins.Play(AudioEnum.UI); + TDAA_SDKManager.Ins.Statistics(2);//埋点 + + //GameConfig.isFirstStart = false; + StartCoroutine(loginMy()); } + + /// <summary> + /// 使用SDK登录 + /// </summary> + void SDKloginNext() + { + GameConfig.Imei = SDKManager.ins.sdk.uid; + Debug.Log("SDK登录,修改Imei:" + GameConfig.Imei); + transform.Find("Panel/PlayerID").GetComponent<Text>().text = "玩家ID:" + GameConfig.Imei; + + loginNext(); + } + #region 获得安卓手机上的IMEI号 public string imei0 = ""; public string imei1 = ""; public string meid = ""; + /// <summary> + /// 已弃用 + /// </summary> void GetetDeviceIMEI() { var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); @@ -72,9 +166,12 @@ private void OnClickResetBtn() { - Debug.LogError("清空了所有数据"); - PlayerPrefs.DeleteAll(); - TDAA_SDKManager.Ins.Reset(); + if (!GameConfig.useSDK) + { + Debug.LogError("清空了所有数据"); + PlayerPrefs.DeleteAll(); + TDAA_SDKManager.Ins.Reset(); + } } @@ -82,184 +179,59 @@ { if (!isLogining) { - AudioSourceManager.Ins.Play(AudioEnum.UI); - TDAA_SDKManager.Ins.Statistics(2);//埋点 - - //StartCoroutine(loginMy()); - StartCoroutine(LoadScene()); - }else{ - - } - - //TDAA_SDKManager.Ins.Statistics(2);//埋点 - //LoginRequest(); - } - - /// <summary> - /// 登录请求处理 - /// </summary> - /// <param name="req"></param> - private void LoginRequest() - { - if (!isLogining) - { - Debug.Log("登录"); - if (Application.platform == RuntimePlatform.WindowsEditor) - { - Debug.Log("编辑器直接登录"); - - //TDAA_SDKManager.Ins.Login(); - //TDAA_SDKManager.Ins.Statistics(3);//埋点 - - //StartCoroutine(loginMy()); - StartCoroutine(LoadScene()); - return; - } - isLogining = true; - string url = GameConfig.IsDebug ? GameConfig.TestLoginUrl : GameConfig.LoginUrl; - JsonData data = new JsonData(); - data["account"] = imei0; - data["password"] = "123456"; - data["channelid"] = (int)ChannelID.Gm; - byte[] postBytes = System.Text.Encoding.Default.GetBytes(data.ToJson()); - StartCoroutine(Post(url, postBytes)); - } - } - - IEnumerator Post(string url, byte[] postBytes) - { - UnityWebRequest request = UnityWebRequest.Post(url, "POST"); - request.uploadHandler = new UploadHandlerRaw(postBytes); - request.downloadHandler = new DownloadHandlerBuffer(); - request.SetRequestHeader("Content-Type", "application/json"); - yield return request.SendWebRequest(); - - if (request.isDone) - { - string text = request.downloadHandler.text; - loginData = JsonMapper.ToObject(text); - if (loginData.Keys.Contains("errorcode")) + if (GameConfig.isFirstStart) { - JsonData errorData = loginData["errorcode"]; - isLogining = false; - CommonDebugHelper.DebugSocket(int.Parse(errorData.ToString())); - - yield break; - } - - if (!string.IsNullOrEmpty(text)) - { - EventCenter.Ins.Add<bool>((int)KTGMGemClient.EventType.MasterSocketConnectResult, MasterSocketConnectSuccess); - MasterSocket.Ins.MasterIp = loginData["masterip"].ToString(); - MasterSocket.Ins.MasterPort = int.Parse(loginData["masterport"].ToString()); - MasterSocket.Ins.StartConnect(); - - // System.DateTime dt = GameUtils.GetTime(loginData["timestamp"].ToString()); - // GameConfig.dateTime = dt; - // GameConfig.timeSpan = dt - System.DateTime.Now; - } - else - { - isLogining = false; - //UIManager.Instance.ShowWarningWind("没有登录数据返回,text:" + text); - //CommonDebugHelper.DebugError("--------------------- 没有登录数据返回 ---------------------text:" + text); - } - } - else - { - isLogining = false; - //UIManager.Instance.ShowWarningWind(request.error); - - //CommonDebugHelper.DebugError("登录失败 request.error" + request.error); - } - } - - private void MasterSocketConnectSuccess(bool res) - { - if (res) - { - Login_C2S login = new Login_C2S(); - login.Username = loginData["username"].ToString(); - login.Channel = (int)ChannelID.Gm; - login.SessionKey = loginData["sessionKey"].ToString(); - MasterSocket.Ins.SendMsg(Opcode.LoginC2S, login); - } - else - { - CommonDebugHelper.DebugError("Socket 链接失败了"); - } - } - - private void LoginS2C(IMessage msg) - { - Login_S2C login = (Login_S2C)msg; - if (login.Errorcode == 0) - { - Debug.Log("--------------------- 登录成功 ---------------------"); - //UserDataMsg userData = login.Userdata; - - //TDAA_SDKManager.Ins.Login(); - //TDAA_SDKManager.Ins.Statistics(3);//埋点 - - //StartCoroutine(loginMy()); - StartCoroutine(LoadScene()); - - } - else - { - CommonDebugHelper.DebugSocket(login.Errorcode); - isLogining = false; - } - } - - - IEnumerator LoadScene() - { - async = SceneManager.LoadSceneAsync(GameConfig.NextSceneName); - async.allowSceneActivation = true; - /*while (!async.isDone) - { - - if (async.progress < 0.9f) - progressValue = async.progress; - else - progressValue = 1.0f; - slider.value = progressValue; - progress.text = (int)(slider.value * 100) + " %"; - - if (async.progress >= 0.89) - { - Debug.Log("进展时间分别是:" + async.progress + "," + totalTime); - if( totalTime >= 3.0f ) - async.allowSceneActivation = true; - - progress.text = "按任意键继续"; - if (Input.anyKeyDown) + // CoderM: 在这里要使用SDK来进行登录了 + if (GameConfig.useSDK) { - async.allowSceneActivation = true; + Debug.Log("使用SDK来进行登录了"); + //设置login的回调 + SDKCallBack.ins.setNextAction("login", SDKloginNext); + SDKManager.ins.sdk.login(); } + else + { + Debug.Log("没有使用SDK"); + //没有使用SDK + loginNext(); + } + } + else + { + Debug.Log("重玩"); + progressSlider.gameObject.SetActive(true); + startBtn.gameObject.SetActive(false); + + AudioSourceManager.Ins.Play(AudioEnum.UI); + TDAA_SDKManager.Ins.OnClickRestartBtn();//重玩 + StartCoroutine(loginMy()); } - //yield return null; - }*/ - yield return null; - } + } + } IEnumerator loginMy() { + progressSlider.value = 0.0f; + System.GC.Collect(); + DOTween.Clear(); + Debug.Log("开始清理GC,清理DOTween"); + yield return new WaitForSeconds(waitTime); int displayProgress = 0; int toProgress = 0; - AsyncOperation op = SceneManager.LoadSceneAsync(GameConfig.NextSceneName); + AsyncOperation op = SceneManager.LoadSceneAsync("LoadingScene"); + // AsyncOperation op = SceneManager.LoadSceneAsync(GameConfig.NextSceneName); op.allowSceneActivation = false; while (op.progress < 0.9f) //此处如果是 <= 0.9f 则会出现死循环所以必须小0.9 { - toProgress = (int)op.progress * 100; + toProgress = (int)(op.progress * 100); while (displayProgress < toProgress) { ++displayProgress; + progressSlider.value = displayProgress * 0.01f; SetLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame();//ui渲染完成之后 } @@ -268,6 +240,8 @@ while (displayProgress < toProgress) { ++displayProgress; + progressSlider.value = displayProgress * 0.01f; + SetLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame(); } @@ -278,8 +252,7 @@ private void SetLoadingPercentage(int displayProgress) { - CommonDebugHelper.Debug($"当前进度{displayProgress}%"); - + //CommonDebugHelper.Debug($"当前进度{displayProgress}%"); } } -- Gitblit v1.9.1