638 lines
24 KiB
C#
638 lines
24 KiB
C#
using System.Collections;
|
||
using Games.AnimationModule;
|
||
using Games.GlobeDefine;
|
||
using GCGame.Table;
|
||
using Module.Log;
|
||
using UnityEngine;
|
||
using Games.Events;
|
||
using System;
|
||
|
||
namespace Games.MountModule
|
||
{
|
||
public struct MountParam
|
||
{
|
||
//public const int Max_MountCollect_Count = 40;
|
||
//当前骑乘ID
|
||
public int AdvanceMountId { get; set; }
|
||
|
||
//双人
|
||
public int _MountState;
|
||
public ulong _LinkID;
|
||
|
||
private int m_AutoFlagMountID;
|
||
|
||
public int AutoFlagMountID
|
||
{
|
||
get { return m_AutoFlagMountID; }
|
||
set
|
||
{
|
||
m_AutoFlagMountID = value;
|
||
if (AdvanceMountPanelCtr.Instance) AdvanceMountPanelCtr.Instance.fashionPanel.RefreshAdvanceItemState();
|
||
}
|
||
}
|
||
|
||
public void CleanUp()
|
||
{
|
||
AdvanceMountId = -1;
|
||
AutoFlagMountID = -1;
|
||
}
|
||
|
||
public void SyncMoutCollectedFlag(GC_MOUNTCOLLECTED_FLAG data)
|
||
{
|
||
Module.Log.LogModule.DebugLog("SyncMoutCollectedFlag");
|
||
m_AutoFlagMountID = data.AutoMountFlag;
|
||
}
|
||
|
||
public bool GetMountCollectFlag(int nMountID)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
namespace Games.LogicObj
|
||
{
|
||
//////////////////////////////////////////////////////////////////////////
|
||
// 坐骑相关
|
||
//////////////////////////////////////////////////////////////////////////
|
||
|
||
public partial class Obj_OtherPlayer : Obj_Character
|
||
{
|
||
public GameEvent UnMountEventCallBack { get; set; }
|
||
public const int FashionTabId = 100000;
|
||
private const int _mountEffectId = 2003;
|
||
private int m_AdvanceMountID = -1;
|
||
|
||
public float mount_DeltaHeigh { get; private set; }
|
||
private AnimationLogic MountAnimaLogic;
|
||
|
||
public virtual int AdcaneMountId
|
||
{
|
||
get { return m_AdvanceMountID; }
|
||
set { m_AdvanceMountID = value; }
|
||
}
|
||
|
||
public ObjModelRecord mountModel = new ObjModelRecord();
|
||
public Tab_CharMount mountData { get; private set; }
|
||
private Transform _mountEffectPoint;
|
||
public Obj_OtherPlayer _MountClientObj;
|
||
|
||
public override Transform effectPoint
|
||
{
|
||
//
|
||
get { return _mountEffectPoint == null ? base.effectPoint : _mountEffectPoint; }
|
||
}
|
||
|
||
public override float DeltaHeight
|
||
{
|
||
get { return m_DeltaHeight + mount_DeltaHeigh; }
|
||
}
|
||
|
||
public float GetMountNameBoardHeight()
|
||
{
|
||
if (m_AdvanceMountID == -1) return 0;
|
||
var mountId = -1;
|
||
if (m_AdvanceMountID >= FashionTabId)
|
||
{
|
||
var advanceFashion = TableManager.GetAdvanceFashionByID(m_AdvanceMountID, 0);
|
||
if (advanceFashion == null) return 0;
|
||
mountId = advanceFashion.ModelId;
|
||
}
|
||
else
|
||
{
|
||
var advanceBase = TableManager.GetAdvanceBaseByID(m_AdvanceMountID, 0);
|
||
if (advanceBase == null) return 0;
|
||
mountId = advanceBase.ModelId;
|
||
}
|
||
|
||
var mountBase = TableManager.GetMountBaseByID(mountId, 0);
|
||
if (null == mountBase) return 0;
|
||
var mountTable = TableManager.GetCharMountByID(mountBase.ModelID, 0);
|
||
if (mountTable == null) return 0;
|
||
|
||
//司机乘客职业名称高度修正
|
||
float fFixHeight = 0;
|
||
if (DoubleRidingState == 2)
|
||
{
|
||
if (Profession >= 0 && Profession < mountTable.getHeadInfotCount())
|
||
fFixHeight = mountTable.GetHeadInfotbyIndex(Profession);
|
||
return fFixHeight;
|
||
}
|
||
else
|
||
{
|
||
if (Profession >= 0 && Profession < mountTable.getHeadInfoAddHeightCount())
|
||
fFixHeight = mountTable.GetHeadInfoAddHeightbyIndex(Profession);
|
||
return fFixHeight;
|
||
}
|
||
}
|
||
|
||
protected override void Awake()
|
||
{
|
||
base.Awake();
|
||
mountModel.onModelCreate += OnMountCreate;
|
||
mountModel.onModelDestroy += OnMountDestroy;
|
||
magicItem.onModelCreate += OnMagicCreate;
|
||
magicItem.onModelDestroy += OnMagicDestroy;
|
||
}
|
||
|
||
protected override void OnHideMaskUpdate(int previousMask)
|
||
{
|
||
base.OnHideMaskUpdate(previousMask);
|
||
var mount = GetHideMaskUpdateForPart(ModelPart.mount, previousMask);
|
||
if (mount > 0)
|
||
{
|
||
if (AdcaneMountId > GlobeVar.INVALID_ID)
|
||
RideMount(AdcaneMountId);
|
||
}
|
||
else if (mount < 0)
|
||
RemoveMount();
|
||
}
|
||
|
||
protected virtual void OnMountCreate(ObjPartRoot mountObj, object dataTable)
|
||
{
|
||
// 注:坐骑会绑定其他物体,必须立刻初始化
|
||
InitAttachmentMatInfo(ModelPart.mount, mountObj);
|
||
mountData = dataTable as Tab_CharMount;
|
||
var modelTransform = mountObj.transform;
|
||
modelTransform.SetParent(m_ObjTransform);
|
||
modelTransform.localPosition = Vector3.zero;
|
||
modelTransform.localRotation = Quaternion.identity;
|
||
modelTransform.localScale = Vector3.one;
|
||
if (ObjEffectLogic != null)
|
||
{
|
||
if (mountData != null)
|
||
{
|
||
var mountPoint = mountObj.transform.Find(mountData.BindPoint[0]);
|
||
//司机乘客绑定点
|
||
if (DoubleRidingState == 2)
|
||
{
|
||
mountPoint = mountObj.transform.Find(mountData.BindPoint[1]);
|
||
}
|
||
else
|
||
{
|
||
mountPoint = mountObj.transform.Find(mountData.BindPoint[0]);
|
||
}
|
||
|
||
if (mountPoint != null)
|
||
{
|
||
const string effectPointName = "MountEffectPoint";
|
||
var effectTrans = mountPoint.Find(effectPointName);
|
||
if (effectTrans == null)
|
||
{
|
||
// 额外增加一个特效挂点
|
||
var effectObj = new GameObject(effectPointName);
|
||
effectTrans = effectObj.transform;
|
||
effectTrans.SetParent(mountPoint);
|
||
// 不能继续自动校正方向 - 有些动画会导致重用时的坐骑挂点不处于初始位置
|
||
effectTrans.localPosition = Vector3.down * 0.99f;
|
||
effectTrans.localRotation = Quaternion.identity;
|
||
effectTrans.localScale = Vector3.one;
|
||
}
|
||
_mountEffectPoint = effectTrans;
|
||
}
|
||
}
|
||
ObjEffectLogic.ResetNormalEffectPoint();
|
||
//播放骑乘特效
|
||
ObjEffectLogic.PlayEffect(_mountEffectId);
|
||
}
|
||
mountObj.gameObject.name = "Model";
|
||
var layer = gameObject.layer;
|
||
mountObj.gameObject.SetLayerRecursively(layer);
|
||
// 注:原始mount已经被标记为摧毁,但是实际没有摧毁
|
||
// 因此playerModel还可以正常移动到新的坐骑节点
|
||
var playerModel = ModelNode.model;
|
||
if (playerModel != null)
|
||
SetModelBoundPoint(playerModel);
|
||
|
||
// var mountAnimTrans = transform.Find(_mountAnimObjName);
|
||
// if (mountAnimTrans == null)
|
||
// {
|
||
// var mountAnimObj = new GameObject(_mountAnimObjName);
|
||
// mountAnimTrans = mountAnimObj.transform;
|
||
// mountAnimTrans.SetParent(m_ObjTransform, false);
|
||
// }
|
||
MountAnimaLogic = CreateAnimLogic(mountObj);
|
||
if (CurObjAnimState == GameDefine_Globe.OBJ_ANIMSTATE.STATE_INVAILD)
|
||
CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR;
|
||
else
|
||
OnSwithObjAnimState(CurObjAnimState);
|
||
mount_DeltaHeigh = GetMountNameBoardHeight();
|
||
}
|
||
|
||
protected virtual void OnMountDestroy(ObjPartRoot mountObj)
|
||
{
|
||
// 注:需要维持先移除_mountEffectPoint引用,然后重置特效位置,最后摧毁_mountEffectPoint这个流程。
|
||
var mountPoint = _mountEffectPoint;
|
||
_mountEffectPoint = null;
|
||
if (ObjEffectLogic != null)
|
||
ObjEffectLogic.ResetNormalEffectPoint();
|
||
if (mountPoint != null)
|
||
{
|
||
Destroy(mountPoint.gameObject);
|
||
}
|
||
|
||
if (MountAnimaLogic != null)
|
||
{
|
||
DisableAnimLogic(MountAnimaLogic);
|
||
MountAnimaLogic = null;
|
||
}
|
||
// if (MountAnimaLogic != null)
|
||
// {
|
||
// MountAnimaLogic.enabled = false;
|
||
// MountAnimaLogic.Clear();
|
||
// MountAnimaLogic = null;
|
||
// }
|
||
|
||
DestroyAttachmentMatInfo(ModelPart.mount);
|
||
}
|
||
|
||
//骑乘相关-------------------------------------------------------------
|
||
public int DoubleRidingState = 0;
|
||
public UInt64 _LinkID = 0;
|
||
public virtual void GetMountData(GC_MOUNT_DATA data)
|
||
{
|
||
DoubleRidingState = data.State;
|
||
_LinkID = data.LinkId;
|
||
RideOrUnMount(data.MountID);
|
||
|
||
}
|
||
|
||
//是否双人坐骑乘客
|
||
public bool IsMountClient()
|
||
{
|
||
return Games.GlobeDefine.GlobeVar.IsGUIDValid(_LinkID) && DoubleRidingState == 2;
|
||
|
||
}
|
||
// 上马下马 统一接口
|
||
public virtual void RideOrUnMount(int nMountID)
|
||
{
|
||
Tab_MountBase mountBase = TableManager.GetMountBaseByID(nMountID, 0);
|
||
//#if UNITY_ANDROID
|
||
//当前其他玩家处于不可见状态时,记录 MountID
|
||
if (!m_bVisible && m_ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
|
||
{
|
||
m_AdvanceMountID = nMountID;
|
||
return;
|
||
}
|
||
|
||
StopAllCoroutines();
|
||
//双人坐骑,乘客
|
||
if (IsMountClient())
|
||
{
|
||
StartCoroutine(SetModelBoundPoint2(ModelNode.model, _LinkID));
|
||
return;
|
||
}
|
||
|
||
if (nMountID > 0)
|
||
RideMount(nMountID);
|
||
else
|
||
UnMount();
|
||
|
||
|
||
if (OrnamentFootPrintID != -1)
|
||
ReloadOrnamentFootPrint(nMountID > 0 ? true : false);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 骑马
|
||
/// </summary>
|
||
/// <param name="nMountID">模型ID</param>
|
||
protected virtual void RideMount(int nMountID)
|
||
{
|
||
|
||
m_AdvanceMountID = nMountID;
|
||
if (m_ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
|
||
GameManager.gameManager.PlayerDataPool.m_objMountParam.AdvanceMountId = nMountID;
|
||
// 注:这里保存当前坐骑id,但是变身状态下不加载模型
|
||
if (ForceUseModel == null)
|
||
{
|
||
//显示坐骑模型
|
||
if (IsShowModel(ModelPart.mount))
|
||
{
|
||
int mountId;
|
||
//当前坐骑是活动坐骑
|
||
if (m_AdvanceMountID >= FashionTabId)
|
||
{
|
||
var advanceFashion = TableManager.GetAdvanceFashionByID(m_AdvanceMountID, 0);
|
||
if (advanceFashion == null) return;
|
||
mountId = advanceFashion.ModelId;//活动坐骑模型
|
||
|
||
}
|
||
else
|
||
{
|
||
var advanceBase = TableManager.GetAdvanceBaseByID(m_AdvanceMountID, 0);
|
||
if (advanceBase == null) return;
|
||
mountId = advanceBase.ModelId;//基础坐骑模型
|
||
}
|
||
//骑乘基础
|
||
var mountBase = TableManager.GetMountBaseByID(mountId, 0);
|
||
if (null == mountBase)
|
||
{
|
||
LogModule.DebugLog("MountBase.txt has not Line ID=" + mountId);
|
||
return;
|
||
}
|
||
//骑乘表
|
||
var mountTable = TableManager.GetCharMountByID(mountBase.ModelID, 0);
|
||
if (mountTable == null)
|
||
{
|
||
LogModule.DebugLog("CharMount.txt has not Line ID=" + mountBase.ModelID);
|
||
return;
|
||
}
|
||
//哈希表参数
|
||
var hashParam = new Hashtable { { modelDataHashName, mountTable } };
|
||
//加载模型 (模型资源包,坐骑模型名字,哈希表参数)
|
||
mountModel.LoadModel(LoadAssetBundle.BUNDLE_PATH_MODEL, mountTable.MountModel, hashParam, null);
|
||
}
|
||
}
|
||
else
|
||
RemoveMount();//退出骑乘
|
||
}
|
||
/// <summary>
|
||
/// 设定模型绑定点
|
||
/// </summary>
|
||
/// <param name="modelObj">模型对象</param>
|
||
protected override void SetModelBoundPoint(ObjPartRoot modelObj)
|
||
{
|
||
Transform modelParent = null;
|
||
if (mountModel.model != null && mountData != null)
|
||
{
|
||
//司机乘客绑定点
|
||
if (DoubleRidingState == 0 || DoubleRidingState == 1)
|
||
{
|
||
modelParent = mountModel.model.transform.Find(mountData.BindPoint[0]);
|
||
}
|
||
if (DoubleRidingState == 2)
|
||
{
|
||
modelParent = mountModel.model.transform.Find(mountData.BindPoint[1]);
|
||
}
|
||
#if UNITY_EDITOR
|
||
if (modelParent == null)
|
||
{
|
||
if (DoubleRidingState == 2)
|
||
{
|
||
LogModule.ErrorLog(string.Format("无法获得坐骑{0}绑定位置{1}", mountData.Id, mountData.BindPoint[1]));
|
||
}
|
||
else
|
||
{
|
||
LogModule.ErrorLog(string.Format("无法获得坐骑{0}绑定位置{1}", mountData.Id, mountData.BindPoint[0]));
|
||
}
|
||
}
|
||
|
||
#endif
|
||
}
|
||
if (modelParent == null)
|
||
base.SetModelBoundPoint(modelObj);
|
||
//如果父节点本身匹配
|
||
else if (modelParent != modelObj.transform.parent)
|
||
{
|
||
var charModel = TableManager.GetCharModelByID(ModelID, 0);
|
||
var scale = charModel == null ? 1f : charModel.Scale;
|
||
scale *= ModelScale;
|
||
//玩家位置信息更新
|
||
var modelTransfrom = modelObj.transform;
|
||
modelTransfrom.SetParent(null);
|
||
modelTransfrom.localScale = m_ObjTransform.localScale * scale;
|
||
modelTransfrom.SetParent(modelParent);
|
||
modelTransfrom.localPosition = Vector3.zero;
|
||
modelTransfrom.localRotation = Quaternion.identity;
|
||
|
||
|
||
}
|
||
|
||
PlayMountPlayerAnima();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设定模型绑定点--乘客
|
||
/// </summary>
|
||
/// <param name="modelObj">模型对象</param>
|
||
private float _StartTime;
|
||
private float _WaitMaxTime = 30;
|
||
protected IEnumerator SetModelBoundPoint2(ObjPartRoot modelObj, ulong linkID)
|
||
{
|
||
_StartTime = Time.time;
|
||
Obj_OtherPlayer driverPlayer = null;
|
||
Transform modelParent = null;
|
||
|
||
while (true)
|
||
{
|
||
driverPlayer = Singleton<ObjManager>.Instance.FindOtherPlayerByGuid(linkID);
|
||
//等待司机模型
|
||
if (driverPlayer != null && driverPlayer.mountModel != null && driverPlayer.mountModel.model != null)
|
||
{
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
//等30s,实在没有则退出
|
||
if (Time.time - _StartTime > _WaitMaxTime)
|
||
{
|
||
yield break;
|
||
}
|
||
yield return null;
|
||
}
|
||
}
|
||
|
||
mountData = driverPlayer.mountData;
|
||
modelParent = driverPlayer.mountModel.model.transform.Find(driverPlayer.mountData.BindPoint[1]);
|
||
#if UNITY_EDITOR
|
||
if (modelParent == null)
|
||
{
|
||
if (DoubleRidingState == 2)
|
||
{
|
||
LogModule.ErrorLog(string.Format("无法获得坐骑{0}绑定位置{1}", mountData.Id, mountData.BindPoint[1]));
|
||
}
|
||
else
|
||
{
|
||
LogModule.ErrorLog(string.Format("无法获得坐骑{0}绑定位置{1}", mountData.Id, mountData.BindPoint[0]));
|
||
}
|
||
}
|
||
|
||
#endif
|
||
if (modelParent == null)
|
||
base.SetModelBoundPoint(modelObj);
|
||
//如果父节点本身匹配
|
||
else if (modelParent != modelObj.transform.parent)
|
||
{
|
||
var charModel = TableManager.GetCharModelByID(ModelID, 0);
|
||
var scale = charModel == null ? 1f : charModel.Scale;
|
||
scale *= ModelScale;
|
||
//玩家位置信息更新
|
||
var modelTransfrom = modelObj.transform;
|
||
modelTransfrom.SetParent(null);
|
||
modelTransfrom.localScale = m_ObjTransform.localScale * scale;
|
||
modelTransfrom.SetParent(modelParent);
|
||
modelTransfrom.localPosition = Vector3.zero;
|
||
modelTransfrom.localRotation = Quaternion.identity;
|
||
|
||
m_headUIObj.SetVirtualModelTarget(modelTransfrom);
|
||
driverPlayer._MountClientObj = this;
|
||
}
|
||
|
||
PlayMountPlayerAnima();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 下马
|
||
/// </summary>
|
||
protected virtual void UnMount()
|
||
{
|
||
m_AdvanceMountID = GlobeVar.INVALID_ID;
|
||
if (m_ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
|
||
GameManager.gameManager.PlayerDataPool.m_objMountParam.AdvanceMountId = m_AdvanceMountID;
|
||
RemoveMount();
|
||
}
|
||
/// <summary>
|
||
/// 删除坐骑
|
||
/// </summary>
|
||
protected virtual void RemoveMount()
|
||
{
|
||
mountData = null;
|
||
mount_DeltaHeigh = 0;
|
||
if (ModelNode.model != null)
|
||
base.SetModelBoundPoint(ModelNode.model);
|
||
if (IsMountClient())
|
||
{
|
||
m_headUIObj.SetVirtualModelTarget(null);
|
||
}
|
||
if (_MountClientObj != null)
|
||
{
|
||
_MountClientObj.m_headUIObj.SetVirtualModelTarget(null);
|
||
}
|
||
mountModel.RemoveModel();
|
||
if (!IsUsingSkill)
|
||
OnSwithObjAnimState(CurObjAnimState);
|
||
}
|
||
/// <summary>
|
||
/// 行走动画
|
||
/// </summary>
|
||
protected override void ProcessWalkAnimState()
|
||
{
|
||
if (MountAnimaLogic == null && !IsMountClient())
|
||
base.ProcessWalkAnimState();
|
||
else
|
||
PlayMountPlayerAnima();
|
||
}
|
||
/// <summary>
|
||
/// 空闲状态
|
||
/// </summary>
|
||
protected override void ProcessIdleAnimState()
|
||
{
|
||
if (MountAnimaLogic == null && !IsMountClient())
|
||
base.ProcessIdleAnimState();
|
||
else
|
||
PlayMountPlayerAnima();
|
||
}
|
||
/// <summary>
|
||
/// 播放骑乘玩家动画
|
||
/// </summary>
|
||
public void PlayMountPlayerAnima()
|
||
{
|
||
if (mountData != null)
|
||
{
|
||
switch (CurObjAnimState)
|
||
{
|
||
case GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR:
|
||
if (AnimLogic != null)
|
||
{
|
||
if (IsMountClient())
|
||
{
|
||
//播放乘客骑乘待机动画
|
||
AnimLogic.Play(mountData.IdlePlayerAnimationId[1]);
|
||
}
|
||
else
|
||
{
|
||
//播放司机骑乘待机动画
|
||
AnimLogic.Play(mountData.IdlePlayerAnimationId[0]);
|
||
}
|
||
}
|
||
|
||
if (MountAnimaLogic != null)
|
||
//站立
|
||
MountAnimaLogic.Play((int)CharacterDefine.CharacterAnimId.Stand);
|
||
break;
|
||
case GameDefine_Globe.OBJ_ANIMSTATE.STATE_WALK:
|
||
if (AnimLogic != null)
|
||
{
|
||
if (IsMountClient())
|
||
{
|
||
//播放乘客骑乘行走动画
|
||
AnimLogic.Play(mountData.RunPlayerAnimationId[1]);
|
||
}
|
||
else
|
||
{
|
||
//播放司机骑乘行走动画
|
||
AnimLogic.Play(mountData.RunPlayerAnimationId[0]);
|
||
}
|
||
}
|
||
|
||
if (MountAnimaLogic != null)
|
||
//步行
|
||
MountAnimaLogic.Play((int)CharacterDefine.CharacterAnimId.Walk);
|
||
break;
|
||
}
|
||
}
|
||
// 有MountData就不瞎折腾了
|
||
//int mountId;
|
||
//if (m_AdvanceMountID >= FashionTabId)
|
||
//{
|
||
// var advanceFashion = TableManager.GetAdvanceFashionByID(m_AdvanceMountID, 0);
|
||
// if (advanceFashion == null) return;
|
||
// mountId = advanceFashion.ModelId;
|
||
//}
|
||
//else
|
||
//{
|
||
// var advanceBase = TableManager.GetAdvanceBaseByID(m_AdvanceMountID, 0);
|
||
// if (advanceBase == null) return;
|
||
// mountId = advanceBase.ModelId;
|
||
//}
|
||
//var mountBase = TableManager.GetMountBaseByID(mountId, 0);
|
||
//if (mountBase == null)
|
||
// return;
|
||
//var mountTable = TableManager.GetCharMountByID(mountBase.ModelID, 0);
|
||
//if (mountTable == null)
|
||
// return;
|
||
}
|
||
/// <summary>
|
||
/// 删除模型
|
||
/// </summary>
|
||
public override void RemoveModels()
|
||
{
|
||
AdcaneMountId = GlobeVar.INVALID_ID;
|
||
mountModel.RemoveModel();
|
||
MagicID = GlobeVar.INVALID_ID;
|
||
magicItem.RemoveModel();
|
||
base.RemoveModels();
|
||
}
|
||
/// <summary>
|
||
/// 释放所有模型
|
||
/// </summary>
|
||
/// <param name="isDestroy">是否释放</param>
|
||
public override void ReleaseAllModel(bool isDestroy)
|
||
{
|
||
base.ReleaseAllModel(isDestroy);
|
||
mountModel.Release();
|
||
magicItem.Release();
|
||
if (isDestroy)
|
||
DestroyAttachmentMatInfo(ModelPart.mount);
|
||
}
|
||
/// <summary>
|
||
/// 删除目标
|
||
/// </summary>
|
||
protected override void OnObjDestroy()
|
||
{
|
||
mountModel.ReduceCount();
|
||
// 注:特殊处理法宝 - 不确定法宝是否会同时被删除;
|
||
// 如果是切换场景的流程,法宝将无法被回收,因此统一处理为手动摧毁流程;
|
||
if (magicItem.model != null)
|
||
{
|
||
magicItem.ReduceCount();
|
||
Destroy(magicItem.model);
|
||
}
|
||
|
||
base.OnObjDestroy();
|
||
}
|
||
|
||
|
||
}
|
||
} |