mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
Compare commits
10 Commits
TEngine4.0
...
TEngine4.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6cfd352482 | ||
![]() |
40373c473d | ||
![]() |
d799f9fdf0 | ||
![]() |
15735c3d2d | ||
![]() |
818a74f437 | ||
![]() |
f248757401 | ||
![]() |
6ada0e7de7 | ||
![]() |
7ea472f97e | ||
![]() |
fb8528ff52 | ||
![]() |
e3ac92ef46 |
@@ -9,10 +9,10 @@ namespace GameLogic
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// UI列表Item
|
/// UI列表Item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="DataT"></typeparam>
|
/// <typeparam name="TData"></typeparam>
|
||||||
public interface IListDataItem<in DataT>
|
public interface IListDataItem<in TData>
|
||||||
{
|
{
|
||||||
void SetItemData(DataT d);
|
void SetItemData(TData d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -180,8 +180,7 @@ namespace GameLogic
|
|||||||
/// <param name="n"></param>
|
/// <param name="n"></param>
|
||||||
public void SetDatas(List<DataT> dataList, int n = -1)
|
public void SetDatas(List<DataT> dataList, int n = -1)
|
||||||
{
|
{
|
||||||
AdjustItemNum(Mathf.Max(0, n >= 0 ? n : (dataList == null ? 0 : (dataList.Count - dataStartOffset))),
|
AdjustItemNum(Mathf.Max(0, n >= 0 ? n : (dataList == null ? 0 : (dataList.Count - dataStartOffset))), dataList);
|
||||||
dataList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -215,8 +214,7 @@ namespace GameLogic
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var listDataItem = item as IListDataItem<DataT>;
|
if (item is IListDataItem<DataT> listDataItem)
|
||||||
if (listDataItem != null)
|
|
||||||
{
|
{
|
||||||
listDataItem.SetItemData(GetData(i));
|
listDataItem.SetItemData(GetData(i));
|
||||||
}
|
}
|
||||||
@@ -271,8 +269,7 @@ namespace GameLogic
|
|||||||
|
|
||||||
var preIndex = selectIndex;
|
var preIndex = selectIndex;
|
||||||
m_selectIndex = i;
|
m_selectIndex = i;
|
||||||
var item = GetItem(preIndex) as IListSelectItem;
|
if (GetItem(preIndex) is IListSelectItem item)
|
||||||
if (item != null)
|
|
||||||
{
|
{
|
||||||
item.SetSelected(false);
|
item.SetSelected(false);
|
||||||
}
|
}
|
||||||
@@ -282,13 +279,20 @@ namespace GameLogic
|
|||||||
{
|
{
|
||||||
item.SetSelected(true);
|
item.SetSelected(true);
|
||||||
}
|
}
|
||||||
|
UpdateSnapTargetItem();
|
||||||
if (triggerEvt && funcOnSelectChange != null)
|
if (triggerEvt && funcOnSelectChange != null)
|
||||||
{
|
{
|
||||||
funcOnSelectChange.Invoke();
|
funcOnSelectChange.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新Snap
|
||||||
|
/// </summary>
|
||||||
|
protected virtual void UpdateSnapTargetItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取当前选中的数据
|
/// 获取当前选中的数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -312,13 +316,18 @@ namespace GameLogic
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取item
|
/// 获取item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="index"></param>
|
/// <param name="i"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual ItemT GetItem(int index)
|
public virtual ItemT GetItem(int i)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 点击选择
|
||||||
|
/// </summary>
|
||||||
|
public bool SelectByClick = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// item被点击
|
/// item被点击
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -331,7 +340,10 @@ namespace GameLogic
|
|||||||
funcOnItemClick.Invoke(i);
|
funcOnItemClick.Invoke(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SelectByClick)
|
||||||
|
{
|
||||||
selectIndex = i;
|
selectIndex = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
@@ -0,0 +1,57 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TEngine;
|
||||||
|
|
||||||
|
namespace GameLogic
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 普通UI列表。
|
||||||
|
/// </summary>
|
||||||
|
public class UIListWidget<TItem, TData> : UIListBase<TItem, TData> where TItem : UIWidget, new()
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// item列表。
|
||||||
|
/// </summary>
|
||||||
|
protected List<TItem> m_items = new List<TItem>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// item列表。
|
||||||
|
/// </summary>
|
||||||
|
public List<TItem> items => m_items;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置显示数据。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="n"></param>
|
||||||
|
/// <param name="datas"></param>
|
||||||
|
/// <param name="funcItem"></param>
|
||||||
|
protected override void AdjustItemNum(int n, List<TData> datas = null, Action<TItem, int> funcItem = null)
|
||||||
|
{
|
||||||
|
base.AdjustItemNum(n, datas, funcItem);
|
||||||
|
AdjustIconNum(m_items, n, gameObject.transform, itemBase);
|
||||||
|
UpdateList(funcItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新列表。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="funcItem"></param>
|
||||||
|
protected void UpdateList(Action<TItem, int> funcItem = null)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < m_items.Count; i++)
|
||||||
|
{
|
||||||
|
UpdateListItem(m_items[i], i, funcItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="i"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override TItem GetItem(int i)
|
||||||
|
{
|
||||||
|
return i >= 0 && i < m_items.Count ? m_items[i] : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 96f732d895e94fbc99c904d66ca844ca
|
||||||
|
timeCreated: 1701844130
|
@@ -66,6 +66,7 @@ namespace GameLogic
|
|||||||
LoopRectView.SetListItemCount(n);
|
LoopRectView.SetListItemCount(n);
|
||||||
LoopRectView.RefreshAllShownItem();
|
LoopRectView.RefreshAllShownItem();
|
||||||
m_tpFuncItem = null;
|
m_tpFuncItem = null;
|
||||||
|
UpdateAllItemSelect();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -152,7 +153,16 @@ namespace GameLogic
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public override TItem GetItem(int index)
|
public override TItem GetItem(int index)
|
||||||
{
|
{
|
||||||
return index >= 0 && index < m_itemCache.Count ? m_itemCache.GetValueByIndex(index) : null;
|
for (var i = 0; i < m_itemCache.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
var item = m_itemCache.GetValueByIndex(i);
|
||||||
|
if (item.GetItemIndex() == index)
|
||||||
|
{
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -178,5 +188,21 @@ namespace GameLogic
|
|||||||
{
|
{
|
||||||
return m_itemCache.GetValueByIndex(index);
|
return m_itemCache.GetValueByIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新所有item选中状态
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public void UpdateAllItemSelect()
|
||||||
|
{
|
||||||
|
var index = selectIndex;
|
||||||
|
for (var i = 0; i < m_itemCache.Count; i++)
|
||||||
|
{
|
||||||
|
if (m_itemCache.GetValueByIndex(i) is IListSelectItem item)
|
||||||
|
{
|
||||||
|
item.SetSelected(item.GetItemIndex() == index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,8 +65,9 @@ namespace GameLogic
|
|||||||
base.AdjustItemNum(n, datas, funcItem);
|
base.AdjustItemNum(n, datas, funcItem);
|
||||||
m_tpFuncItem = funcItem;
|
m_tpFuncItem = funcItem;
|
||||||
LoopRectView.SetListItemCount(n);
|
LoopRectView.SetListItemCount(n);
|
||||||
// LoopRectView.RefreshAllShownItem();
|
LoopRectView.RefreshAllShownItem();
|
||||||
m_tpFuncItem = null;
|
m_tpFuncItem = null;
|
||||||
|
UpdateAllItemSelect();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -151,7 +152,16 @@ namespace GameLogic
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public override TItem GetItem(int index)
|
public override TItem GetItem(int index)
|
||||||
{
|
{
|
||||||
return index >= 0 && index < m_itemCache.Count ? m_itemCache.GetValueByIndex(index) : null;
|
for (var i = 0; i < m_itemCache.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
var item = m_itemCache.GetValueByIndex(i);
|
||||||
|
if (item.GetItemIndex() == index)
|
||||||
|
{
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -186,5 +196,30 @@ namespace GameLogic
|
|||||||
{
|
{
|
||||||
return m_itemCache.GetValueByIndex(index);
|
return m_itemCache.GetValueByIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新所有item选中状态
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public void UpdateAllItemSelect()
|
||||||
|
{
|
||||||
|
var index = selectIndex;
|
||||||
|
for (var i = 0; i < m_itemCache.Count; i++)
|
||||||
|
{
|
||||||
|
if (m_itemCache.GetValueByIndex(i) is IListSelectItem item)
|
||||||
|
{
|
||||||
|
item.SetSelected(item.GetItemIndex() == index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateSnapTargetItem()
|
||||||
|
{
|
||||||
|
base.UpdateSnapTargetItem();
|
||||||
|
if (LoopRectView != null && LoopRectView.ItemSnapEnable)
|
||||||
|
{
|
||||||
|
LoopRectView.SetSnapTargetItemIndex(selectIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,6 +19,21 @@ namespace TEngine.Editor
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// 获取资源路径
|
||||||
|
string assetPath = AssetDatabase.GetAssetPath(instanceID);
|
||||||
|
|
||||||
|
// 判断资源类型
|
||||||
|
if (!assetPath.EndsWith(".cs"))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool autoFirstMatch = assetPath.Contains("Logger.cs") ||
|
||||||
|
assetPath.Contains("DefaultLogHelper.cs") ||
|
||||||
|
assetPath.Contains("GameFrameworkLog.cs") ||
|
||||||
|
assetPath.Contains("AssetsLogger.cs") ||
|
||||||
|
assetPath.Contains("Log.cs");
|
||||||
|
|
||||||
var stackTrace = GetStackTrace();
|
var stackTrace = GetStackTrace();
|
||||||
if (!string.IsNullOrEmpty(stackTrace) && (stackTrace.Contains("[Debug]") ||
|
if (!string.IsNullOrEmpty(stackTrace) && (stackTrace.Contains("[Debug]") ||
|
||||||
stackTrace.Contains("[INFO]") ||
|
stackTrace.Contains("[INFO]") ||
|
||||||
@@ -28,6 +43,15 @@ namespace TEngine.Editor
|
|||||||
stackTrace.Contains("[EXCEPTION]")))
|
stackTrace.Contains("[EXCEPTION]")))
|
||||||
|
|
||||||
{
|
{
|
||||||
|
if (!autoFirstMatch)
|
||||||
|
{
|
||||||
|
var fullPath = UnityEngine.Application.dataPath.Substring(0, UnityEngine.Application.dataPath.LastIndexOf("Assets", StringComparison.Ordinal));
|
||||||
|
fullPath = $"{fullPath}{assetPath}";
|
||||||
|
// 跳转到目标代码的特定行
|
||||||
|
InternalEditorUtility.OpenFileAtLineExternal(fullPath.Replace('/', '\\'), line);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// 使用正则表达式匹配at的哪个脚本的哪一行
|
// 使用正则表达式匹配at的哪个脚本的哪一行
|
||||||
var matches = Regex.Match(stackTrace, @"\(at (.+)\)",
|
var matches = Regex.Match(stackTrace, @"\(at (.+)\)",
|
||||||
RegexOptions.IgnoreCase);
|
RegexOptions.IgnoreCase);
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
#if UNITY_EDITOR
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
|
#endif
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace TEngine
|
namespace TEngine
|
||||||
|
@@ -4,6 +4,46 @@ using YooAsset;
|
|||||||
|
|
||||||
namespace TEngine
|
namespace TEngine
|
||||||
{
|
{
|
||||||
|
public class AudioData : MemoryObject
|
||||||
|
{
|
||||||
|
public AssetOperationHandle AssetOperationHandle { private set; get; }
|
||||||
|
|
||||||
|
public bool InPool { private set; get; } = false;
|
||||||
|
|
||||||
|
public override void InitFromPool()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RecycleToPool()
|
||||||
|
{
|
||||||
|
if (!InPool)
|
||||||
|
{
|
||||||
|
AssetOperationHandle.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
InPool = false;
|
||||||
|
AssetOperationHandle = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static AudioData Alloc(AssetOperationHandle assetOperationHandle, bool inPool)
|
||||||
|
{
|
||||||
|
AudioData ret = MemoryPool.Acquire<AudioData>();
|
||||||
|
ret.AssetOperationHandle = assetOperationHandle;
|
||||||
|
ret.InPool = inPool;
|
||||||
|
ret.InitFromPool();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void DeAlloc(AudioData audioData)
|
||||||
|
{
|
||||||
|
if (audioData != null)
|
||||||
|
{
|
||||||
|
MemoryPool.Release(audioData);
|
||||||
|
audioData.RecycleToPool();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 音频代理辅助器。
|
/// 音频代理辅助器。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -11,7 +51,7 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
private int _instanceId;
|
private int _instanceId;
|
||||||
private AudioSource _source;
|
private AudioSource _source;
|
||||||
private AssetOperationHandle _assetOperationHandle;
|
private AudioData _audioData;
|
||||||
private AudioModuleImp _audioModuleImp;
|
private AudioModuleImp _audioModuleImp;
|
||||||
private Transform _transform;
|
private Transform _transform;
|
||||||
float _volume = 1.0f;
|
float _volume = 1.0f;
|
||||||
@@ -32,6 +72,7 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
public string Path;
|
public string Path;
|
||||||
public bool BAsync;
|
public bool BAsync;
|
||||||
|
public bool BInPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -47,7 +88,7 @@ namespace TEngine
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源操作句柄。
|
/// 资源操作句柄。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AssetOperationHandle AssetOperationHandle => _assetOperationHandle;
|
public AudioData AudioData => _audioData;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 音频代理辅助器音频大小。
|
/// 音频代理辅助器音频大小。
|
||||||
@@ -196,7 +237,8 @@ namespace TEngine
|
|||||||
_source = host.AddComponent<AudioSource>();
|
_source = host.AddComponent<AudioSource>();
|
||||||
_source.playOnAwake = false;
|
_source.playOnAwake = false;
|
||||||
AudioMixerGroup[] audioMixerGroups =
|
AudioMixerGroup[] audioMixerGroups =
|
||||||
audioCategory.AudioMixer.FindMatchingGroups(Utility.Text.Format("Master/{0}/{1}", audioCategory.AudioMixerGroup.name, $"{audioCategory.AudioMixerGroup.name} - {index}"));
|
audioCategory.AudioMixer.FindMatchingGroups(Utility.Text.Format("Master/{0}/{1}", audioCategory.AudioMixerGroup.name,
|
||||||
|
$"{audioCategory.AudioMixerGroup.name} - {index}"));
|
||||||
_source.outputAudioMixerGroup = audioMixerGroups.Length > 0 ? audioMixerGroups[0] : audioCategory.AudioMixerGroup;
|
_source.outputAudioMixerGroup = audioMixerGroups.Length > 0 ? audioMixerGroups[0] : audioCategory.AudioMixerGroup;
|
||||||
_source.rolloffMode = audioCategory.AudioGroupConfig.audioRolloffMode;
|
_source.rolloffMode = audioCategory.AudioGroupConfig.audioRolloffMode;
|
||||||
_source.minDistance = audioCategory.AudioGroupConfig.minDistance;
|
_source.minDistance = audioCategory.AudioGroupConfig.minDistance;
|
||||||
@@ -218,7 +260,7 @@ namespace TEngine
|
|||||||
_duration = 0;
|
_duration = 0;
|
||||||
if (!string.IsNullOrEmpty(path))
|
if (!string.IsNullOrEmpty(path))
|
||||||
{
|
{
|
||||||
if (_audioModuleImp.AudioClipPool.TryGetValue(path, out var operationHandle))
|
if (bInPool && _audioModuleImp.AudioClipPool.TryGetValue(path, out var operationHandle))
|
||||||
{
|
{
|
||||||
OnAssetLoadComplete(operationHandle);
|
OnAssetLoadComplete(operationHandle);
|
||||||
return;
|
return;
|
||||||
@@ -239,7 +281,7 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_pendingLoad = new LoadRequest { Path = path, BAsync = bAsync };
|
_pendingLoad = new LoadRequest { Path = path, BAsync = bAsync, BInPool = bInPool };
|
||||||
|
|
||||||
if (_audioAgentRuntimeState == AudioAgentRuntimeState.Playing)
|
if (_audioAgentRuntimeState == AudioAgentRuntimeState.Playing)
|
||||||
{
|
{
|
||||||
@@ -249,7 +291,7 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 暂停音频代理辅助器。
|
/// 停止播放音频代理辅助器。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fadeout">是否渐出。</param>
|
/// <param name="fadeout">是否渐出。</param>
|
||||||
public void Stop(bool fadeout = false)
|
public void Stop(bool fadeout = false)
|
||||||
@@ -269,6 +311,28 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 暂停音频代理辅助器。
|
||||||
|
/// </summary>
|
||||||
|
public void Pause()
|
||||||
|
{
|
||||||
|
if (_source != null)
|
||||||
|
{
|
||||||
|
_source.Pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取消暂停音频代理辅助器。
|
||||||
|
/// </summary>
|
||||||
|
public void UnPause()
|
||||||
|
{
|
||||||
|
if (_source != null)
|
||||||
|
{
|
||||||
|
_source.UnPause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源加载完成。
|
/// 资源加载完成。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -277,16 +341,15 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
if (handle != null)
|
if (handle != null)
|
||||||
{
|
{
|
||||||
handle.Completed -= OnAssetLoadComplete;
|
|
||||||
if (_inPool)
|
if (_inPool)
|
||||||
{
|
{
|
||||||
_audioModuleImp.AudioClipPool.TryAdd(handle.GetAssetInfo().AssetPath, handle);
|
_audioModuleImp.AudioClipPool.TryAdd(handle.GetAssetInfo().Address, handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_pendingLoad != null)
|
if (_pendingLoad != null)
|
||||||
{
|
{
|
||||||
if (handle != null)
|
if (!_inPool && handle != null)
|
||||||
{
|
{
|
||||||
handle.Dispose();
|
handle.Dispose();
|
||||||
}
|
}
|
||||||
@@ -294,19 +357,21 @@ namespace TEngine
|
|||||||
_audioAgentRuntimeState = AudioAgentRuntimeState.End;
|
_audioAgentRuntimeState = AudioAgentRuntimeState.End;
|
||||||
string path = _pendingLoad.Path;
|
string path = _pendingLoad.Path;
|
||||||
bool bAsync = _pendingLoad.BAsync;
|
bool bAsync = _pendingLoad.BAsync;
|
||||||
|
bool bInPool = _pendingLoad.BInPool;
|
||||||
_pendingLoad = null;
|
_pendingLoad = null;
|
||||||
Load(path, bAsync);
|
Load(path, bAsync, bInPool);
|
||||||
}
|
}
|
||||||
else if (handle != null)
|
else if (handle != null)
|
||||||
{
|
{
|
||||||
if (_assetOperationHandle != null)
|
if (_audioData != null)
|
||||||
{
|
{
|
||||||
_assetOperationHandle.Dispose();
|
AudioData.DeAlloc(_audioData);
|
||||||
|
_audioData = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_assetOperationHandle = handle;
|
_audioData = AudioData.Alloc(handle, _inPool);
|
||||||
|
|
||||||
_source.clip = _assetOperationHandle.AssetObject as AudioClip;
|
_source.clip = handle.AssetObject as AudioClip;
|
||||||
if (_source.clip != null)
|
if (_source.clip != null)
|
||||||
{
|
{
|
||||||
_source.Play();
|
_source.Play();
|
||||||
@@ -350,8 +415,9 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
string path = _pendingLoad.Path;
|
string path = _pendingLoad.Path;
|
||||||
bool bAsync = _pendingLoad.BAsync;
|
bool bAsync = _pendingLoad.BAsync;
|
||||||
|
bool bInPool = _pendingLoad.BInPool;
|
||||||
_pendingLoad = null;
|
_pendingLoad = null;
|
||||||
Load(path, bAsync);
|
Load(path, bAsync, bInPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
_source.volume = _volume;
|
_source.volume = _volume;
|
||||||
@@ -371,9 +437,9 @@ namespace TEngine
|
|||||||
Object.Destroy(_transform.gameObject);
|
Object.Destroy(_transform.gameObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_assetOperationHandle != null)
|
if (_audioData != null)
|
||||||
{
|
{
|
||||||
_assetOperationHandle.Dispose();
|
AudioData.DeAlloc(_audioData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -127,7 +127,7 @@ namespace TEngine
|
|||||||
|
|
||||||
for (int i = 0; i < AudioAgents.Count; i++)
|
for (int i = 0; i < AudioAgents.Count; i++)
|
||||||
{
|
{
|
||||||
if (AudioAgents[i].AssetOperationHandle == null || AudioAgents[i].IsFree)
|
if (AudioAgents[i].AudioData?.AssetOperationHandle == null || AudioAgents[i].IsFree)
|
||||||
{
|
{
|
||||||
freeChannel = i;
|
freeChannel = i;
|
||||||
break;
|
break;
|
||||||
|
@@ -22,7 +22,8 @@ namespace TEngine
|
|||||||
public AssetOperationHandle Handle => _handle;
|
public AssetOperationHandle Handle => _handle;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 标签。
|
/// 自定义资源标签。
|
||||||
|
/// <remarks>不同于AssetTag。</remarks>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Tag { private set; get; }
|
public string Tag { private set; get; }
|
||||||
|
|
||||||
@@ -31,7 +32,7 @@ namespace TEngine
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
if (_handle != null)
|
if (_handle is { IsValid: true })
|
||||||
{
|
{
|
||||||
_handle.Dispose();
|
_handle.Dispose();
|
||||||
}
|
}
|
||||||
@@ -79,6 +80,7 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
private readonly Dictionary<string,AssetHandleData> _assetHandleDataMap = new Dictionary<string,AssetHandleData>();
|
private readonly Dictionary<string,AssetHandleData> _assetHandleDataMap = new Dictionary<string,AssetHandleData>();
|
||||||
|
|
||||||
|
#region 引用资源数据
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 引用资源数据到资源组内。
|
/// 引用资源数据到资源组内。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -105,32 +107,38 @@ namespace TEngine
|
|||||||
_assetHandleDataMap[address] = handleData;
|
_assetHandleDataMap[address] = handleData;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 释放资源数据
|
||||||
|
private readonly List<AssetHandleData> _tempResult = new List<AssetHandleData>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从资源组内释放资源数据。
|
/// 从资源组内释放资源数据。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetTag">资源标签。</param>
|
/// <param name="tag">自定义资源标签。</param>
|
||||||
/// <returns>是否释放成功。</returns>
|
/// <returns>是否释放成功。</returns>
|
||||||
public bool ReleaseByTag(string assetTag)
|
public bool ReleaseByTag(string tag)
|
||||||
{
|
{
|
||||||
AssetHandleData founded = null;
|
_tempResult.Clear();
|
||||||
foreach (var assetHandleData in _assetHandleDataMap.Values)
|
foreach (var assetHandleData in _assetHandleDataMap.Values)
|
||||||
{
|
{
|
||||||
if (assetHandleData.Tag == assetTag)
|
if (assetHandleData.Tag == tag)
|
||||||
{
|
{
|
||||||
founded = assetHandleData;
|
_tempResult.Add(assetHandleData);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (founded != null)
|
if (_tempResult.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var founded in _tempResult)
|
||||||
{
|
{
|
||||||
_assetHandleDataMap.Remove(founded.Handle.GetAssetInfo().Address);
|
_assetHandleDataMap.Remove(founded.Handle.GetAssetInfo().Address);
|
||||||
AssetHandleData.Release(founded);
|
AssetHandleData.Release(founded);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.Warning($"Release AssetHandleData Tag:{assetTag} Failed");
|
Log.Warning($"Release AssetHandleData Tag:{tag} Failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,20 +186,9 @@ namespace TEngine
|
|||||||
Log.Warning($"Release AssetHandleData Handle:{handle} Failed");
|
Log.Warning($"Release AssetHandleData Handle:{handle} Failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Clear()
|
#region 内存池接口
|
||||||
{
|
|
||||||
var etr = _assetHandleDataMap.GetEnumerator();
|
|
||||||
while (etr.MoveNext())
|
|
||||||
{
|
|
||||||
AssetHandleData assetHandleData = etr.Current.Value;
|
|
||||||
AssetHandleData.Release(assetHandleData);
|
|
||||||
}
|
|
||||||
|
|
||||||
etr.Dispose();
|
|
||||||
_assetHandleDataMap.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从内存池中获取资源分组数据。
|
/// 从内存池中获取资源分组数据。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -217,24 +214,40 @@ namespace TEngine
|
|||||||
MemoryPool.Release(assetGroup);
|
MemoryPool.Release(assetGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
var etr = _assetHandleDataMap.GetEnumerator();
|
||||||
|
while (etr.MoveNext())
|
||||||
|
{
|
||||||
|
AssetHandleData assetHandleData = etr.Current.Value;
|
||||||
|
AssetHandleData.Release(assetHandleData);
|
||||||
|
}
|
||||||
|
|
||||||
|
etr.Dispose();
|
||||||
|
_assetHandleDataMap.Clear();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源。
|
/// 同步加载资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
/// <param name="location">资源的定位地址。</param>
|
||||||
/// <param name="parent">父节点位置。</param>
|
/// <param name="parent">父节点位置。</param>
|
||||||
|
/// <param name="needInstance">是否需要实例化。</param>
|
||||||
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||||
/// <returns>资源实例。</returns>
|
/// <returns>资源实例。</returns>
|
||||||
public T LoadAsset<T>(string assetName, Transform parent = null) where T : Object
|
public T LoadAsset<T>(string location, bool needInstance = true,string packageName = "",Transform parent = null) where T : Object
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(assetName))
|
if (string.IsNullOrEmpty(location))
|
||||||
{
|
{
|
||||||
Log.Error("Asset name is invalid.");
|
Log.Error("Asset name is invalid.");
|
||||||
return default;
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
|
if (_assetHandleDataMap.TryGetValue(location,out var assetHandleData))
|
||||||
{
|
{
|
||||||
if (typeof(T) == typeof(GameObject))
|
if (typeof(T) == typeof(GameObject) && needInstance)
|
||||||
{
|
{
|
||||||
GameObject ret = assetHandleData.Handle.InstantiateSync(parent);
|
GameObject ret = assetHandleData.Handle.InstantiateSync(parent);
|
||||||
return ret as T;
|
return ret as T;
|
||||||
@@ -245,11 +258,20 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetOperationHandle handle = YooAssets.LoadAssetSync<T>(assetName);
|
AssetOperationHandle handle;
|
||||||
|
if (string.IsNullOrEmpty(packageName))
|
||||||
|
{
|
||||||
|
handle = YooAssets.LoadAssetSync<T>(location);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var package = YooAssets.GetPackage(packageName);
|
||||||
|
handle = package.LoadAssetSync<T>(location);
|
||||||
|
}
|
||||||
|
|
||||||
Reference(handle);
|
Reference(handle);
|
||||||
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
if (typeof(T) == typeof(GameObject) && needInstance)
|
||||||
{
|
{
|
||||||
GameObject ret = handle.InstantiateSync(parent);
|
GameObject ret = handle.InstantiateSync(parent);
|
||||||
return ret as T;
|
return ret as T;
|
||||||
@@ -261,113 +283,27 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源。
|
/// 异步加载资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
/// <param name="location">资源的定位地址。</param>
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
||||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
|
||||||
/// <returns>资源实例。</returns>
|
|
||||||
public T LoadAsset<T>(string assetName,out AssetOperationHandle assetOperationHandle) where T : Object
|
|
||||||
{
|
|
||||||
assetOperationHandle = null;
|
|
||||||
if (string.IsNullOrEmpty(assetName))
|
|
||||||
{
|
|
||||||
Log.Error("Asset name is invalid.");
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
|
|
||||||
{
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
|
||||||
{
|
|
||||||
GameObject ret = assetHandleData.Handle.InstantiateSync();
|
|
||||||
return ret as T;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return assetHandleData.Handle.AssetObject as T;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assetOperationHandle = YooAssets.LoadAssetSync<T>(assetName);
|
|
||||||
|
|
||||||
Reference(assetOperationHandle);
|
|
||||||
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
|
||||||
{
|
|
||||||
GameObject ret = assetOperationHandle.InstantiateSync();
|
|
||||||
return ret as T;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return assetOperationHandle.AssetObject as T;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载资源。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
|
||||||
/// <param name="parent">父节点位置。</param>
|
|
||||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
||||||
/// <returns>资源实例。</returns>
|
|
||||||
public T LoadAsset<T>(string assetName, Transform parent,out AssetOperationHandle assetOperationHandle) where T : Object
|
|
||||||
{
|
|
||||||
assetOperationHandle = null;
|
|
||||||
if (string.IsNullOrEmpty(assetName))
|
|
||||||
{
|
|
||||||
Log.Error("Asset name is invalid.");
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
|
|
||||||
{
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
|
||||||
{
|
|
||||||
GameObject ret = assetHandleData.Handle.InstantiateSync(parent);
|
|
||||||
return ret as T;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return assetHandleData.Handle.AssetObject as T;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assetOperationHandle = YooAssets.LoadAssetSync<T>(assetName);
|
|
||||||
|
|
||||||
Reference(assetOperationHandle);
|
|
||||||
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
|
||||||
{
|
|
||||||
GameObject ret = assetOperationHandle.InstantiateSync(parent);
|
|
||||||
return ret as T;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return assetOperationHandle.AssetObject as T;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 异步加载资源实例。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载的实例名称。</param>
|
|
||||||
/// <param name="cancellationToken">取消操作Token。</param>
|
/// <param name="cancellationToken">取消操作Token。</param>
|
||||||
/// <returns>资源实实例。</returns>
|
/// <param name="needInstance">是否需要实例化。</param>
|
||||||
// ReSharper disable once UnusedParameter.Global
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||||
// ReSharper disable once RedundantAssignment
|
/// <param name="parent">资源实例父节点。</param>
|
||||||
public async UniTask<T> LoadAssetAsync<T>(string assetName, CancellationToken cancellationToken = default) where T : Object
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||||
|
/// <returns>异步资源实例。</returns>
|
||||||
|
public async UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default,
|
||||||
|
bool needInstance = true, string packageName = "", Transform parent = null) where T : Object
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(assetName))
|
if (string.IsNullOrEmpty(location))
|
||||||
{
|
{
|
||||||
Log.Error("Asset name is invalid.");
|
Log.Error("Asset name is invalid.");
|
||||||
return default;
|
return default;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
|
if (_assetHandleDataMap.TryGetValue(location,out var assetHandleData))
|
||||||
{
|
{
|
||||||
if (typeof(T) == typeof(GameObject))
|
if (typeof(T) == typeof(GameObject) && needInstance)
|
||||||
{
|
{
|
||||||
GameObject ret = assetHandleData.Handle.InstantiateSync();
|
GameObject ret = assetHandleData.Handle.InstantiateSync();
|
||||||
return ret as T;
|
return ret as T;
|
||||||
@@ -378,7 +314,16 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetOperationHandle handle = YooAssets.LoadAssetAsync<T>(assetName);
|
AssetOperationHandle handle;
|
||||||
|
if (string.IsNullOrEmpty(packageName))
|
||||||
|
{
|
||||||
|
handle = YooAssets.LoadAssetSync<T>(location);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var package = YooAssets.GetPackage(packageName);
|
||||||
|
handle = package.LoadAssetSync<T>(location);
|
||||||
|
}
|
||||||
|
|
||||||
Reference(handle);
|
Reference(handle);
|
||||||
|
|
||||||
@@ -391,9 +336,9 @@ namespace TEngine
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof(T) == typeof(GameObject))
|
if (typeof(T) == typeof(GameObject) && needInstance)
|
||||||
{
|
{
|
||||||
GameObject ret = handle.InstantiateSync();
|
GameObject ret = handle.InstantiateSync(parent);
|
||||||
return ret as T;
|
return ret as T;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -401,16 +346,5 @@ namespace TEngine
|
|||||||
return handle.AssetObject as T;
|
return handle.AssetObject as T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 异步加载游戏物体。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载的游戏物体名称。</param>
|
|
||||||
/// <param name="cancellationToken">取消操作Token。</param>
|
|
||||||
/// <returns>异步游戏物体实例。</returns>
|
|
||||||
public async UniTask<GameObject> LoadGameObjectAsync(string assetName, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
return await LoadAssetAsync<GameObject>(assetName,cancellationToken);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -59,7 +59,7 @@ namespace TEngine
|
|||||||
public void Bind(AssetOperationHandle operation, string assetLocation, AssetReference parent = null,
|
public void Bind(AssetOperationHandle operation, string assetLocation, AssetReference parent = null,
|
||||||
string packageName = "")
|
string packageName = "")
|
||||||
{
|
{
|
||||||
if (_operationHandle != null)
|
if (_operationHandle is { IsValid: true })
|
||||||
{
|
{
|
||||||
Log.Warning($"rebind AssetReference gameObject.name:{gameObject.name} assetLocation:{assetLocation}");
|
Log.Warning($"rebind AssetReference gameObject.name:{gameObject.name} assetLocation:{assetLocation}");
|
||||||
_operationHandle.Dispose();
|
_operationHandle.Dispose();
|
||||||
@@ -153,82 +153,49 @@ namespace TEngine
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源。
|
/// 同步加载资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
/// <param name="location">资源的定位地址。</param>
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
||||||
/// <returns>资源实例。</returns>
|
|
||||||
public T LoadAsset<T>(string assetName) where T : Object
|
|
||||||
{
|
|
||||||
DirtyInitAssetGroup();
|
|
||||||
return _assetGroup.LoadAsset<T>(assetName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载资源。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
|
||||||
/// <param name="parent">父节点位置。</param>
|
/// <param name="parent">父节点位置。</param>
|
||||||
|
/// <param name="needInstance">是否需要实例化。</param>
|
||||||
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||||
/// <returns>资源实例。</returns>
|
/// <returns>资源实例。</returns>
|
||||||
public T LoadAsset<T>(string assetName, Transform parent) where T : Object
|
public T LoadAsset<T>(string location, bool needInstance = true,string packageName = "",Transform parent = null) where T : Object
|
||||||
{
|
{
|
||||||
DirtyInitAssetGroup();
|
DirtyInitAssetGroup();
|
||||||
return _assetGroup.LoadAsset<T>(assetName, parent);
|
return _assetGroup.LoadAsset<T>(location, needInstance, packageName, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源。
|
/// 异步加载资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
/// <param name="location">资源的定位地址。</param>
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
||||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
|
||||||
/// <returns>资源实例。</returns>
|
|
||||||
// ReSharper disable once ParameterHidesMember
|
|
||||||
public T LoadAsset<T>(string assetName, out AssetOperationHandle assetOperationHandle) where T : Object
|
|
||||||
{
|
|
||||||
DirtyInitAssetGroup();
|
|
||||||
return _assetGroup.LoadAsset<T>(assetName, out assetOperationHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载资源。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载资源的名称。</param>
|
|
||||||
/// <param name="parent">父节点位置。</param>
|
|
||||||
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
||||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
|
||||||
/// <returns>资源实例。</returns>
|
|
||||||
// ReSharper disable once ParameterHidesMember
|
|
||||||
public T LoadAsset<T>(string assetName, Transform parent, out AssetOperationHandle assetOperationHandle)
|
|
||||||
where T : Object
|
|
||||||
{
|
|
||||||
DirtyInitAssetGroup();
|
|
||||||
return _assetGroup.LoadAsset<T>(assetName, parent, out assetOperationHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 异步加载资源实例。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetName">要加载的实例名称。</param>
|
|
||||||
/// <param name="cancellationToken">取消操作Token。</param>
|
/// <param name="cancellationToken">取消操作Token。</param>
|
||||||
/// <returns>资源实实例。</returns>
|
/// <param name="needInstance">是否需要实例化。</param>
|
||||||
public async UniTask<T> LoadAssetAsync<T>(string assetName, CancellationToken cancellationToken = default)
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||||
where T : Object
|
/// <param name="parent">资源实例父节点。</param>
|
||||||
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
||||||
|
/// <returns>异步资源实例。</returns>
|
||||||
|
public async UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default,
|
||||||
|
bool needInstance = true, string packageName = "", Transform parent = null) where T : Object
|
||||||
{
|
{
|
||||||
DirtyInitAssetGroup();
|
DirtyInitAssetGroup();
|
||||||
return await _assetGroup.LoadAssetAsync<T>(assetName, cancellationToken);
|
return await _assetGroup.LoadAssetAsync<T>(location, cancellationToken, needInstance, packageName, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载游戏物体。
|
/// 异步加载游戏物体。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetName">要加载的游戏物体名称。</param>
|
/// <param name="location">资源的定位地址。</param>
|
||||||
/// <param name="cancellationToken">取消操作Token。</param>
|
/// <param name="cancellationToken">取消操作Token。</param>
|
||||||
/// <returns>异步游戏物体实例。</returns>
|
/// <param name="needInstance">是否需要实例化。</param>
|
||||||
public async UniTask<GameObject> LoadGameObjectAsync(string assetName,
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
||||||
CancellationToken cancellationToken = default)
|
/// <param name="parent">资源实例父节点。</param>
|
||||||
|
/// <returns>异步资源实例。</returns>
|
||||||
|
public async UniTask<GameObject> LoadGameObjectAsync(string location, CancellationToken cancellationToken = default,
|
||||||
|
bool needInstance = true, string packageName = "", Transform parent = null)
|
||||||
{
|
{
|
||||||
DirtyInitAssetGroup();
|
DirtyInitAssetGroup();
|
||||||
return await _assetGroup.LoadGameObjectAsync(assetName, cancellationToken);
|
return await LoadAssetAsync<GameObject>(location, cancellationToken, needInstance, packageName, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -280,7 +280,7 @@ namespace TEngine
|
|||||||
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
||||||
/// <typeparam name="T">资源类型。</typeparam>
|
/// <typeparam name="T">资源类型。</typeparam>
|
||||||
/// <returns>资源对象集合。</returns>
|
/// <returns>资源对象集合。</returns>
|
||||||
UniTask<List<T>> LoadAssetsByTagAsync<T>(string assetTag, string packageName = "") where T : UnityEngine.Object;
|
UniTask<LoadAssetsByTagOperation<T>> LoadAssetsByTagAsync<T>(string assetTag, string packageName = "") where T : UnityEngine.Object;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载资源。
|
/// 异步加载资源。
|
||||||
|
@@ -14,7 +14,7 @@ namespace TEngine
|
|||||||
|
|
||||||
private readonly Dictionary<string, ResCacheData> _cachePool = new Dictionary<string, ResCacheData>();
|
private readonly Dictionary<string, ResCacheData> _cachePool = new Dictionary<string, ResCacheData>();
|
||||||
private readonly Dictionary<string, ResCacheData> _persistCachePool = new Dictionary<string, ResCacheData>();
|
private readonly Dictionary<string, ResCacheData> _persistCachePool = new Dictionary<string, ResCacheData>();
|
||||||
private bool _enableLog = true;
|
private bool _enableLog = false;
|
||||||
private readonly List<ResourceCacheConfig> _needCacheResList = new List<ResourceCacheConfig>();
|
private readonly List<ResourceCacheConfig> _needCacheResList = new List<ResourceCacheConfig>();
|
||||||
private readonly List<string> _needPersistResList = new List<string>();
|
private readonly List<string> _needPersistResList = new List<string>();
|
||||||
private GameTimerTick _tickCheckExpire;
|
private GameTimerTick _tickCheckExpire;
|
||||||
|
@@ -824,15 +824,13 @@ namespace TEngine
|
|||||||
return package.LoadSubAssetsSync(assetInfo);
|
return package.LoadSubAssetsSync(assetInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async UniTask<List<T>> LoadAssetsByTagAsync<T>(string assetTag, string packageName = "")
|
public async UniTask<LoadAssetsByTagOperation<T>> LoadAssetsByTagAsync<T>(string assetTag,string packageName = "")
|
||||||
where T : UnityEngine.Object
|
where T : UnityEngine.Object
|
||||||
{
|
{
|
||||||
LoadAssetsByTagOperation<T> operation = new LoadAssetsByTagOperation<T>(assetTag, packageName);
|
LoadAssetsByTagOperation<T> operation = new LoadAssetsByTagOperation<T>(assetTag, packageName);
|
||||||
YooAssets.StartOperation(operation);
|
YooAssets.StartOperation(operation);
|
||||||
await operation.ToUniTask();
|
await operation.ToUniTask();
|
||||||
List<T> assetObjects = operation.AssetObjects;
|
return operation;
|
||||||
operation.ReleaseHandle();
|
|
||||||
return assetObjects;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default,
|
public async UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default,
|
||||||
|
@@ -671,7 +671,7 @@ namespace TEngine
|
|||||||
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
|
||||||
/// <typeparam name="T">资源类型。</typeparam>
|
/// <typeparam name="T">资源类型。</typeparam>
|
||||||
/// <returns>资源对象集合。</returns>
|
/// <returns>资源对象集合。</returns>
|
||||||
public async UniTask<List<T>> LoadAssetsByTagAsync<T>(string assetTag, string customPackageName = "")
|
public async UniTask<LoadAssetsByTagOperation<T>> LoadAssetsByTagAsync<T>(string assetTag, string customPackageName = "")
|
||||||
where T : UnityEngine.Object
|
where T : UnityEngine.Object
|
||||||
{
|
{
|
||||||
return await m_ResourceManager.LoadAssetsByTagAsync<T>(assetTag, packageName: customPackageName);
|
return await m_ResourceManager.LoadAssetsByTagAsync<T>(assetTag, packageName: customPackageName);
|
||||||
|
Reference in New Issue
Block a user