// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2022-02-23 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using UnityEngine; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; namespace G.UI { /// /// /// public class ChaWidget : KUIWidget { #region Auto Generate #pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null #pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null #endregion #region Field string _lastChaAsset; string _lastWeaponAsset; AsyncOperationHandle _chaHandle; AsyncOperationHandle _weaponHandle; #endregion #region Method /// /// /// /// /// /// public void Show(string chaSkinAsset, string weaponSkinAsset, Callback2 callback) { StartCoroutine(ShowSkinCO(chaSkinAsset, weaponSkinAsset, callback)); } /// /// /// /// /// /// private System.Collections.IEnumerator ShowSkinCO(string chaAsset, string weaponAsset, Callback2 callback) { Sprite mainWeaponSprite = null; Sprite subWeaponSprite = null; AsyncOperationHandle lastWeaponHandle = default; if (!_weaponHandle.IsValid() || _weaponHandle.Result.name != weaponAsset) { //if (_weaponHandle.IsValid()) //{ // AssetProxy.Instance.Release(_weaponHandle); //} lastWeaponHandle = _weaponHandle; if (!string.IsNullOrEmpty(weaponAsset)) { _weaponHandle = AssetProxy.Instance.GetAssetAsync(weaponAsset); yield return _weaponHandle; if (_weaponHandle.Status == AsyncOperationStatus.Succeeded) { mainWeaponSprite = _weaponHandle.Result.mainHand; subWeaponSprite = _weaponHandle.Result.subHand; } } } if (!_chaHandle.IsValid() || _chaHandle.Result.name != chaAsset) { if (_chaHandle.IsValid()) { AssetProxy.Instance.ReleaseInstance(_chaHandle); } _chaHandle = AssetProxy.Instance.InstantiateAsync(chaAsset, this.transform); yield return _chaHandle; _chaHandle.Result.name = chaAsset; if (_weaponHandle.IsValid()) { mainWeaponSprite = _weaponHandle.Result.mainHand; subWeaponSprite = _weaponHandle.Result.subHand; } } if (_chaHandle.IsValid() && mainWeaponSprite != null) { var es = _chaHandle.Result.GetComponent(); es.Equip(mainWeaponSprite, EquipSystem.EquipType.MainWp); if (subWeaponSprite != null) { es.Equip(subWeaponSprite, EquipSystem.EquipType.SubWp); } } if (lastWeaponHandle.IsValid()) { AssetProxy.Instance.Release(lastWeaponHandle); } callback?.Invoke(0, ""); } #endregion #region Unity /// /// /// private void Awake() { SetViewData(); } #endregion } }