| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | //-------------------------------------// 作者:Stark//-------------------------------------using System.Collections.Generic;using UnityEngine;using YooAsset;/*/// <summary>/// 资源文件查询服务类/// </summary>public class GameQueryServices2 : IQueryServices{	public DeliveryFileInfo GetDeliveryFileInfo(string packageName, string fileName)	{		throw new System.NotImplementedException();	}	public bool QueryDeliveryFiles(string packageName, string fileName)	{		return false;	}	public bool QueryStreamingAssets(string packageName, string fileName)	{		return StreamingAssetsHelper2.FileExists($"{StreamingAssetsDefine.RootFolderName}/{packageName}/{fileName}");	}}/// <summary>/// StreamingAssets目录下资源查询帮助类/// </summary>public sealed class StreamingAssetsHelper2{	private static readonly Dictionary<string, bool> _cacheData = new Dictionary<string, bool>(1000);#if UNITY_ANDROID && !UNITY_EDITOR	private static AndroidJavaClass _unityPlayerClass;	public static AndroidJavaClass UnityPlayerClass	{		get		{			if (_unityPlayerClass == null)				_unityPlayerClass = new UnityEngine.AndroidJavaClass("com.unity3d.player.UnityPlayer");			return _unityPlayerClass;		}	}	private static AndroidJavaObject _currentActivity;	public static AndroidJavaObject CurrentActivity	{		get		{			if (_currentActivity == null)				_currentActivity = UnityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");			return _currentActivity;		}	}	/// <summary>	/// 利用安卓原生接口查询内置文件是否存在	/// </summary>	public static bool FileExists(string filePath)	{		if (_cacheData.TryGetValue(filePath, out bool result) == false)		{			result = CurrentActivity.Call<bool>("CheckAssetExist", filePath);			_cacheData.Add(filePath, result);		}		return result;	}#else	public static bool FileExists(string filePath)	{		if (_cacheData.TryGetValue(filePath, out bool result) == false)		{			result = System.IO.File.Exists(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));			_cacheData.Add(filePath, result);		}		return result;	}#endif}#if UNITY_ANDROID && UNITY_EDITOR/// <summary>/// 为Github对开发者的友好,采用自动补充UnityPlayerActivity.java文件的通用姿势满足各个开发者/// </summary>internal class AndroidPost : UnityEditor.Android.IPostGenerateGradleAndroidProject{	public int callbackOrder => 99;	public void OnPostGenerateGradleAndroidProject(string path)	{		path = path.Replace("\\", "/");		string untityActivityFilePath = $"{path}/src/main/java/com/unity3d/player/UnityPlayerActivity.java";		var readContent = System.IO.File.ReadAllLines(untityActivityFilePath);		string postContent =			"    //auto-gen-function \n" +			"    public boolean CheckAssetExist(String filePath) \n" +			"    { \n" +			"        android.content.res.AssetManager assetManager = getAssets(); \n" +			"        try \n" +			"        { \n" +			"            java.io.InputStream inputStream = assetManager.open(filePath); \n" +			"            if (null != inputStream) \n" +			"            { \n" +			"                 inputStream.close(); \n" +			"                 return true; \n" +			"            } \n" +			"        } \n" +			"        catch(java.io.IOException e) \n" +			"        { \n" +			"        } \n" +			"        return false; \n" +			"    } \n" +			"}";		if (CheckFunctionExist(readContent) == false)			readContent[readContent.Length - 1] = postContent;		System.IO.File.WriteAllLines(untityActivityFilePath, readContent);	}	private bool CheckFunctionExist(string[] contents)	{		for (int i = 0; i < contents.Length; i++)		{			if (contents[i].Contains("CheckAssetExist"))			{				return true;			}		}		return false;	}}#endif*//*// 以下代码为安卓原生代码,不需要解除注释//auto-gen-functionpublic boolean CheckAssetExist(String filePath){	android.content.res.AssetManager assetManager = getAssets();	try	{		java.io.InputStream inputStream = assetManager.open(filePath);		if(null != inputStream)		{			inputStream.close();			return true;		}	}	catch(java.io.IOException e)	{		//e.printStackTrace();	}	return false;}*/
 |