mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-06-16 22:27:45 +08:00
Add GetAllLoadedAssetBundles
This commit is contained in:
parent
bc5d16051f
commit
239534e09c
@ -4,27 +4,35 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using UnhollowerBaseLib;
|
using UnhollowerBaseLib;
|
||||||
|
using UnhollowerBaseLib.Attributes;
|
||||||
using UnhollowerRuntimeLib;
|
using UnhollowerRuntimeLib;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityExplorer.Core.Runtime.Il2Cpp;
|
using UnityExplorer.Core.Runtime.Il2Cpp;
|
||||||
|
|
||||||
namespace UnityExplorer
|
namespace UnityExplorer
|
||||||
{
|
{
|
||||||
public class AssetBundle
|
public class AssetBundle : UnityEngine.Object
|
||||||
{
|
{
|
||||||
|
static AssetBundle()
|
||||||
|
{
|
||||||
|
ClassInjector.RegisterTypeInIl2Cpp<AssetBundle>();
|
||||||
|
}
|
||||||
|
|
||||||
// ~~~~~~~~~~~~ Static ~~~~~~~~~~~~
|
// ~~~~~~~~~~~~ Static ~~~~~~~~~~~~
|
||||||
|
|
||||||
internal delegate IntPtr d_LoadFromFile(IntPtr path, uint crc, ulong offset);
|
internal delegate IntPtr d_LoadFromFile(IntPtr path, uint crc, ulong offset);
|
||||||
|
|
||||||
|
[HideFromIl2Cpp]
|
||||||
public static AssetBundle LoadFromFile(string path)
|
public static AssetBundle LoadFromFile(string path)
|
||||||
{
|
{
|
||||||
var iCall = ICallManager.GetICall<d_LoadFromFile>("UnityEngine.AssetBundle::LoadFromFile_Internal");
|
var iCall = ICallManager.GetICall<d_LoadFromFile>("UnityEngine.AssetBundle::LoadFromFile_Internal");
|
||||||
var ptr = iCall.Invoke(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL);
|
var ptr = iCall(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL);
|
||||||
return new AssetBundle(ptr);
|
return new AssetBundle(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
private delegate IntPtr d_LoadFromMemory(IntPtr binary, uint crc);
|
private delegate IntPtr d_LoadFromMemory(IntPtr binary, uint crc);
|
||||||
|
|
||||||
|
[HideFromIl2Cpp]
|
||||||
public static AssetBundle LoadFromMemory(byte[] binary, uint crc = 0)
|
public static AssetBundle LoadFromMemory(byte[] binary, uint crc = 0)
|
||||||
{
|
{
|
||||||
var iCall = ICallManager.GetICall<d_LoadFromMemory>("UnityEngine.AssetBundle::LoadFromMemory_Internal");
|
var iCall = ICallManager.GetICall<d_LoadFromMemory>("UnityEngine.AssetBundle::LoadFromMemory_Internal");
|
||||||
@ -32,20 +40,33 @@ namespace UnityExplorer
|
|||||||
return new AssetBundle(ptr);
|
return new AssetBundle(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public delegate IntPtr d_GetAllLoadedAssetBundles_Native();
|
||||||
|
|
||||||
|
[HideFromIl2Cpp]
|
||||||
|
public static AssetBundle[] GetAllLoadedAssetBundles()
|
||||||
|
{
|
||||||
|
var iCall = ICallManager.GetICall<d_GetAllLoadedAssetBundles_Native>("UnityEngine.AssetBundle::GetAllLoadedAssetBundles_Native");
|
||||||
|
var ptr = iCall();
|
||||||
|
if (ptr == IntPtr.Zero)
|
||||||
|
return null;
|
||||||
|
return (AssetBundle[])new Il2CppReferenceArray<AssetBundle>(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
// ~~~~~~~~~~~~ Instance ~~~~~~~~~~~~
|
// ~~~~~~~~~~~~ Instance ~~~~~~~~~~~~
|
||||||
|
|
||||||
private readonly IntPtr m_bundlePtr = IntPtr.Zero;
|
public readonly IntPtr m_bundlePtr = IntPtr.Zero;
|
||||||
|
|
||||||
public AssetBundle(IntPtr ptr) { m_bundlePtr = ptr; }
|
public AssetBundle(IntPtr ptr) : base(ptr) { m_bundlePtr = ptr; }
|
||||||
|
|
||||||
// LoadAllAssets()
|
// LoadAllAssets()
|
||||||
|
|
||||||
internal delegate IntPtr d_LoadAssetWithSubAssets_Internal(IntPtr _this, IntPtr name, IntPtr type);
|
internal delegate IntPtr d_LoadAssetWithSubAssets_Internal(IntPtr _this, IntPtr name, IntPtr type);
|
||||||
|
|
||||||
|
[HideFromIl2Cpp]
|
||||||
public UnityEngine.Object[] LoadAllAssets()
|
public UnityEngine.Object[] LoadAllAssets()
|
||||||
{
|
{
|
||||||
var iCall = ICallManager.GetICall<d_LoadAssetWithSubAssets_Internal>("UnityEngine.AssetBundle::LoadAssetWithSubAssets_Internal");
|
var iCall = ICallManager.GetICall<d_LoadAssetWithSubAssets_Internal>("UnityEngine.AssetBundle::LoadAssetWithSubAssets_Internal");
|
||||||
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), Il2CppType.Of<UnityEngine.Object>().Pointer);
|
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), UnhollowerRuntimeLib.Il2CppType.Of<UnityEngine.Object>().Pointer);
|
||||||
|
|
||||||
if (ptr == IntPtr.Zero)
|
if (ptr == IntPtr.Zero)
|
||||||
return new UnityEngine.Object[0];
|
return new UnityEngine.Object[0];
|
||||||
@ -57,10 +78,11 @@ namespace UnityExplorer
|
|||||||
|
|
||||||
internal delegate IntPtr d_LoadAsset_Internal(IntPtr _this, IntPtr name, IntPtr type);
|
internal delegate IntPtr d_LoadAsset_Internal(IntPtr _this, IntPtr name, IntPtr type);
|
||||||
|
|
||||||
|
[HideFromIl2Cpp]
|
||||||
public T LoadAsset<T>(string name) where T : UnityEngine.Object
|
public T LoadAsset<T>(string name) where T : UnityEngine.Object
|
||||||
{
|
{
|
||||||
var iCall = ICallManager.GetICall<d_LoadAsset_Internal>("UnityEngine.AssetBundle::LoadAsset_Internal");
|
var iCall = ICallManager.GetICall<d_LoadAsset_Internal>("UnityEngine.AssetBundle::LoadAsset_Internal");
|
||||||
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), Il2CppType.Of<T>().Pointer);
|
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), UnhollowerRuntimeLib.Il2CppType.Of<T>().Pointer);
|
||||||
|
|
||||||
if (ptr == IntPtr.Zero)
|
if (ptr == IntPtr.Zero)
|
||||||
return null;
|
return null;
|
||||||
@ -72,10 +94,11 @@ namespace UnityExplorer
|
|||||||
|
|
||||||
internal delegate void d_Unload(IntPtr _this, bool unloadAllLoadedObjects);
|
internal delegate void d_Unload(IntPtr _this, bool unloadAllLoadedObjects);
|
||||||
|
|
||||||
public void Unload(bool unloadAssets = true)
|
[HideFromIl2Cpp]
|
||||||
|
public void Unload(bool unloadAllLoadedObjects)
|
||||||
{
|
{
|
||||||
var iCall = ICallManager.GetICall<d_Unload>("UnityEngine.AssetBundle::Unload");
|
var iCall = ICallManager.GetICall<d_Unload>("UnityEngine.AssetBundle::Unload");
|
||||||
iCall.Invoke(this.m_bundlePtr, unloadAssets);
|
iCall.Invoke(this.m_bundlePtr, unloadAllLoadedObjects);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user