TH1/Unity/Assets/Scripts/TH1_UI/Controller/Base/ViewLoadProperty.cs
2025-08-20 02:24:48 +08:00

120 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using TH1_UI.Core;
using UnityEngine;
//
public enum LoadWindowState
{
NONE,
LOADING,
LOADED,
}
//
public class ViewLoadProperty
{
public string SubFolderPath = string.Empty;
public string ResourceName = string.Empty;
public string ControllerName = string.Empty;
//public string LoadResPath = ResourcePath.UI_PATH;
public LoadWindowState LoadState = LoadWindowState.NONE;
public bool NessaryResource = false;
//
public void Start()
{
if (LoadState != LoadWindowState.NONE)
{
ViDebuger.Warning("ViewLoadProperty LoadPacket is Busy, then don't Start");
return;
}
//抛弃异步资源请求
//_viewResource.Start(LoadResPath + SubFolderPath, ResourceName, !NessaryResource, this._OnResourceLoaded, UnityAssisstant.GROUP_PRO);
LoadState = LoadWindowState.LOADING;
string path = "Prefab/UI/" + (string.IsNullOrEmpty(SubFolderPath) ? "" : SubFolderPath + "/") + ResourceName;
GameObject prefab = Resources.Load<GameObject>(path);
if (prefab == null)
{
Debug.LogError($"[ViewLoadProperty] 加载UI Prefab失败! 请检查路径是否正确: Assets/Resources/{path}");
LoadState = LoadWindowState.NONE; // 加载失败,重置状态
return;
}
// ✅ 3. 我们直接在这里执行原本在回调函数 `_OnResourceLoaded` 中做的事情
// 注意这里需要一个UI的根节点来挂载。我们从 UIResourceController 中获取。
Transform uiRoot = UIResourceController.Instance.GetUIRoot();
if (uiRoot == null)
{
Debug.LogError($"[ViewLoadProperty] UI Root尚未设置! UI无法实例化。请确保在游戏开始时调用了 UIResourceController.Instance.SetUIRoot()");
}
GameObject loadedObj = GameObject.Instantiate(prefab, uiRoot);
loadedObj.transform.localPosition = Vector3.zero;
loadedObj.transform.localScale = Vector3.one;
loadedObj.name = ResourceName;
// 设置CanvasGroup使其初始不可见这和原逻辑保持一致
var canvasGroup = loadedObj.GetComponent<CanvasGroup>();
if (canvasGroup == null) canvasGroup = loadedObj.AddComponent<CanvasGroup>();
canvasGroup.alpha = 0;
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
// ✅ 4. 将加载并实例化的窗口注册到UI资源管理器中
// 这一步至关重要,它让 ViewController 能够找到这个新创建的窗口
UIResourceController.Instance.AddWindow(ResourceName, loadedObj);
// ✅ 5. 标记状态为加载完成
LoadState = LoadWindowState.LOADED;
// ✅ 6. 手动调用完成事件,通知 ViewController "我加载好了!"
Invoke();
}
//异步加载资源用的,现在先用不着
/*
void _OnResourceLoaded(ResourceRequestInterface loader)
{
GameObject loadedObj = UnityAssisstant.InstantiateAsChild(_viewResource.TObject, GlobalGameObject.Instance.UIRoot.transform);
loadedObj.transform.localPosition = Vector3.zero;
loadedObj.transform.localScale = Vector3.one;
loadedObj.name = ResourceName;
var canvasGroup = loadedObj.GetComponent<CanvasGroup>();
canvasGroup.alpha = 0;
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
//loadedObj.SetActive(false);
//
//Canvas canvas = loadedObj.GetComponent<Canvas>();
//canvas.worldCamera = GlobalGameObject.Instance.UICamera;
//
UIResourceController.Instance.AddWindow(ControllerName, loadedObj);
//
LoadState = LoadWindowState.LOADED;
Invoke();
}*/
//
public void End()
{
LoadState = LoadWindowState.NONE;
//_viewResource.End();
}
//
public virtual void Attach(ViAsynCallback cb, ViAsynCallback.Callback func)
{
_eventLoaded.Attach(cb, func);
}
//
public virtual void Attach(ViCallback cb, ViCallback.Callback func)
{
_eventLoaded.Attach(cb, func);
}
//
public void Invoke()
{
_eventLoaded.Invoke(0);
}
//
ViEventList _eventLoaded = new ViEventList();
//先不用这个异步资源请求对象了
//ResourceRequest<GameObject> _viewResource = new ResourceRequest<GameObject>();
}