From be0195af183689071e3a6ec51d503933957d395b Mon Sep 17 00:00:00 2001 From: gaoxin Date: Tue, 17 Nov 2020 18:31:11 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=88=98=E6=96=97=E3=80=91=E6=88=98?= =?UTF-8?q?=E6=96=97=E8=A1=A8=E7=8E=B0=E6=B7=BB=E5=8A=A0=E5=B0=84=E7=BA=BF?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=89=B9=E5=87=B6=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Battle/View/Unit/SkillCaster.lua | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/View/Unit/SkillCaster.lua b/Assets/ManagedResources/~Lua/Modules/Battle/View/Unit/SkillCaster.lua index 91b1e5095f..9cdd300a4b 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/View/Unit/SkillCaster.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/View/Unit/SkillCaster.lua @@ -348,6 +348,47 @@ function SkillCaster:CheckFullSceenSkill(combat, skill) end + -- 射线特效 + elseif combat.EffectType == 7 then + + local targets = skill:GetDirectTargets() + for _, target in ipairs(targets) do + local tv = self.owner.RootPanel.GetRoleView(target) + if tv then + local offset = combat.Offset and Vector3.New(combat.Offset[1], combat.Offset[2], 0) or Vector3.zero + + local sortingOrder = BattleManager.GetBattleSorting() + 40 + local go2 = BattleManager.LoadAsset(combat.Bullet, sortingOrder) + go2.transform:SetParent(self.owner.GameObject.transform.parent) + + + -- 检测特效旋转 + if self:CheckRotate(go2, combat.Orientation) then + offset = -offset + end + go2.transform.localPosition = Vector3.zero + go2.transform.anchoredPosition = offset + + -- 特效旋转补正 + local fixRotate = self:CalRoleRotate(self.owner, tv) + go2.transform.localEulerAngles = go2.transform.localEulerAngles + fixRotate + + -- 缩放 + go2.transform:SetParent(self.effectRoot.transform) + go2:SetActive(true) + local dis = self:CheckRoleDistance(self.effectRoot, self.owner, tv) + local sl = dis/1000 + + + go2.transform.localScale = Vector3.New(1, sl, 1) + + + -- + BattleManager.AddDelayRecycleRes(combat.Bullet, go2, combat.KeyFrame/1000) + end + + end + end @@ -358,6 +399,36 @@ function SkillCaster:CheckFullSceenSkill(combat, skill) end) end +function SkillCaster:CalRoleRotate(baseRole, targetRole) + + local basePos = baseRole.GameObject.transform.position + local targetPos = targetRole.GameObject.transform.position + + local deltaX = targetPos.x - basePos.x + local deltaY = targetPos.y - basePos.y + + local deltaR = math.atan(math.abs(deltaX/deltaY))/math.pi*180 + + if baseRole.camp == 0 and deltaX > 0 then + return Vector3.New(0, 0, -deltaR) + elseif baseRole.camp == 0 and deltaX < 0 then + return Vector3.New(0, 0, deltaR) + elseif baseRole.camp == 1 and deltaX < 0 then + return Vector3.New(0, 0, -deltaR) + elseif baseRole.camp == 1 and deltaX > 0 then + return Vector3.New(0, 0, deltaR) + end + return Vector3.zero +end + + +function SkillCaster:CheckRoleDistance(baseRoot, role1, role2) + local pos1 = baseRoot.transform:InverseTransformPoint(role1.GameObject.transform.position) + local pos2 = baseRoot.transform:InverseTransformPoint(role2.GameObject.transform.position) + local dis = math.distanceXY(pos1, pos2) + return dis +end + -- 检测前摇技能释放 function SkillCaster:CheckSkillForoleEffect(combat, skill) if not skill then