Files
JJBB/Assets/Project/Script/GameLogic/GameManager/ResourceManager.cs
2024-08-23 15:49:34 +08:00

555 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
* 文件名: ResourceLoader.cs
* 全路径: \Script\GameLogic\GameManager\ResourceLoader.cs
* 创建人: 李嘉
* 创建时间2014-01-20
*
* 功能说明:游戏的资源加载器,各种资源加载接口都在此
* 包括同步和异步加载等
* 并附加资源加载统计
* 修改记录:
*********************************************************************************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Games.LogicObj;
using Module.Log;
public class ResourceManager : MonoBehaviour
{
// private static Dictionary<string, int> m_ResourceInstantCounter = null;
// /// <summary>
// /// 资源动态加载记数,只需传入资源路径即可
// /// </summary>
// /// <param name="szKey"></param>
// private static void IncreaseInstantResource(string szKey)
// {
// if (null == m_ResourceInstantCounter)
// {
// m_ResourceInstantCounter = new Dictionary<string, int>();
// }
//
// if (true == m_ResourceInstantCounter.ContainsKey(szKey))
// {
// m_ResourceInstantCounter[szKey] += 1;
// }
// else
// {
// m_ResourceInstantCounter.Add(szKey, 1);
// }
// }
// /// <summary>
// /// 资源记数-1如果发现为0则从统计表中删除
// /// </summary>
// /// <param name="szKey"></param>
// private static void DecreaseInstantResource(string szKey)
// {
// if (null == szKey || szKey.Length <= 0)
// {
// return;
// }
//
// if (null != m_ResourceInstantCounter && m_ResourceInstantCounter.ContainsKey(szKey))
// {
// m_ResourceInstantCounter[szKey]--;
// if (m_ResourceInstantCounter[szKey] <= 0)
// {
// m_ResourceInstantCounter.Remove(szKey);
// }
// }
// }
// /// <summary>
// /// 重置资源动态加载计数器
// /// </summary>
// public static void ResetResourceLoadCounter()
// {
// if (null != m_ResourceInstantCounter)
// {
// m_ResourceInstantCounter.Clear();
// }
// }
// private static List<string> m_ResourceLoadCounter = null; //只调用Resource.Load但是没有Instant的资源
// private static void IncreaseResourceLoadCount(string szKey)
// {
// if (null == m_ResourceLoadCounter)
// {
// m_ResourceLoadCounter = new List<string>();
// }
//
// if (!m_ResourceLoadCounter.Contains(szKey))
// {
// m_ResourceLoadCounter.Add(szKey);
// }
// }
// /// <summary>
// /// 向内存中加载一个资源
// /// 因为只会创建内存数据所以不会调用instantiate方法
// /// 此方法不支持异步加载
// /// 但是失败会输出日志
// /// </summary>
// /// <param name="resPath"></param>
// /// <returns></returns>
// public static UnityEngine.Object LoadResource(string resPath, System.Type systemTypeInstance = null)
// {
// UnityEngine.Object resObject = null;
// if (null == systemTypeInstance)
// {
// resObject = Resources.Load(resPath);
// }
// else
// {
// resObject = Resources.Load(resPath, systemTypeInstance);
// }
//
// if (null != resObject)
// {
// IncreaseResourceLoadCount(resPath);
// }
//
// return resObject;
// }
// /// <summary>
// /// 销毁GameObject,记数-1不会自动置空
// /// </summary>
// /// <param name="obj"></param>
// /// <param name="bImmediate"></param>
// public static void DestroyResource(GameObject obj, bool bImmediate = false)
// {
// if (null != obj)
// {
// string szName = obj.name;
// if (false == bImmediate)
// {
// GameObject.Destroy(obj);
//
// //清理一次无用资源
// //Resources.UnloadUnusedAssets();
// }
// else
// {
// GameObject.DestroyImmediate(obj);
// }
//
// //减少记数
// //DecreaseInstantResource(szName);
// }
// }
/// <summary>
/// 销毁GameObject,记数-1会自动置空
/// </summary>
/// <param name="obj"></param>
/// <param name="bImmediate"></param>
public static void DestroyResource(ref GameObject obj, bool bImmediate = false)
{
if (null != obj)
{
string szName = obj.name;
if (false == bImmediate)
{
GameObject.Destroy(obj);
//清理一次无用资源
//Resources.UnloadUnusedAssets();
}
else
{
GameObject.DestroyImmediate(obj);
}
obj = null;
//减少记数
//DecreaseInstantResource(szName);
}
}
//根据资源动态创建一个GameObject
/// <summary>
/// 在场景中创建一个GameObject
/// 加载成功或失败都会输出日志
/// 此方法不支持异步加载
/// </summary>
/// <param name="resPath">资源路径</param>
/// <param name="szKey">GameObject的名称主要用作ObjPools的Key值</param>
/// <returns></returns>
public static GameObject InstantiateResource(string resPath, string szKey = default(string))
{
var prefab = CommonUtility.LoadFromResources<GameObject>(resPath);
if (prefab == null)
return null;
else
{
var instance = Instantiate(prefab);
if (!string.IsNullOrEmpty(szKey))
instance.name = szKey;
return instance;
}
// resObject = null == systemTypeInstance ? Resources.Load(resPath) : Resources.Load(resPath, systemTypeInstance);
// if (null != resObject)
// {
// UnityEngine.Object modelObject = (GameObject)GameObject.Instantiate(resObject);
// if (null == modelObject)
// {
// return null;
// }
// else
// {
// IncreaseInstantResource(szKey);
//
// //如果没有传入名字则使用Object的默认名字
// if (szKey.Length > 0)
// {
// modelObject.name = szKey;
// }
// }
//
// return modelObject;
// }
//
// return null;
}
private static void OnLoadBackCameraOver(GameObject resObj, object param)
{
if (null == resObj)
{
return;
}
GameObject newElement = GameObject.Instantiate(resObj) as GameObject;
}
/// <summary>
/// 加载UI
/// </summary>
/// <param name="strUIName">UI名字</param>
/// <param name="nLevel">UI级别</param>
/// <returns></returns>
public static GameObject LoadUIPrefab(string strUIName, int nUILevel)
{
if (null == GameManager.gameManager)
{
LogModule.ErrorLog("can not find gamemanager");
return null;
}
if (null == GameManager.gameManager.ActiveScene)
{
LogModule.ErrorLog("can not find ActiveScene");
return null;
}
GameObject uiRoot = GameManager.gameManager.ActiveScene.UIRoot;
if (null == uiRoot)
{
LogModule.ErrorLog("can not find uiroot");
return null;
}
string strPath = "Prefab/UI/" + strUIName;
GameObject newObj = InstantiateResource(strPath, strUIName) as GameObject;
if (newObj)
{
newObj.transform.parent = uiRoot.transform;
newObj.transform.localPosition = Vector3.zero;
newObj.transform.localScale = Vector3.one;
if (MainUILogic.Instance() != null)
{
MainUILogic.Instance().DicUI.Add(strUIName, newObj);
MainUILogic.Instance().DicUILevel.Add(strUIName, nUILevel);
}
}
return newObj;
}
public delegate void LoadHeadInfoDelegate(GameObject objHeadInfo);
/// <summary>
/// 加载头顶信息Prefab
/// </summary>
/// <param name="nParent">父节点</param>
/// <param name="strPrefabName">Prefab名字</param>
/// <returns></returns>
//public static void LoadHeadInfoPrefab(UIPathData uiData, GameObject nParent, string strPrefabName, LoadHeadInfoDelegate delFun)
//{
// if (null == GameManager.gameManager.ActiveScene ||
// null == GameManager.gameManager.ActiveScene.NameBoardPool)
// {
// LogModule.ErrorLog("scene is not init when load headinfo");
// return;
// }
// Hashtable hashParam = new Hashtable();
// hashParam.Add("delFun", delFun);
// hashParam.Add("nParent", nParent);
// LoadAssetBundle.Instance.LoadUI(uiData.path, uiData.name, OnLoadHead, hashParam);
//}
public static void OnLoadHead(string modelName, GameObject resObj, Hashtable hashParam)
{
object parent = null;
object delFun = null;
if (hashParam.Contains("nParent"))
{
parent = (object)hashParam["nParent"];
}
if (hashParam.Contains("delFun"))
{
delFun = (object)hashParam["delFun"];
}
resObj = GameObject.Instantiate(resObj) as GameObject;
OnLoadHeadInfo(resObj,parent,delFun);
}
static void OnLoadHeadInfo(GameObject resObj, object parent, object fun)
{
if (null != resObj)
{
if (null != GameManager.gameManager.ActiveScene.NameBoardRoot)
{
resObj.transform.parent = GameManager.gameManager.ActiveScene.NameBoardRoot.transform;
}
resObj.transform.localPosition = Vector3.zero;
resObj.transform.localRotation = Quaternion.LookRotation(Vector3.forward);
resObj.transform.localScale = Vector3.one;
BillBoard billboard = resObj.GetComponent<BillBoard>();
if (null == billboard)
{
billboard = resObj.AddComponent<BillBoard>();
if (null != billboard)
{
billboard.BindObj = parent as GameObject;
}
}
else
{
billboard.BindObj = parent as GameObject;
billboard.enabled = true;
}
//由于会复用,所以需要重新设置名字版的高度修正
if (null != billboard && null != billboard.BindObj)
{
Obj_OtherPlayer objOtherPlayer = billboard.BindObj.GetComponent<Obj_OtherPlayer>();
if (null != objOtherPlayer)
{
billboard.fDeltaHeight = objOtherPlayer.DeltaHeight + objOtherPlayer.GetMountNameBoardHeight();
}
else
{
Obj_Character objCharacter = billboard.BindObj.GetComponent<Obj_Character>();
if (null != objCharacter)
{
billboard.fDeltaHeight = objCharacter.DeltaHeight;
}
}
}
LoadHeadInfoDelegate delFun = fun as LoadHeadInfoDelegate;
if (null != delFun) delFun(resObj);
}
else
{
LogModule.ErrorLog("load headinfo fail");
}
}
//public static void UnLoadHeadInfoPrefab(GameObject headInfo)
//{
// if (null == headInfo)
// {
// return;
// }
// BillBoard billboard = headInfo.GetComponent<BillBoard>();
// if (null != billboard)
// {
// billboard.BindObj = null;
// billboard.enabled = false;
// }
// //在池子中置为未使用
// if (null != GameManager.gameManager.ActiveScene &&
// null != GameManager.gameManager.ActiveScene.NameBoardPool)
// {
// GameManager.gameManager.ActiveScene.NameBoardPool.Remove(headInfo);
// }
//}
public static GameObject LoadTitleInvestitiveItem(GameObject TitleInvestitiveGrid, int nTitleInvestitiveItemIndex)
{
string strPath = "Prefab/UI/TitleInvestitiveItem";
string strPrefabName = "";
if (nTitleInvestitiveItemIndex < 10)
{
strPrefabName = "TitleInvestitiveItem" + "0" + nTitleInvestitiveItemIndex.ToString();
}
else
{
strPrefabName = "TitleInvestitiveItem" + nTitleInvestitiveItemIndex.ToString();
}
GameObject TitleInvestitiveItem = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != TitleInvestitiveItem)
{
if (null != TitleInvestitiveGrid)
TitleInvestitiveItem.transform.parent = TitleInvestitiveGrid.transform;
TitleInvestitiveItem.transform.localPosition = Vector3.zero;
TitleInvestitiveItem.transform.localScale = Vector3.one;
TitleInvestitiveItem.name = strPrefabName;
}
return TitleInvestitiveItem;
}
public static GameObject LoadLastSpeakerItem(GameObject LastSpeakerGrid, int nLastSpeakerItemIndex)
{
string strPath = "Prefab/UI/LastSpeakerItem";
string strPrefabName = "";
if (nLastSpeakerItemIndex < 10)
{
strPrefabName = "LastSpeakerItem" + "0" + nLastSpeakerItemIndex.ToString();
}
else
{
strPrefabName = "LastSpeakerItem" + nLastSpeakerItemIndex.ToString();
}
GameObject LastSpeakerItem = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != LastSpeakerItem)
{
if (null != LastSpeakerGrid)
LastSpeakerItem.transform.parent = LastSpeakerGrid.transform;
LastSpeakerItem.transform.localPosition = Vector3.zero;
LastSpeakerItem.transform.localScale = Vector3.one;
LastSpeakerItem.name = strPrefabName;
}
return LastSpeakerItem;
}
public static GameObject LoadChatLink(GameObject LinkRoot)
{
string strPath = "Prefab/UI/ChatLink";
string strPrefabName = "ChatLink";
GameObject ChatLink = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != ChatLink)
{
if (null != LinkRoot)
ChatLink.transform.parent = LinkRoot.transform;
ChatLink.transform.localPosition = Vector3.zero;
ChatLink.transform.localScale = Vector3.one;
ChatLink.name = strPrefabName;
}
return ChatLink;
}
public static GameObject LoadEmotionItem(GameObject ChatInfoEmotion)
{
string strPath = "Prefab/UI/EmotionItem";
string strPrefabName = "EmotionItem";
GameObject EmotionItem = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != EmotionItem)
{
if (null != ChatInfoEmotion)
EmotionItem.transform.parent = ChatInfoEmotion.transform;
EmotionItem.transform.localPosition = Vector3.zero;
EmotionItem.transform.localScale = Vector3.one;
EmotionItem.name = strPrefabName;
}
return EmotionItem;
}
public static GameObject LoadEmotionItem(string emotionPath)
{
string strPath = "Prefab/UI/Motion/" + emotionPath;
string strPrefabName = "EmotionItem";
GameObject EmotionItem = InstantiateResource(strPath, strPrefabName) as GameObject;
return EmotionItem;
}
public static GameObject LoadChatVIPIcon(GameObject ChatVIPIcon)
{
string strPath = "Prefab/UI/ChatVIPIcon";
string strPrefabName = "ChatVIPIcon";
GameObject EmotionItem = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != EmotionItem)
{
if (null != ChatVIPIcon)
EmotionItem.transform.parent = ChatVIPIcon.transform;
EmotionItem.transform.localPosition = Vector3.zero;
EmotionItem.transform.localScale = Vector3.one;
EmotionItem.name = strPrefabName;
}
return EmotionItem;
}
public static GameObject LoadMessageIcon(GameObject detailBandRoot)
{
string strPath = "Prefab/UI/MessageIcon";
string strPrefabName = "MessageIcon";
GameObject MessageIcon = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != MessageIcon)
{
if (null != detailBandRoot)
MessageIcon.transform.parent = detailBandRoot.transform;
MessageIcon.transform.localPosition = Vector3.zero;
MessageIcon.transform.localScale = Vector3.one;
MessageIcon.name = strPrefabName;
}
return MessageIcon;
}
public static GameObject LoadFastReplyItem(GameObject FastReplyGrid, int nFastReplyItemIndex)
{
string strPath = "Prefab/UI/FastReplyItem";
string strPrefabName = "";
if (nFastReplyItemIndex < 10)
{
strPrefabName = "FastReplyItem" + "0" + nFastReplyItemIndex.ToString();
}
else
{
strPrefabName = "FastReplyItem" + nFastReplyItemIndex.ToString();
}
GameObject FastReplyItem = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != FastReplyItem)
{
if (null != FastReplyGrid)
FastReplyItem.transform.parent = FastReplyGrid.transform;
FastReplyItem.transform.localPosition = Vector3.zero;
FastReplyItem.transform.localScale = Vector3.one;
FastReplyItem.name = strPrefabName;
}
return FastReplyItem;
}
public static GameObject LoadEmotionButton(GameObject EmotionGrid, int nEmotionButtonIndex)
{
string strPath = "Prefab/UI/EmotionButton";
string strPrefabName = "";
if (nEmotionButtonIndex < 10)
{
strPrefabName = "EmotionButton" + "0" + nEmotionButtonIndex.ToString();
}
else
{
strPrefabName = "EmotionButton" + nEmotionButtonIndex.ToString();
}
GameObject EmotionButton = InstantiateResource(strPath, strPrefabName) as GameObject;
if (null != EmotionButton)
{
if (null != EmotionGrid)
EmotionButton.transform.parent = EmotionGrid.transform;
EmotionButton.transform.localPosition = Vector3.zero;
EmotionButton.transform.localScale = Vector3.one;
EmotionButton.name = strPrefabName;
}
return EmotionButton;
}
}