using System.Threading.Tasks; using UnityEngine; namespace Stary.Evo { public class HybridClREntrance : MonoBehaviour { public static HybridClREntrance Global; public StageType stage; public string domain; private FsmLoadSystem _loadSystem; /// /// 即将加载的domain场景 /// public string loadDomain; private async void Awake() { if (Global == null) { Global = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); return; } _loadSystem = new FsmLoadSystem(); // 初始化日志 _loadSystem.AddState(new HotFixStartState(_loadSystem)); _loadSystem.AddState(new ResEditorSimulateState(_loadSystem)); _loadSystem.AddState(new HotFixDllState(_loadSystem)); _loadSystem.AddState(new ResStartState(_loadSystem)); //初始化读取资源配置表 HotfixMainResDomain hotfixMainResDomain = Resources.Load("HotfixMainResDomain"); if (hotfixMainResDomain != null) { AppConfig.IpConfig = hotfixMainResDomain.hotfixMainResDomainEntity.ipconfig; AppConfig.UserName = hotfixMainResDomain.hotfixMainResDomainEntity.username; AppConfig.PassWord = hotfixMainResDomain.hotfixMainResDomainEntity.password; AppConfig.ProductName = Application.identifier; AppConfig.MainDomainVersion = hotfixMainResDomain.hotfixMainResDomainEntity.mainDomainVersion; } Debug.Log($"UnityEvo:读取资源配置表成功...{AppConfig.IpConfig}{AppConfig.UserName}{AppConfig.PassWord}"); //登录 string url = AppConfig.IpConfig + "/Authentication/login"; _loadSystem.IsLogin = await WebRequestSystem.Login(url, AppConfig.UserName, AppConfig.PassWord); } private void Start() { #if !UNITY_EDITOR if(string.IsNullOrEmpty(domain)) domain = "Main"; #elif UNITY_EDITOR // var immersalSDK = FindObjectOfType(); // immersalSDK.onPoseFound.Invoke(); #endif if (stage == StageType.Developer) { AppConfig.PackageDomainName = domain; } else if (stage == StageType.Originality) { AppConfig.PackageDomainName = "Main"; } _loadSystem.SetCurState(nameof(HotFixStartState)); } private void Update() { if (_loadSystem.CurState != null) _loadSystem.CurState.OnUpdate(); } public async Task OpenDomain() { AppConfig.PackageDomainName = domain; await _loadSystem.SetCurState(nameof(HotFixStartState)); } public async void OpenDomain(string domain, OpenDomainType openDomainType) { this.domain = domain; _loadSystem.SetOpenDomainType(openDomainType); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; await _loadSystem.SetCurState(nameof(HotFixStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void OpenDomain(string domain, TransformCtor transformCtor) { this.domain = domain; _loadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); _loadSystem.SetTransformCtor(transformCtor); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; _loadSystem.SetCurState(nameof(HotFixStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void OpenDomain(string domain, Transform transform) { this.domain = domain; _loadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); _loadSystem.SetTransformCtor(transform); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; _loadSystem.SetCurState(nameof(HotFixStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void CloseDomain() { if (_loadSystem != null) _loadSystem.SetCurState(nameof(DefaultStateAsync)); } } /// /// 打开的项目类型 /// DEFAULT:默认打开方式 /// VIOICE:语音打开方式 /// public enum OpenDomainType { Editor, PointCloud, VIOICE, ImageTracked } public enum StageType { /// /// 创意阶段 /// Originality, /// /// 开发者阶段 /// Developer, } }