아이스 골렘 스킬2 인디케이터 추가

This commit is contained in:
Ino 2025-02-20 15:04:31 +09:00
parent 43470cdd2b
commit a307526213
7 changed files with 187 additions and 28 deletions

View File

@ -309,7 +309,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: boss_skill2runattack m_Name: boss_skill2runattack
m_Speed: 1 m_Speed: 5
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: [] m_Transitions: []
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []

View File

@ -506,13 +506,19 @@ MonoBehaviour:
MagicID: 0 MagicID: 0
HealCount: 0 HealCount: 0
HealRate: 0.1 HealRate: 0.1
list_indicator:
- {fileID: 0}
Skill1CoolTime: 8 Skill1CoolTime: 8
Skill1TargetRange: 2 Skill1TargetRange: 2
Skill1Speed: 5 Skill1Speed: 5
Skill1Dmg: 3.5 Skill1Dmg: 3.5
Skill1StunTime: 2 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 --- !u!95 &6834610517749107232
Animator: Animator:
serializedVersion: 5 serializedVersion: 5

View File

@ -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}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4edacb45629b78049b35815b07cd2d99
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,3 +1,4 @@
using System;
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
@ -20,7 +21,7 @@ public class Boss_IceGolem : BossMobActor
[Header("스킬2 쿨타임")] [Header("스킬2 쿨타임")]
public float Skill2CoolTime = 10f; public float Skill2CoolTime = 10f;
[Header("스킬2 달려가는 속도")] [Header("스킬2 달려가는 속도")]
public float Skill2Speed = 5f; public float Skill2Speed = 7f;
[Header("스킬2 데미지")] [Header("스킬2 데미지")]
public float Skill2Dmg = 3.5f; public float Skill2Dmg = 3.5f;
[Header("스킬2 넉백 시간")] [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) 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); base.Set(isEnemy, owner, sdata, _id, _stop, _ui);
if (DSUtil.CheckNull(go_indicator1)) if (DSUtil.CheckNull(go_indicator1)) IndicatorInfo.Ins.Make_Indicator(Skill1Indicator, go => { go_indicator1 = go; });
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_indicator2))
// IndicatorInfo.Ins.Make_Indicator(Skill2Indicator, go => { go_indicator2 = go; });
CoolTime_Skill1 = 1f; CoolTime_Skill1 = 1f;
CoolTime_Skill1 = 2f; CoolTime_Skill1 = 2f;
@ -54,40 +53,66 @@ public class Boss_IceGolem : BossMobActor
base.Update(); base.Update();
if (IsDead() || IsStop) return; 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"); Run_byUseSkill(Skill1TargetRange, Skill1Speed, success =>
go_indicator1.transform.position = Get_position();
go_indicator1.SetActive(true);
Jump(0.5f, 3f, 2f, 5f, () =>
{ {
Init(true, false); AnimationPlay("boss_skill1start");
AnimationPlay("boss_skill1attack"); 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() IEnumerator Co_Skill2()
{ {
Change_MobStatus(eMobStatus.Skill); Change_MobStatus(eMobStatus.Skill);
AnimationPlay("boss_skill2start"); 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; float t = 0f;
while (t < 3f) while (t < 3f)
{ {
yield return null; yield return null;
t += Time.deltaTime; 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; else break;
} }
go_indicator2.SetActive(false);
AnimationPlay("boss_skill2runattack"); if (isTarget)
Run_byUseSkill(0f, 7f, success => { Init(false, true); }); {
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; } protected override float Get_Skill1Dmg() { return Skill1Dmg; }

View File

@ -38,16 +38,19 @@ public class BossMobActor : MobActor
protected virtual void Init(bool initSkill1CoolTime, bool initSkill2CoolTime) 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_indicator1)) go_indicator1.SetActive(false);
if (!DSUtil.CheckNull(go_indicator2)) go_indicator2.SetActive(false); if (!DSUtil.CheckNull(go_indicator2)) go_indicator2.SetActive(false);
UseSkillIndex = 0;
} }
public override void Del_Target(bool forcedel = false) public override void Del_Target(bool forcedel = false)
{ {
base.Del_Target(forcedel); base.Del_Target(forcedel);
Init(false, false); InActiveAllIndicator();
} }
public override void Get_Damage(DamageInfo _dinfo) public override void Get_Damage(DamageInfo _dinfo)

View File

@ -64,6 +64,7 @@ public class MobActor : Actor
transform.localScale = m_MonsterTableData.f_DefaultScale * Vector3.one; transform.localScale = m_MonsterTableData.f_DefaultScale * Vector3.one;
m_AttackType = m_MonsterTableData.e_AttackType; m_AttackType = m_MonsterTableData.e_AttackType;
m_NavStopDistance = m_MonsterTableData.f_BaseATKRange;
b_IsFirstAttack = m_MonsterTableData.b_IsFirstAttack; b_IsFirstAttack = m_MonsterTableData.b_IsFirstAttack;
f_BaseChaseRange = m_MonsterTableData.f_BaseChaseRange; f_BaseChaseRange = m_MonsterTableData.f_BaseChaseRange;
@ -190,7 +191,7 @@ public class MobActor : Actor
} }
else 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); Change_MobStatus(eMobStatus.Chase);
else if (m_attackCoolTime <= 0f) else if (m_attackCoolTime <= 0f)
{ {
@ -274,7 +275,7 @@ public class MobActor : Actor
m_NavMeshAgent.stoppingDistance = 0.1f; m_NavMeshAgent.stoppingDistance = 0.1f;
break; break;
case eMobStatus.Battle: case eMobStatus.Battle:
m_NavMeshAgent.stoppingDistance = m_MonsterTableData.f_BaseATKRange; m_NavMeshAgent.stoppingDistance = m_NavStopDistance;
FindNextTarget(10000f); FindNextTarget(10000f);
break; break;
case eMobStatus.BattleStop: case eMobStatus.BattleStop:
@ -302,7 +303,7 @@ public class MobActor : Actor
void Check_Patrol() 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)) (!isTarget || Vector3.Distance(OriginalPos, Get_position()) > m_MonsterTableData.f_BaseChaseRange))
Change_MobStatus(eMobStatus.BattleStop); Change_MobStatus(eMobStatus.BattleStop);
} }