fix: 1、更换命名空间和文件夹名字

This commit is contained in:
2026-06-02 11:11:47 +08:00
parent dfead2c461
commit 2a53f34659
4305 changed files with 582 additions and 603 deletions
+52
View File
@@ -0,0 +1,52 @@
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace ZooMatch
{
public class AESForFileKit
{
private static readonly byte[] Salt = Encoding.UTF8.GetBytes(ZooMatchConstant.nifldg);
private const int Iterations = 1000;
public static void EncryptFile(string inputPath, string outputPath, string password)
{
var passwordBytes = Encoding.UTF8.GetBytes(password);
var inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read);
var outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write);
using var aes = new AesManaged();
var key = new Rfc2898DeriveBytes(passwordBytes, Salt, Iterations);
aes.Key = key.GetBytes(aes.KeySize / 8);
aes.IV = key.GetBytes(aes.BlockSize / 8);
using var cryptoStream = new CryptoStream(outputStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
inputStream.CopyTo(cryptoStream);
cryptoStream.FlushFinalBlock();
cryptoStream.Close();
outputStream.Close();
inputStream.Close();
}
public static byte[] DecryptToBytes(string inputPath, string password, out int dataSize)
{
var passwordBytes = Encoding.UTF8.GetBytes(password);
var inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read);
var outputMemoryStream = new MemoryStream();
using (var aes = new AesManaged())
{
var key = new Rfc2898DeriveBytes(passwordBytes, Salt, Iterations);
aes.Key = key.GetBytes(aes.KeySize / 8);
aes.IV = key.GetBytes(aes.BlockSize / 8);
using (var cryptoStream = new CryptoStream(inputStream, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
cryptoStream.CopyTo(outputMemoryStream);
}
}
var outputBytes = outputMemoryStream.ToArray();
dataSize = outputBytes.Length;
return outputBytes;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 429efb8e8784c764387a3d6f29225252
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+118
View File
@@ -0,0 +1,118 @@
// #if UNITY_EDITOR
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using Object = UnityEngine.Object;
namespace ZooMatch
{
public class AssetDataBaseKit : Singleton<AssetDataBaseKit>, ILoadAsset
{
private string assetRootPath = "ZooMatchAssets/";
public T GetAsset<T>(string dfsad, string sa) where T : Object
{
// try
// {
var asPath = new StringBuilder(AssetPathFormat(dfsad));
if (sa.EndsWith("!a.png"))
{
// assetFullPath = AssetPathFormat(dfsad, sa);
}
else
{
sa = sa.Split(".")[0];
}
var asset = Resources.Load<T>(asPath.ToString() + "/" + sa);
if (asset == null)
{
Debug.LogError($"[Jarvis] [AssetDataBaseKit] 未能加载资源: {asPath}/{sa}");
return default; // 或者返回一个备用资源,或者抛出异常
}
return asset;
// }
// catch (System.Exception e)
// {
// Debug.Log($"[Jarvis] [AssetDataBaseKit] 错误堆栈:{e.StackTrace}");
// Debug.LogError($"[Jarvis] [AssetDataBaseKit] 加载资源时发生错误: {e.Message}");
// return default; // 或者返回一个备用资源,或者抛出异常
// }
// var assetPath = new StringBuilder(AssetPathFormat(dfsad));
// var assetFullPath = "";
// if (sa.EndsWith("!a.png"))
// {
// assetFullPath = AssetPathFormat(dfsad, sa);
// }
// else
// {
// sa = sa.Split(".")[0];
// var assets = AssetDatabase.FindAssets(sa, new[] { assetPath.ToString() });
// var nameFilter = sa + ".";
// foreach (var temp in assets)
// {
// var fullPath = AssetDatabase.GUIDToAssetPath(temp);
// if (fullPath.Contains(nameFilter))
// {
// assetFullPath = fullPath;
// break;
// }
// }
// }
// var asset = AssetDatabase.LoadAssetAtPath<T>(assetFullPath);
// return asset;
}
public void GetAsset<T>(string dfsad, string sa, UnityAction<T> onCompleted) where T : Object
{
// try
// {
var asset = GetAsset<T>(dfsad, sa);
onCompleted?.Invoke(asset);
// }
// catch (System.Exception e)
// {
// Debug.Log($"[ Jarvis ] [ GetAsset ] 错误堆栈:{e.StackTrace}");
// Debug.LogError($"[ Jarvis ] [ GetAsset ] 异步加载资源 {sa} 时发生错误: {e.Message}");
// onCompleted?.Invoke(default); // 可能需要通知用户加载失败
// }
}
public void RecycleAsset(string assetUrl, UnityAction onCompleted)
{
onCompleted?.Invoke();
}
private string AssetPathFormat(string assetUrl, string assetName)
{
var replace = assetUrl.Replace(".", "/");
var sb = new StringBuilder(replace);
var folderPath = sb + "/";
var assetPath = $"{assetRootPath}{folderPath}{assetName}";
return assetPath;
}
private string AssetPathFormat(string assetUrl)
{
var assetPath = $"{assetRootPath}{assetUrl.Replace(".", "/")}";
return assetPath;
}
public static T GetAssetstatic<T>(string assetUrl, string assetName) where T : Object
{
var assetPath = $"{"ZooMatchAssets/"}{assetUrl.Replace(".", "/")}";
assetName = assetName.Split(".")[0];
var asset = Resources.Load<T>(assetPath.ToString() + "/" + assetName);
return asset;
}
}
}
// #endif
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ab04c207993344cca1762aee3d1e840f
timeCreated: 1683361552
+477
View File
@@ -0,0 +1,477 @@
using System;
using FairyGUI;
using System.Text;
using UnityEngine;
using System.Collections.Generic;
using Application = UnityEngine.Application;
using Random = UnityEngine.Random;
using DG.Tweening;
namespace ZooMatch
{
public static class CommonHelper
{
public static Dictionary<int, int> activeTimes = new Dictionary<int, int>();
public static Dictionary<int, int> activeTimes_saveingpot = new Dictionary<int, int>();
public static int GetIndexByChanceList(int[] chanceList)
{
float total = 0;
for (int i = 0; i < chanceList.Length; i++)
{
total += chanceList[i];
}
float result = Random.Range(0, total);
float tmpTotal = 0;
for (int i = 0; i < chanceList.Length; i++)
{
float chance = chanceList[i];
tmpTotal += chance;
if (result < tmpTotal)
{
return i;
}
}
return -1;
}
public static bool GetBoolByChance(float chance)
{
var value = UnityEngine.Random.Range(0, 1f);
if (value <= chance)
return true;
return false;
}
public static void SetActive(this Component component, bool isActive)
{
component.gameObject.SetActive(isActive);
}
public static string GetAppSavePath()
{
return Application.persistentDataPath;
}
public static GTweener FadeIn(GObject obj, float duration = 0.3f, float delay = 0)
{
if (obj != null)
{
obj.alpha = 0.5f;
return obj.TweenFade(1, duration).SetDelay(delay);
}
return null;
}
public static GTweener FadeOut(GObject obj, float duration = 0.3f, float delay = 0)
{
if (obj != null)
{
obj.alpha = 1;
return obj.TweenFade(0f, duration).SetDelay(delay);
}
return null;
}
private static float clickTime;
public static bool IsClickNoQuick()
{
if (Time.time < clickTime)
{
clickTime = Time.time + 0.1f;
return false;
}
clickTime = Time.time + 0.3f;
return true;
}
public static void InitGButton(GObject button, Action action, bool isNetworkCheck = false,
bool isQuickClickCheck = true)
{
button?.onClick.Set(() =>
{
if (isQuickClickCheck && !IsClickNoQuick())
{
return;
}
action?.Invoke();
});
}
public static string TimeFormat(int second, CountDownType countDownType = CountDownType.Second,
string dayFormat = "")
{
var result = new StringBuilder();
if (second < 0)
{
second = 0;
}
if (countDownType == CountDownType.Second)
{
result.Append(second);
return result.ToString();
}
int tmpSecond;
if (second >= 60)
{
tmpSecond = second % 60;
}
else
{
tmpSecond = second;
}
result.Append(tmpSecond);
if (tmpSecond < 10)
{
result.Insert(0, 0);
}
int tmpMin = second / 60;
if (countDownType == CountDownType.Minute)
{
result.Insert(0, ":");
result.Insert(0, tmpMin);
return result.ToString();
}
int tmpHour = tmpMin / 60;
if (countDownType == CountDownType.Hour)
{
if (tmpMin >= 60)
{
tmpMin %= 60;
}
result.Insert(0, ":");
result.Insert(0, tmpMin);
if (tmpMin < 10)
{
result.Insert(0, 0);
}
result.Insert(0, ":");
result.Insert(0, tmpHour);
if (tmpHour < 10)
{
result.Insert(0, 0);
}
return result.ToString();
}
int tmpDay = tmpHour / 24;
if (countDownType == CountDownType.Day)
{
if (tmpMin >= 60)
{
tmpMin %= 60;
}
result.Insert(0, ":");
result.Insert(0, tmpMin);
if (tmpMin < 10)
{
result.Insert(0, 0);
}
if (tmpHour >= 24)
{
tmpHour %= 24;
}
result.Insert(0, ":");
result.Insert(0, tmpHour);
if (tmpHour < 10)
{
result.Insert(0, 0);
}
if (string.IsNullOrEmpty(dayFormat))
{
dayFormat = "Days";
}
result.Insert(0, $" {dayFormat} ");
result.Insert(0, tmpDay);
}
return result.ToString();
}
public static string FormatTime(int second,
CountDownType countDownType = CountDownType.Second, string dayFormat = "")
{
StringBuilder result = new StringBuilder();
if (second < 0)
{
second = 0;
}
if (countDownType == CountDownType.Second)
{
result.Append(second);
return result.ToString();
}
int tmpSecond;
if (second >= 60)
{
tmpSecond = second % 60;
}
else
{
tmpSecond = second;
}
result.Append(tmpSecond);
if (tmpSecond < 10)
{
result.Insert(0, 0);
}
int tmpMin = second / 60;
if (countDownType == CountDownType.Minute)
{
result.Insert(0, ":");
result.Insert(0, tmpMin);
return result.ToString();
}
int tmpHour = tmpMin / 60;
if (countDownType == CountDownType.Hour)
{
if (tmpMin >= 60)
{
tmpMin %= 60;
}
result.Insert(0, ":");
result.Insert(0, tmpMin);
if (tmpMin < 10)
{
result.Insert(0, 0);
}
result.Insert(0, ":");
result.Insert(0, tmpHour);
if (tmpHour < 10)
{
result.Insert(0, 0);
}
return result.ToString();
}
int tmpDay = tmpHour / 24;
if (countDownType == CountDownType.Day)
{
if (tmpMin >= 60)
{
tmpMin %= 60;
}
result.Insert(0, ":");
result.Insert(0, tmpMin);
if (tmpMin < 10)
{
result.Insert(0, 0);
}
if (tmpHour >= 24)
{
tmpHour %= 24;
}
result.Insert(0, ":");
result.Insert(0, tmpHour);
if (tmpHour < 10)
{
result.Insert(0, 0);
}
if (string.IsNullOrEmpty(dayFormat))
{
dayFormat = "Days";
}
result.Insert(0, $" {dayFormat} ");
result.Insert(0, tmpDay);
}
return result.ToString();
}
public static void RandomSortList<T>(List<T> list)
{
System.Random r = new System.Random();
for (int i = 0; i < list.Count; i++)
{
int index = r.Next(list.Count);
(list[i], list[index]) = (list[index], list[i]);
}
}
public static int RandomInt(this IList<int> array)
{
return Random.Range(array[0], array[1]);
}
public static int RandomRange(int[] range)
{
if (range == null)
{
return 0;
}
if (range.Length == 2)
{
return RandomRange(range[0], range[1]);
}
else
{
return range[0];
}
}
public static int RandomRange(int begin, int end)
{
return Random.Range(begin, end);
}
public static float RandomRange(float begin, float end)
{
return Random.Range(begin, end);
}
public static T RandomWeight<T>(Dictionary<T, int> weightDic)
{
int totalWeight = 0;
foreach (var weight in weightDic)
{
totalWeight += weight.Value;
}
int randomWeight = Random.Range(0, totalWeight);
int currWeight = 0;
foreach (var weight in weightDic)
{
currWeight += weight.Value;
if (randomWeight < currWeight)
{
return weight.Key;
}
}
return default;
}
public static int RandomWeight(List<int> weightArray)
{
float totalWeight = 0;
for (var i = 0; i < weightArray.Count; i++) totalWeight += weightArray[i];
var randomWeight = Random.Range(0, totalWeight);
if (randomWeight >= totalWeight) return weightArray.Count - 1;
float currWeight = 0;
for (var i = 0; i < weightArray.Count; i++)
{
currWeight += weightArray[i];
if (randomWeight < currWeight) return i;
}
return -1;
}
public static int RandomRangeIncludeEnd(int[] range)
{
if (range == null) return 0;
if (range.Length == 2)
return RandomRange(range[0], range[1] + 1);
return range[0];
}
public static bool IsToday(long timestamp)
{
// 将时间戳转换为DateTime对象
DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).ToLocalTime().DateTime;
// 获取今天的日期(不包含时间部分)
DateTime today = DateTime.Today;
//Debug.Log($"dateTime: {dateTime.Date} \n today: {today} \n 是否是今天: {dateTime.Date == today}");
// 比较日期部分是否相等
return dateTime.Date == today;
}
public static void CheckAdTimes()
{
DateTime today = DateTime.Today;
var localTimes = PlayerPrefs.GetString("task_ad_times");
if (string.IsNullOrEmpty(localTimes))
{
PlayerPrefs.SetString("task_ad_times", today.ToString());
return;
}
if (localTimes != today.ToString())
{
DataMgr.VideoWatchCount.Value = 0;
SaveData.GetSaveObject().ad_task_record = new List<int>();
PlayerPrefs.SetString("task_ad_times", today.ToString());
}
}
public static void ShowNumAnim(GTextField text_gold, decimal coin, int id = 102, float time = 1.0f)
{
var currency = id == 102 ? DataMgr.Ticket.Value : DataMgr.Coin.Value;
var startNum = currency - coin;
if (id == 102)
{
DOVirtual.Float((float)startNum, (float)currency, time,
value => { text_gold.text = $"{GameHelper.Get102Str((decimal)value)}"; }).OnComplete(() => {
// 动画完成时确保最终值被正确设置
text_gold.text = $"{GameHelper.Get102Str((decimal)currency)}";
});
} else {
DOVirtual.Float((float)startNum, (float)currency, time,
value => { text_gold.text = $"{GameHelper.Get101Str((decimal)value)}"; }).OnComplete(() => {
// 动画完成时确保最终值被正确设置
text_gold.text = $"{GameHelper.Get101Str((decimal)currency)}";
});
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 503da24caec74f59a9df8b84a7635133
timeCreated: 1681803914
+157
View File
@@ -0,0 +1,157 @@
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using System.Collections;
using UnityEngine.Networking;
namespace ZooMatch
{
public class DownloadKit
{
private static void SaveTextFile(string content, string filePath, string fileName)
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
File.WriteAllText($"{filePath}{fileName}.txt", content);
}
public static void SaveFile(string content, string filePath, string fileName)
{
SaveTextFile(content, filePath, fileName);
}
private static void SaveTextFile(byte[] content, string filePath, string fileName)
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
File.WriteAllBytes($"{filePath}{fileName}.txt", content);
}
public static IEnumerator GetTextFromUrl(string url, string fileName, UnityAction<string> action = null,
string savePath = null, bool isSave = true)
{
var unityWebRequest = UnityWebRequest.Get(url);
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result is UnityWebRequest.Result.ConnectionError
or UnityWebRequest.Result.ProtocolError)
{
yield return null;
action?.Invoke(default);
yield break;
}
var content = unityWebRequest.downloadHandler.text;
if (isSave)
{
savePath ??= ZooMatchFileKit.GetFilePath();
SaveTextFile(content, savePath, fileName);
}
yield return null;
action?.Invoke(content);
}
public static IEnumerator GetTextFromUrl1(string url, string fileName, UnityAction<string> action = null,
string savePath = null, bool isSave = true)
{
var www = new WWW(url);
while (!www.isDone)
{
}
if (isSave)
{
savePath ??= ZooMatchFileKit.GetFilePath();
SaveTextFile(www.bytes, savePath, fileName);
}
yield return null;
action?.Invoke(System.Text.Encoding.UTF8.GetString(www.bytes));
}
public static void GetTextFromUrl2(string url, string fileName, UnityAction<string> action = null,
string savePath = null, bool isSave = true)
{
var www = new WWW(url);
while (!www.isDone)
{
}
if (isSave)
{
savePath ??= ZooMatchFileKit.GetFilePath();
SaveTextFile(www.bytes, savePath, fileName);
}
// yield return null;
action?.Invoke(System.Text.Encoding.UTF8.GetString(www.bytes));
}
public static IEnumerator GetFileFromUrl(string url, string fileName, UnityAction<bool> action)
{
var unityWebRequest = UnityWebRequest.Get(url);
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result is
UnityWebRequest.Result.ConnectionError or UnityWebRequest.Result.ProtocolError)
{
action?.Invoke(false);
yield break;
}
var results = unityWebRequest.downloadHandler.data;
var savePath = ZooMatchFileKit.GetFilePath();
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
var filePath = $"{savePath}{fileName}";
var fileInfo = new FileInfo(filePath);
var fs = fileInfo.Create();
fs.Write(results, 0, results.Length);
fs.Flush();
fs.Close();
fs.Dispose();
yield return YieldConst.WaitForEndOfFrame;
action?.Invoke(true);
}
public static string DownloadResourceSync(string url, string savePath, string fileName, bool isSave = true)
{
using (var unityWebRequest = UnityWebRequest.Get(url))
{
unityWebRequest.SendWebRequest();
while (!unityWebRequest.isDone)
{
// 等待下载完成
}
if (unityWebRequest.result == UnityWebRequest.Result.ConnectionError ||
unityWebRequest.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError($"Error downloading resource: {unityWebRequest.error}");
return "";
}
var content = unityWebRequest.downloadHandler.text;
if (isSave)
{
savePath ??= ZooMatchFileKit.GetFilePath();
SaveTextFile(content, savePath, fileName);
}
return content;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fe2634714606b7443a3b12c2393423fd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fd79a9adb913488d9704813bd7ebac98
timeCreated: 1681804422
+16
View File
@@ -0,0 +1,16 @@
using UnityEngine.Events;
using Object = UnityEngine.Object;
namespace ZooMatch
{
public interface ILoadAsset
{
T GetAsset<T>(string dfsad, string sa) where T : Object;
void GetAsset<T>(string dfsad, string sa, UnityAction<T> onCompleted) where T : Object;
void RecycleAsset(string assetUrl, UnityAction onCompleted);
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4f5f73f6c2c342f9a9ee2cae54688486
timeCreated: 1682576608
+287
View File
@@ -0,0 +1,287 @@
// #if UNITY_EDITOR
// #endif
using UnityEngine.Events;
namespace ZooMatch
{
using System;
using System.Linq;
using UnityEngine;
using System.Collections.Generic;
using Object = UnityEngine.Object;
public class LoadKit : Singleton<LoadKit>
{
private readonly Dictionary<string, Dictionary<int, string>> mGameObject2AbMap = new();
private readonly Dictionary<string, Dictionary<int, string>> mSprite2AbMap = new();
private readonly Dictionary<string, Dictionary<int, string>> mAudio2AbMap = new();
private ILoadAsset LoadAssetType { get; set; }
public void Init(ILoadAsset loadAssetType = null)
{
// #if UNITY_EDITOR
LoadAssetType = loadAssetType ?? new AssetDataBaseKit();
// #else
// LoadAssetType = loadAssetType ?? new ZooMatchKit();
// #endif
}
public void LoadAsset<T>(string assetUrl, string assetName, UnityAction<T> onCompleted, bool isRecord = true)
where T : Object
{
if (string.IsNullOrEmpty(assetUrl) || string.IsNullOrEmpty(assetName))
{
Debug.LogError("AssetUrl or AssetName is Empty.");
onCompleted?.Invoke(default);
return;
}
Init();
if (LoadAssetType == null)
{
Debug.LogError("Please Call LoadBox.Instance.Init() first.");
onCompleted?.Invoke(default);
return;
}
LoadAssetType.GetAsset<T>(assetUrl, assetName, (obj) =>
{
if (obj != null && isRecord)
{
RecordGameObject(assetUrl, obj);
}
onCompleted?.Invoke(obj);
});
}
public T LoadAsset<T>(string assetUrl, string assetName, bool isRecord = true) where T : Object
{
if (string.IsNullOrEmpty(assetUrl) || string.IsNullOrEmpty(assetName))
{
Debug.LogError("AssetUrl or AssetName is Empty.");
return default;
}
Init();
if (LoadAssetType == null)
{
Debug.LogError("Please Call LoadBox.Instance.Init() first.");
return default;
}
var obj = LoadAssetType.GetAsset<T>(assetUrl, assetName);
if (obj != null && isRecord)
{
RecordGameObject(assetUrl, obj);
}
return obj;
}
#region Sprite相关
public void LoadSprite(string assetUrl, string assetName, UnityAction<Sprite> onCompleted, bool isRecord = true)
{
LoadAsset(assetUrl, assetName, onCompleted, isRecord);
}
public Sprite LoadSprite(string assetUrl, string assetName, bool isRecord = true)
{
return LoadAsset<Sprite>(assetUrl, assetName, isRecord);
}
public void LoadSprite(string assetUrl, Action<Sprite> onCompleted)
{
if (string.IsNullOrEmpty(assetUrl))
{
Debug.LogError("AssetUrl is Empty.");
onCompleted?.Invoke(null);
return;
}
Init();
if (LoadAssetType == null)
{
Debug.LogError("Please Call LoadKit.Instance.Init() first.");
onCompleted?.Invoke(null);
return;
}
string assetName;
if (assetUrl.Contains("/"))
{
assetName = assetUrl.Split('/').Last();
assetUrl = assetUrl.Replace($"/{assetName}", string.Empty);
}
else
{
assetName = assetUrl.Split('.').Last();
assetUrl = assetUrl.Replace($".{assetName}", string.Empty);
}
LoadAssetType.GetAsset(assetUrl, assetName, delegate (Sprite sprite)
{
if (sprite != null)
{
RecordSprite(assetUrl, sprite);
}
onCompleted?.Invoke(sprite);
});
}
public void RecordSprite(string assetName, Sprite sprite)
{
if (sprite == null || string.IsNullOrEmpty(assetName))
{
Debug.LogError("ABName is Null or Sprite is Null");
return;
}
var instanceId = sprite.GetInstanceID();
if (mSprite2AbMap.Keys.Contains(assetName))
{
if (!mSprite2AbMap[assetName].Keys.Contains(instanceId))
{
mSprite2AbMap[assetName].Add(instanceId, sprite.name);
}
}
else
{
var spriteNameIns = new Dictionary<int, string> { { instanceId, sprite.name } };
mSprite2AbMap.Add(assetName, spriteNameIns);
}
}
#endregion
#region GameObject相关
public GameObject LoadGameObject(string assetUrl, string assetName, bool isRecord = true)
{
return LoadAsset<GameObject>(assetUrl, assetName, isRecord);
}
public void LoadGameObjectAndClone(string assetUrl, string assetName,
UnityAction<GameObject> onCompleted = null,
Transform parent = null, bool worldPositionStays = false)
{
LoadAsset<GameObject>(assetUrl, assetName,
gameObject => { InstantiateAndRecord(gameObject, parent, worldPositionStays, onCompleted); }, false);
}
public GameObject LoadGameObjectAndCloneSync(string assetUrl, string assetName, Transform parent = null,
bool worldPositionStays = false)
{
var gameObject = LoadGameObject(assetUrl, assetName, false);
return InstantiateAndRecord(gameObject, parent, worldPositionStays);
}
public void RecordGameObject(string assetName, Object gameObject)
{
if (gameObject == null || string.IsNullOrEmpty(assetName))
{
Debug.LogError("ABName is Null or Sprite is Null");
return;
}
var instanceId = gameObject.GetInstanceID();
if (mGameObject2AbMap.Keys.Contains(assetName))
{
if (!mGameObject2AbMap[assetName].Keys.Contains(instanceId))
{
mGameObject2AbMap[assetName].Add(instanceId, gameObject.name);
}
}
else
{
var gameNameIns = new Dictionary<int, string> { { instanceId, gameObject.name } };
mGameObject2AbMap.Add(assetName, gameNameIns);
}
}
public GameObject InstantiateAndRecord(GameObject gameObject, Transform parent = null,
bool worldPositionStays = false, UnityAction<GameObject> onCompleted = null)
{
if (gameObject == null)
{
Debug.LogError("GameObject is Null");
return null;
}
var newGameObject = parent
? Object.Instantiate(gameObject, parent, worldPositionStays)
: Object.Instantiate(gameObject);
if (newGameObject != null)
{
RecordCloneGameObject(gameObject, newGameObject);
}
onCompleted?.Invoke(newGameObject);
return newGameObject;
}
private void RecordCloneGameObject(GameObject gameObject, GameObject newGameObject)
{
if (gameObject == null || newGameObject == null)
{
return;
}
var oldInstanceId = gameObject.GetInstanceID();
var instanceId = newGameObject.GetInstanceID();
foreach (var keyValuePair in mGameObject2AbMap)
{
if (!keyValuePair.Value.Keys.Contains(oldInstanceId) ||
keyValuePair.Value.Keys.Contains(instanceId)) continue;
keyValuePair.Value.Add(instanceId, newGameObject.name);
break;
}
}
#endregion
#region
public void LoadAudio(string assetUrl, string assetName, UnityAction<AudioClip> onCompleted)
{
LoadAsset(assetUrl, assetName, onCompleted);
}
#endregion
public void RecycleAsset(string assetUrl, UnityAction onCompleted = null)
{
Init();
if (LoadAssetType != null)
{
LoadAssetType.RecycleAsset(assetUrl, onCompleted);
}
else
{
Debug.LogError("Please Call LoadBox.Instance.Init() first.");
}
}
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 283019491b0d411db1c4a6967309149e
timeCreated: 1682578772
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9fd5ef95c27f44cc8b171cbc1bfc7f7f
timeCreated: 1681806348
+152
View File
@@ -0,0 +1,152 @@
using System.IO;
using System.Linq;
using UnityEngine.Events;
using System.Text.RegularExpressions;
using Application = UnityEngine.Application;
#if UNITY_EDITOR
#endif
namespace ZooMatch
{
public class ZooMatchFileKit
{
private static bool isLog = true;
private static string AssetBundleRootUrl = Application.streamingAssetsPath + "/ZooMatchAssets/AssetBundles/";
private static string mFileUrl = Application.streamingAssetsPath + "/ZooMatchAssets/ZooMatchFile.txt";
public static string ConfigFileUrl = Application.streamingAssetsPath + "/Config/JarvisConfigFile.txt";
public static string GetSavePath()
{
return Application.persistentDataPath;
}
public static string GetLocalSavePath()
{
return Application.streamingAssetsPath;
}
public static string GetFilePath()
{
return $"{GetSavePath()}/ZooMatchAssets/";
}
public static void GetLocalAssetBundle(UnityAction<int> onPreloadCompleted, UnityAction loadCompleted)
{
GetAssetFile(s => { GetMAssetBundle(s, onPreloadCompleted, loadCompleted); });
}
public static void GetMAssetBundle(string content, UnityAction<int> onPreloadCompleted,
UnityAction onLoadCompleted)
{
if (content.IsNullOrWhiteSpace())
{
return;
}
var mFile = Regex.Split(content, "\r\n", RegexOptions.IgnoreCase).ToList();
for (var i = mFile.Count - 1; i >= 0; i--)
{
var aotMetaAssemblyFile = mFile[i];
if (string.IsNullOrEmpty(aotMetaAssemblyFile) || string.IsNullOrWhiteSpace(aotMetaAssemblyFile))
{
mFile.RemoveAt(i);
}
}
var completedCount = mFile.Count;
onPreloadCompleted?.Invoke(completedCount);
foreach (var m in mFile)
{
if (m.IsNullOrWhiteSpace())
{
onLoadCompleted?.Invoke();
completedCount--;
if (completedCount <= 0)
{
OnGetAssetBundleCompleted();
}
continue;
}
var assetBundleNameInfoArray =
m.Split(ZooMatchConstant.fgklpk.ToCharArray());
var fileName = assetBundleNameInfoArray[0];
var mUrl = $"{AssetBundleRootUrl}{fileName}";
var mFilePath = $"{GetFilePath()}{fileName}";
if (File.Exists(mFilePath))
{
var fileMD5 = MD5Kit.GetFileMD5(mFilePath);
var fileMD5New = assetBundleNameInfoArray[1];
if (fileMD5.Equals(fileMD5New))
{
if (isLog)
{
}
onLoadCompleted?.Invoke();
completedCount--;
if (completedCount <= 0)
{
OnGetAssetBundleCompleted();
}
continue;
}
if (isLog)
{
}
}
CrazyAsyKit.StartCoroutine(DownloadKit.GetFileFromUrl(mUrl, fileName, isSuccess =>
{
if (isLog)
{
}
onLoadCompleted?.Invoke();
completedCount--;
if (completedCount <= 0)
{
OnGetAssetBundleCompleted();
}
}));
}
}
private static void OnGetAssetBundleCompleted()
{
ZooMatchKit.Instance.InitManifest(ZooMatchConstant.lesest,
manifestInfo =>
{
AppDispatcher.Instance.Dispatch(AppMsg.UI_LoadingInitAsset);
});
}
public static void GetAssetFile(UnityAction<string> action)
{
CrazyAsyKit.StartCoroutine(DownloadKit.GetTextFromUrl(mFileUrl, "ZooMatchFile",
content => { action?.Invoke(content); }));
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 583922fa338e2bb4e840ef1b59e376a1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: