Files
JJBB/Assets/Project/Script/GameLogic/GameManager/ResourceManager.cs

555 lines
19 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
/********************************************************************************
* 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;
}
}