95 lines
2.3 KiB
C#
95 lines
2.3 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Concurrent;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Text;
|
||
|
using BITKit.IO;
|
||
|
using Cysharp.Threading.Tasks;
|
||
|
using UnityEngine;
|
||
|
using YooAsset;
|
||
|
|
||
|
// ReSharper disable SuspiciousTypeConversion.Global
|
||
|
|
||
|
namespace BITKit.Mod
|
||
|
{
|
||
|
|
||
|
public class UnityModLoader : MonoBehaviour
|
||
|
{
|
||
|
private static readonly ConcurrentDictionary<string,IMod> _mods=new();
|
||
|
private void OnEnable()
|
||
|
{
|
||
|
ModService.OnModLoadAsync += OnModLoadAsync;
|
||
|
ModService.OnModUnloadAsync += OnModUnloadAsync;
|
||
|
}
|
||
|
private void OnDisable()
|
||
|
{
|
||
|
ModService.OnModLoadAsync -= OnModLoadAsync;
|
||
|
ModService.OnModUnloadAsync -= OnModUnloadAsync;
|
||
|
}
|
||
|
private UniTask OnModUnloadAsync(IMod mod)
|
||
|
{
|
||
|
switch (mod)
|
||
|
{
|
||
|
case IAssetMod:
|
||
|
YooAssets.DestroyPackage(mod.PackageName);
|
||
|
YooAssetUtils.UnregisterPackage(mod.PackageName);
|
||
|
break;
|
||
|
}
|
||
|
return UniTask.CompletedTask;
|
||
|
}
|
||
|
|
||
|
private async UniTask OnModLoadAsync(IMod arg)
|
||
|
{
|
||
|
switch (arg)
|
||
|
{
|
||
|
case IAssetMod:
|
||
|
var package = YooAssets.CreatePackage(arg.PackageName);
|
||
|
|
||
|
var defaultHostServer = new RemoteServices(
|
||
|
arg.FolderPath,arg.FolderPath)
|
||
|
{
|
||
|
|
||
|
};
|
||
|
var queryServices = new LocalQueryServices(arg.PackageName);
|
||
|
|
||
|
var initParameters = new HostPlayModeParameters
|
||
|
{
|
||
|
BuildinQueryServices = queryServices,
|
||
|
RemoteServices = defaultHostServer
|
||
|
};
|
||
|
var initOperation = package.InitializeAsync(initParameters);
|
||
|
await initOperation;
|
||
|
|
||
|
if(initOperation.Status == EOperationStatus.Succeed)
|
||
|
{
|
||
|
YooAssetUtils.RegisterPackage(arg.PackageName);
|
||
|
|
||
|
// var logBuilder = new StringBuilder();
|
||
|
// logBuilder.AppendLine("该包中的资源:");
|
||
|
// foreach (var x in package.GetAssetInfos(arg.Tags))
|
||
|
// {
|
||
|
// logBuilder.AppendLine(x.Address);
|
||
|
// }
|
||
|
// logBuilder.AppendLine("默认包中的资源");
|
||
|
// foreach (var x in YooAssets.GetAssetInfos(arg.Tags))
|
||
|
// {
|
||
|
// logBuilder.AppendLine(x.Address);
|
||
|
// }
|
||
|
// BIT4Log.Log<UnityModLoadAssetTester>(logBuilder.ToString());
|
||
|
|
||
|
BIT4Log.Log<UnityModLoadAssetTester>($"资源包{arg.PackageName}初始化成功!");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BIT4Log.Log<UnityModLoadAssetTester>($"资源包初始化失败:{initOperation.Error}");
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|