using FairyGUI; using System; using UnityEngine; namespace GFGGame { public class DressUpObjUI { public GameObject sceneObject; public GoWrapper wrapper; public DressUpObj dressUpObj; string prefabName; private Action onShowAction; public DressUpObjUI(string prefabName = "SceneDressUp", Action onShowAction = null) { this.prefabName = prefabName; this.onShowAction = onShowAction; dressUpObj = new DressUpObj(); wrapper = new GoWrapper(); } /// /// /// /// /// 如果UI界面的组件有遮罩,那么这里也需要设置为true才能生效 /// 是否显示场景道具类型 /// /// 是否显示背景 public void ResetSceneObj(int scale = 100, bool needSetMask = false, bool showSceneType = true, GameObject roleObj = null, bool showBg = true) { //这里每次都要实例化新的,复用会有bug sceneObject = PrefabManager.Instance.InstantiateSync(ResPathUtil.GetPrefabPath(this.prefabName)); sceneObject.transform.localScale = new Vector3(scale, scale, scale); dressUpObj.setSceneObj(sceneObject, needSetMask, showSceneType, roleObj, showBg, OnShow); } public void UpdateWrapper(GGraph holder) { holder.SetNativeObject(wrapper); wrapper.wrapTarget = sceneObject; } public void Dispose() { onShowAction = null; if (sceneObject != null) { PrefabManager.Instance.Restore(sceneObject); sceneObject = null; } if (dressUpObj != null) { dressUpObj.Dispose(); dressUpObj = null; } if (wrapper != null) { if (wrapper.wrapTarget != null) { wrapper.wrapTarget = null; } wrapper.Dispose(); wrapper = null; } } private void OnShow() { onShowAction?.Invoke(); if (sceneObject == null) { return; } if(wrapper != null) { wrapper.wrapTarget = sceneObject; //wrapper.CacheRenderers(); } } } }