From a30752621360069d9be1c0e1aa73219aac2caa1e Mon Sep 17 00:00:00 2001 From: Ino Date: Thu, 20 Feb 2025 15:04:31 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=8A=A4=20=EA=B3=A8?= =?UTF-8?q?=EB=A0=98=20=EC=8A=A4=ED=82=AC2=20=EC=9D=B8=EB=94=94=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ice_Golem_Animations_Check.controller | 2 +- .../Mobs/FieldBoss/Mega_Ice_Golem.prefab | 10 +- .../Obj/IceGolem_Skill2_Indicator.prefab | 117 ++++++++++++++++++ .../Obj/IceGolem_Skill2_Indicator.prefab.meta | 7 ++ .../Character/Mob/Boss/Boss_IceGolem.cs | 63 +++++++--- Assets/Script/Character/Mob/BossMobActor.cs | 9 +- Assets/Script/Character/Mob/MobActor.cs | 7 +- 7 files changed, 187 insertions(+), 28 deletions(-) create mode 100644 Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab create mode 100644 Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab.meta diff --git a/Assets/ResWork/Suriyun/Monster Pack Ice/Animations/Ice Golem/Ice_Golem_Animations_Check.controller b/Assets/ResWork/Suriyun/Monster Pack Ice/Animations/Ice Golem/Ice_Golem_Animations_Check.controller index 4869bcd05..c5bb2de5c 100644 --- a/Assets/ResWork/Suriyun/Monster Pack Ice/Animations/Ice Golem/Ice_Golem_Animations_Check.controller +++ b/Assets/ResWork/Suriyun/Monster Pack Ice/Animations/Ice Golem/Ice_Golem_Animations_Check.controller @@ -309,7 +309,7 @@ AnimatorState: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: boss_skill2runattack - m_Speed: 1 + m_Speed: 5 m_CycleOffset: 0 m_Transitions: [] m_StateMachineBehaviours: [] diff --git a/Assets/Res_Addr/Mobs/FieldBoss/Mega_Ice_Golem.prefab b/Assets/Res_Addr/Mobs/FieldBoss/Mega_Ice_Golem.prefab index 1fe67de0f..e16fac183 100644 --- a/Assets/Res_Addr/Mobs/FieldBoss/Mega_Ice_Golem.prefab +++ b/Assets/Res_Addr/Mobs/FieldBoss/Mega_Ice_Golem.prefab @@ -506,13 +506,19 @@ MonoBehaviour: MagicID: 0 HealCount: 0 HealRate: 0.1 - list_indicator: - - {fileID: 0} Skill1CoolTime: 8 Skill1TargetRange: 2 Skill1Speed: 5 Skill1Dmg: 3.5 Skill1StunTime: 2 + Skill1Indicator: IceGolem_Skill1_Indicator + bbbbbbbbbbbbbbbbbbbbbbbb: 0 + Skill2CoolTime: 10 + Skill2Speed: 7 + Skill2Dmg: 3.5 + Skill2KnockBackTime: 0.3 + Skill2StunTime: 2 + Skill2Indicator: IceGolem_Skill2_Indicator --- !u!95 &6834610517749107232 Animator: serializedVersion: 5 diff --git a/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab b/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab new file mode 100644 index 000000000..61a067813 --- /dev/null +++ b/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab @@ -0,0 +1,117 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &821061129531636761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2201136656505196193} + m_Layer: 3 + m_Name: IceGolem_Skill2_Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2201136656505196193 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821061129531636761} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6375824511339138443} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5389208046211158943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6375824511339138443} + - component: {fileID: 292154521008100957} + - component: {fileID: 3775451288762826441} + m_Layer: 3 + m_Name: Indicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6375824511339138443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389208046211158943} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0, z: 9} + m_LocalScale: {x: 1.8, y: 18, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2201136656505196193} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &292154521008100957 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389208046211158943} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3775451288762826441 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5389208046211158943} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3e1c80888ebc582469572ddac13cc967, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab.meta b/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab.meta new file mode 100644 index 000000000..a952ae283 --- /dev/null +++ b/Assets/Res_Addr/Obj/IceGolem_Skill2_Indicator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4edacb45629b78049b35815b07cd2d99 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Character/Mob/Boss/Boss_IceGolem.cs b/Assets/Script/Character/Mob/Boss/Boss_IceGolem.cs index 5ee51f4f5..1d507c73c 100644 --- a/Assets/Script/Character/Mob/Boss/Boss_IceGolem.cs +++ b/Assets/Script/Character/Mob/Boss/Boss_IceGolem.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using UnityEngine; @@ -20,7 +21,7 @@ public class Boss_IceGolem : BossMobActor [Header("스킬2 쿨타임")] public float Skill2CoolTime = 10f; [Header("스킬2 달려가는 속도")] - public float Skill2Speed = 5f; + public float Skill2Speed = 7f; [Header("스킬2 데미지")] public float Skill2Dmg = 3.5f; [Header("스킬2 넉백 시간")] @@ -33,10 +34,8 @@ public class Boss_IceGolem : BossMobActor public override void Set(bool isEnemy, Actor owner, ServerData sdata, int _id, bool _stop, bool _ui = false) { base.Set(isEnemy, owner, sdata, _id, _stop, _ui); - if (DSUtil.CheckNull(go_indicator1)) - IndicatorInfo.Ins.Make_Indicator(Skill1Indicator, go => { go_indicator1 = go; }); - //if (DSUtil.CheckNull(go_indicator2)) - // IndicatorInfo.Ins.Make_Indicator(Skill2Indicator, go => { go_indicator2 = go; }); + if (DSUtil.CheckNull(go_indicator1)) IndicatorInfo.Ins.Make_Indicator(Skill1Indicator, go => { go_indicator1 = go; }); + if (DSUtil.CheckNull(go_indicator2)) IndicatorInfo.Ins.Make_Indicator(Skill2Indicator, go => { go_indicator2 = go; }); CoolTime_Skill1 = 1f; CoolTime_Skill1 = 2f; @@ -54,40 +53,66 @@ public class Boss_IceGolem : BossMobActor base.Update(); if (IsDead() || IsStop) return; - if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill) + if (isTarget) { - Run_byUseSkill(Skill1TargetRange, Skill1Speed, success => + if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill) { - AnimationPlay("boss_skill1start"); - go_indicator1.transform.position = Get_position(); - go_indicator1.SetActive(true); - Jump(0.5f, 3f, 2f, 5f, () => + Run_byUseSkill(Skill1TargetRange, Skill1Speed, success => { - Init(true, false); - AnimationPlay("boss_skill1attack"); + AnimationPlay("boss_skill1start"); + go_indicator1.transform.position = Get_position(); + go_indicator1.SetActive(true); + Jump(0.5f, 3f, 2f, 5f, () => + { + go_indicator1.SetActive(false); + Init(true, false); + AnimationPlay("boss_skill1attack"); + }); }); - }); + } + else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill) + StartCoroutine(Co_Skill2()); } - else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill) - StartCoroutine(Co_Skill2()); } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2start"); + go_indicator2.SetActive(true); + go_indicator2.transform.position = Get_position(); + if (isTarget) go_indicator2.transform.LookAt(m_Target.transform); float t = 0f; while (t < 3f) { yield return null; t += Time.deltaTime; - if (isTarget) transform.LookAt(m_Target.transform); + if (isTarget) + { + transform.LookAt(m_Target.transform); + go_indicator2.transform.LookAt(m_Target.transform); + } else break; } + go_indicator2.SetActive(false); - AnimationPlay("boss_skill2runattack"); - Run_byUseSkill(0f, 7f, success => { Init(false, true); }); + if (isTarget) + { + AnimationPlay("boss_skill2runattack"); + transform.LookAt(m_Target.transform); + m_NavMeshAgent.stoppingDistance = 0.1f; + Set_Path(Get_PositionFoward(18f)); // IceGolem_Skill2_Indicator 길이 + while (!Complete_Destination()) + { + m_NavMeshAgent.speed = Skill2Speed; + yield return null; + } + m_NavMeshAgent.stoppingDistance = m_NavStopDistance; + m_NavMeshAgent.speed = Get_MoveSpeed(); + } + + Init(false, true); } protected override float Get_Skill1Dmg() { return Skill1Dmg; } diff --git a/Assets/Script/Character/Mob/BossMobActor.cs b/Assets/Script/Character/Mob/BossMobActor.cs index ad03bcf7d..d98be45cb 100644 --- a/Assets/Script/Character/Mob/BossMobActor.cs +++ b/Assets/Script/Character/Mob/BossMobActor.cs @@ -38,16 +38,19 @@ public class BossMobActor : MobActor protected virtual void Init(bool initSkill1CoolTime, bool initSkill2CoolTime) { - Change_MobStatus(eMobStatus.Attack); + Change_MobStatus(isTarget ? eMobStatus.Attack : eMobStatus.PatrolWait); + UseSkillIndex = 0; + } + void InActiveAllIndicator() + { if (!DSUtil.CheckNull(go_indicator1)) go_indicator1.SetActive(false); if (!DSUtil.CheckNull(go_indicator2)) go_indicator2.SetActive(false); - UseSkillIndex = 0; } public override void Del_Target(bool forcedel = false) { base.Del_Target(forcedel); - Init(false, false); + InActiveAllIndicator(); } public override void Get_Damage(DamageInfo _dinfo) diff --git a/Assets/Script/Character/Mob/MobActor.cs b/Assets/Script/Character/Mob/MobActor.cs index cb2ae5f8b..aff2a2d9a 100644 --- a/Assets/Script/Character/Mob/MobActor.cs +++ b/Assets/Script/Character/Mob/MobActor.cs @@ -64,6 +64,7 @@ public class MobActor : Actor transform.localScale = m_MonsterTableData.f_DefaultScale * Vector3.one; m_AttackType = m_MonsterTableData.e_AttackType; + m_NavStopDistance = m_MonsterTableData.f_BaseATKRange; b_IsFirstAttack = m_MonsterTableData.b_IsFirstAttack; f_BaseChaseRange = m_MonsterTableData.f_BaseChaseRange; @@ -190,7 +191,7 @@ public class MobActor : Actor } else { - if (!isPlaying(eAnim.Attack, eAnim.Attack2, eAnim.Attack3) && Vector3.Distance(m_Target.Get_position(), Get_position()) > m_MonsterTableData.f_BaseATKRange + 0.5f) + if (!isPlaying(eAnim.Attack, eAnim.Attack2, eAnim.Attack3) && Vector3.Distance(m_Target.Get_position(), Get_position()) > m_NavStopDistance) Change_MobStatus(eMobStatus.Chase); else if (m_attackCoolTime <= 0f) { @@ -274,7 +275,7 @@ public class MobActor : Actor m_NavMeshAgent.stoppingDistance = 0.1f; break; case eMobStatus.Battle: - m_NavMeshAgent.stoppingDistance = m_MonsterTableData.f_BaseATKRange; + m_NavMeshAgent.stoppingDistance = m_NavStopDistance; FindNextTarget(10000f); break; case eMobStatus.BattleStop: @@ -302,7 +303,7 @@ public class MobActor : Actor void Check_Patrol() { // 플레이어가 추적 범위 밖으로 나가면 순찰 상태로 전환 - if (MobStatus != eMobStatus.PatrolRot && !isPlaying(eAnim.Attack, eAnim.Attack2, eAnim.Attack3) && + if (MobStatus != eMobStatus.PatrolRot && !isPlaying(eAnim.Attack, eAnim.Skill) && (!isTarget || Vector3.Distance(OriginalPos, Get_position()) > m_MonsterTableData.f_BaseChaseRange)) Change_MobStatus(eMobStatus.BattleStop); }