using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using JC.Unity.UI; public class NewUserGuiderManager : MonoBehaviour { [SerializeField] GameObject prefab_NewUserGuider; public static NewUserGuiderManager ins; void Awake() { if (ins) { Destroy(gameObject); return; } ins = this; DontDestroyOnLoad(gameObject); } void OnDestroy() { if (ins == this) ins = null; if (onSceneLoaded_added) SceneManager.sceneLoaded -= onSceneLoaded; } void Start() { SceneManager.sceneLoaded += onSceneLoaded; onSceneLoaded_added = true; if (!IsUserGuideFinished()) { ExecuteCurConfig(); SaveUserGuideFinished(true); } } bool onSceneLoaded_added = false; void onSceneLoaded(Scene scene, LoadSceneMode loadSceneMode) { //初始话的场景不会触发 if (scene.name == "Game" && GameMgr.gameType == 1) { switch (curConfigKey) { case "开始-限时游戏": OnClickedDestroyed(curConfigKey); break; case "限时游戏-选择距离": ExecuteCurConfig(); break; } } } public void OnSkip() { curConfigKey = null; SaveUserGuideFinished(true); } public void OnEnd() { curConfigKey = null; SaveUserGuideFinished(true); } public void ReviewNewUserGuide() { int viewCount = PersistenHandler.ins.menuBackCtr.views.Count; for (int i = 0; i < viewCount; i++) { PersistenHandler.ins.menuBackCtr.OnOnceBack(); } curConfigKey = "模块开机"; ExecuteCurConfig(); } void SaveUserGuideFinished(bool finished) { PlayerPrefs.SetInt("NewUserGuiderFinished", finished ? 1 : 0); } bool IsUserGuideFinished() { return PlayerPrefs.GetInt("NewUserGuiderFinished", 0) == 1 ? true : false; } void InitConfigs() { if (configsInited) return; configsInited = true; NewUserGuiderConfig config = new NewUserGuiderConfig(); config.key = "模块开机"; config.hitPosType = 1; config.hitPos = new Vector2(-86.4f, -70.3f); config.pointerRotZ = 120; config.pointerPosType = 1; config.pointerPos = new Vector2(-155, -31); config.frameTipPivot = "lb"; config.frameTipPosType = 1; config.frameTipPos = new Vector2(-73.5f, 14); config.onStart = (g) => g.transform.Find("IconModule").gameObject.SetActive(true); configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "连接设备"; config.frameTipPivot = "lb"; config.frameTipText = TextAutoLanguage2.GetTextByKey("new-user-guider_tip_" + config.key); config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/HomeViewRenderBow/Btn").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.5f); g.config.hitPos = btn.position; g.config.pointerPos = btn.position + RectTransformUtils.CanvasV3ToScreenV3(Vector3.up * 80f, btn); g.config.frameTipPos = btn.position + RectTransformUtils.CanvasV3ToScreenV3(Vector3.up * 150f, btn); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "弓箭详情"; config.frameTipPivot = "lt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/HomeViewRenderBow/BtnShowDetail").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.8f, 0.7f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.8f, 0.5f)); HomeViewRenderBow homeViewRenderBow = FindObjectOfType(); if (homeViewRenderBow) { g.clickedWillPlayAudioBtn = false; g.GetMaskClickedEvent().AddListener(homeViewRenderBow.OnClick_ShowDeviceView); } }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "设备-陀螺仪校准"; config.frameTipPivot = "rt"; config.onPrepare = (g) => { if (!DeviceView1.ins) { g.customPreparePass = false; return; } g.customPreparePass = true; RectTransform btn = DeviceView1.ins.transform.Find("ItemInfo/BowOptions/GyrCalibrate") as RectTransform; g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.8f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = 180; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.1f, 0.2f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.3f, 0)) + RectTransformUtils.CanvasV3ToScreenV3(Vector3.down * 80f, g.iconPointer); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "设备-地磁计校准"; config.frameTipPivot = "rt"; config.onPrepare = (g) => { if (!DeviceView1.ins) { g.customPreparePass = false; return; } g.customPreparePass = true; RectTransform btn = DeviceView1.ins.transform.Find("ItemInfo/BowOptions/MagCalibrate") as RectTransform; g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.8f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = 180; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.1f, 0.2f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.3f, 0)) + RectTransformUtils.CanvasV3ToScreenV3(Vector3.down * 60f, g.iconPointer); DeviceView1 deviceView1 = FindObjectOfType(); if (deviceView1) { g.clickedWillPlayAudioBtn = false; g.GetMaskClickedEvent().AddListener(deviceView1.OnClick_Back); } }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "查看设置"; config.frameTipPivot = "rt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("TopBarView/TopBar/IconSetUp").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.6f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = 180; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * -0.1f); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.zero) + RectTransformUtils.CanvasV3ToScreenV3(Vector3.down * 80f, g.iconPointer); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "查看商城"; config.frameTipPivot = "rt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("TopBarView/TopBar/IconShop").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.6f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = 180; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * -0.1f); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.zero) + RectTransformUtils.CanvasV3ToScreenV3(Vector3.down * 80f, g.iconPointer); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "切换好友/排行榜"; config.frameTipPivot = "lt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/FriendBar/FrameBtnTop").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.6f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = -30; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(1.2f, 0.9f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(1.2f, 0)); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "展开好友/排行榜"; config.frameTipPivot = "lc"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/FriendBar/FrameBtnBottom").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.SetIconPointerHitOpacity(0.8f); g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = -30; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(1, 0.9f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(1.5f, 0.5f)); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "联机游戏"; config.frameTipPivot = "lt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/RightPanel/Item (1)").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.5f, 0.6f)); g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.8f, 0.9f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.zero); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "开始游戏"; config.frameTipPivot = "lt"; config.onPrepare = (g) => { RectTransform btn = GameObject.Find("HomeView/RightPanel/Item").GetComponent(); g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.5f, 0.6f)); g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.8f, 0.9f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.zero); g.GetMaskClickedEvent().AddListener(() => { GameObject.Instantiate(SceneResMgr.ins.GetPrefab("GameStartView")); }); }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "开始-限时游戏"; config.frameTipPivot = "lt"; config.onPrepare = (g) => { if (!GameStartView.ins) { g.customPreparePass = false; return; } g.customPreparePass = true; RectTransform btn = GameStartView.ins.transform.Find("EntryList/Item (1)") as RectTransform; g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = 180; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.2f, 0.3f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.4f, 0.15f)); }; config.onStart = (g) => { GameStartView gameStartView = FindObjectOfType(); if (gameStartView) { string ck = g.config.key; g.GetMaskClickedEvent().RemoveAllListeners(); g.GetMaskClickedEvent().AddListener(() => { gameStartView.GoTo("限时"); //后续在NewUserGuiderManager.onSceneLoaded触发 }); } }; configs.Add(config.key, config); config = new NewUserGuiderConfig(); config.key = "限时游戏-选择距离"; config.frameTipPivot = "lc"; config.onPrepare = (g) => { if (g.hollowOutMask.enabled) g.hollowOutMask.enabled = false; if (!TimeLimitGameDistanceSelectView.ins) { g.customPreparePass = false; return; } g.customPreparePass = true; g.hollowOutMask.enabled = true; RectTransform btn = TimeLimitGameDistanceSelectView.ins.transform.Find("Layout/Item") as RectTransform; g.hollowOutMask.SetTarget(btn); g.hollowOutMask.isTargetRectCanThrough = false; g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f); g.config.pointerRotZ = -30; g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(0.85f, 0.5f)); g.config.frameTipPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(1.15f, 0.4f)); g.clickedWillPlayAudioBtn = false; g.GetMaskClickedEvent().AddListener(() => { btn.GetComponent