------------------------------------------------ --作者: gzg --日期: 2021-03-08 --文件: FGameObjectSoulEquip.lua --模块: FGameObjectSoulEquip --描述: 魂甲模型 --注意: 在类中的定义字段,不能赋值为nil,需要赋值为一个值. ------------------------------------------------ --引用 local LuaFGameObjectAnim = CS.Thousandto.Plugins.LuaType.LuaFGameObjectAnim; local ShaderManager = CS.Thousandto.Core.Asset.ShaderManager local WrapMode = CS.UnityEngine.WrapMode local SlotNameDefine = CS.Thousandto.Core.Asset.SlotNameDefine --在类中的定义字段,不能赋值为nil,需要赋值为一个值.默认可以为0 local FGameObjectSoulEquip = { --CS父类对象 _SuperObj_ = 0, --这里如果定义成员,这里必须 } --#region --类继承的固定模板 --构造函数 function FGameObjectSoulEquip:New(...) local _m = Utils.DeepCopy(self) _m._SuperObj_ = LuaFGameObjectAnim.Create(...); _m:_InitBindOverride_(); _m:_InitContent_(); Utils.BuildInheritRel(_m); return _m end --绑定Override的方法 function FGameObjectSoulEquip:_InitBindOverride_() --重载函数的重定义 self._SuperObj_.OnSwitchShaderDelegate = Utils.Handler(self.OnSwitchShader, self, nil, true); self._SuperObj_.OnGetBoneIndexDelegate = Utils.Handler(self.OnGetBoneIndex, self, nil, true); self._SuperObj_.OnTranslateAnimNameDelegate = Utils.Handler(self.OnTranslateAnimName, self, nil, true); self._SuperObj_.OnCheckAnimEnablePlayDelegate = Utils.Handler(self.OnCheckAnimEnablePlay, self, nil, true); self._SuperObj_.OnMountToParentDelegate = Utils.Handler(self.OnMountToParent, self, nil, true); self._SuperObj_.OnUnMountFromParentDelegate = Utils.Handler(self.OnUnMountFromParent, self, nil, true); self._SuperObj_.OnDestoryAfterDelegate = Utils.Handler(self.OnDestoryAfter, self, nil, true); --... end --初始化 function FGameObjectSoulEquip:_InitContent_() --todo end --卸载 function FGameObjectSoulEquip:Free() LuaFGameObjectAnim.Destroy(self._SuperObj_); Utils.Destory(self); end function FGameObjectSoulEquip:GetCSObj() return self._SuperObj_; end --#endregion --#region-- Overrider 继承父类函数 -- -- C#对象删除 -- -- FSkinBase -- FSkinPartBase function FGameObjectSoulEquip:OnDestoryAfter() Utils.Destory(self); end --/ --/ 获取骨骼索引 --/ --/ ModelTypeCode --/ int --/ function FGameObjectSoulEquip:OnGetBoneIndex( modelType, modelID) if (modelType == UnityUtils.GetObjct2Int(ModelTypeCode.Mount))then return modelID / 100; end return modelID; end --/ --/ 动作转换 --/ --/ string --/ WrapMode --/ string function FGameObjectSoulEquip:OnTranslateAnimName(animName,mode) if animName == AnimClipNameDefine.NormalRun or animName == AnimClipNameDefine.FastRun or animName == AnimClipNameDefine.FightRunFront or animName == AnimClipNameDefine.FightRunBack or animName == AnimClipNameDefine.FightRunLeft or animName == AnimClipNameDefine.FightRunRight then return AnimClipNameDefine.NormalRun,WrapMode.Loop; end return AnimClipNameDefine.NormalIdle,WrapMode.Loop; end --/ --/ 判断动作是否正在播放 --/ --/ string --/ bool function FGameObjectSoulEquip:OnCheckAnimEnablePlay(animName) local _lpi = self.LastPlayInfo; if (_lpi ~= nil and _lpi.WrapMode == WrapMode.Loop)then return _lpi.Name ~= animName; end return true; end --/ --/ 挂在到父类 --/ --/ FGameObject --/ bool function FGameObjectSoulEquip:OnMountToParent(parent) if (parent ~= nil and parent.RealTransform ~= nil and self.RealTransform ~= nil) then --首先把对象设置到根目录下 self:SetParent(parent.RootTransform, false); local wing = self.RealTransform; if (wing ~= nil) then --这里针对翅膀做特殊处理 local slot_Wing = parent:FindTransform(SlotNameDefine.Wing, true); wing.parent = slot_Wing; UnityUtils.ResetTransform(wing); wing.localPosition = Vector3(0, -0.1, 0); self.RealGameObject:SetActive(false); self.RealGameObject:SetActive(true); if (parent.LastPlayInfo ~= nil ) then parent.LastPlayInfo.WrapMode = WrapMode.Loop; self:PlayAnim(parent.LastPlayInfo, false); end end return true; end return false; end function FGameObjectSoulEquip:OnUnMountFromParent(parent) self:RealComeBackToRoot(); return true; end --#endregion return FGameObjectSoulEquip