환영검무 작업 중...
This commit is contained in:
parent
2f71efcd36
commit
61d425e6e8
File diff suppressed because one or more lines are too long
|
|
@ -127,7 +127,7 @@ Material:
|
|||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.49411765, g: 0.14509805, b: 0.16470589, a: 1}
|
||||
- _Color: {r: 0.49411765, g: 0.14509805, b: 0.16470589, a: 1}
|
||||
- _Color: {r: 0.49411762, g: 0.145098, b: 0.16470584, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _EmissionColorUI: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _EmissionColorWithMapUI: {r: 1, g: 1, b: 1, a: 1}
|
||||
|
|
|
|||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -1974,6 +1974,12 @@ AnimatorStateMachine:
|
|||
- serializedVersion: 1
|
||||
m_State: {fileID: -3180731614763140707}
|
||||
m_Position: {x: -260, y: -170, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 3939311633111956318}
|
||||
m_Position: {x: -260, y: -50, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 2487565391451115918}
|
||||
m_Position: {x: -260, y: -110, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
|
|
@ -2250,6 +2256,58 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &2487565391451115918
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: ass_skill3
|
||||
m_Speed: 0
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 32a83b4f73d533f4ba4393e494670234, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &3939311633111956318
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: ass_skill3_attack
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 9cc50abd895270c4c9bcd33ed909323a, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &4581454969299528233
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3280100619647823221
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8911789100912857807}
|
||||
- component: {fileID: 3899472576749596654}
|
||||
m_Layer: 0
|
||||
m_Name: Skill_PhantomFrenzy
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8911789100912857807
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3280100619647823221}
|
||||
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: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &3899472576749596654
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3280100619647823221}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8260736bd9b784c498ebb5efd5a412f3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Pierce: 0
|
||||
str_HitEffect:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 92facb4f58572b94da2b9669aaa05e23
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -2,7 +2,6 @@ using System;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
|
@ -56,6 +55,7 @@ public class Actor : MyCoroutine
|
|||
protected Dictionary<eSkillExtraType, bool> dic_skillextra = new Dictionary<eSkillExtraType, bool>();
|
||||
protected Dictionary<eCC, CCData> dic_ccData = new Dictionary<eCC, CCData>();
|
||||
protected Dictionary<eCC, Dictionary<Actor, double>> dic_ccAddRate = new Dictionary<eCC, Dictionary<Actor, double>>();
|
||||
|
||||
protected void Init_CC()
|
||||
{
|
||||
if (dic_ccData.Count == 0)
|
||||
|
|
@ -196,7 +196,7 @@ public class Actor : MyCoroutine
|
|||
}
|
||||
}
|
||||
|
||||
protected bool isPlaying()
|
||||
public bool isPlaying()
|
||||
{
|
||||
float normalizedTime = m_animation.GetCurrentAnimatorStateInfo(0).normalizedTime;
|
||||
|
||||
|
|
@ -266,109 +266,6 @@ public class Actor : MyCoroutine
|
|||
Play_Idle();
|
||||
}
|
||||
}
|
||||
public virtual void Set_JoystickStatus(int status) { }
|
||||
|
||||
public void Set_Warp(Vector3 _pos)
|
||||
{
|
||||
if (m_BoxCollider) m_BoxCollider.enabled = true;
|
||||
m_NavMeshAgent.enabled = true; // 사망 시 off 됨. 다시 세팅될 때 켜줌
|
||||
m_NavMeshAgent.Warp(_pos);
|
||||
}
|
||||
public virtual void Run_byJoystick(Vector3 _v) { }
|
||||
|
||||
protected void StopMove_Imm(bool setIdle)
|
||||
{
|
||||
if (setIdle) CurAnim = eAnim.Idle;
|
||||
if (m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_NavMeshAgent.isStopped = true;
|
||||
m_NavMeshAgent.ResetPath(); // 경로를 비워서 멈춤
|
||||
m_NavMeshAgent.velocity = Vector3.zero; // 이 경우도 velocity를 0으로 설정
|
||||
}
|
||||
}
|
||||
int FindCount = 0;
|
||||
protected bool Set_Path(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
NavMeshPath path = new NavMeshPath();
|
||||
m_NavMeshAgent.CalculatePath(_pos, path);
|
||||
|
||||
switch (path.status)
|
||||
{
|
||||
case NavMeshPathStatus.PathComplete:
|
||||
m_NavMeshAgent.speed = Get_MoveSpeed();
|
||||
m_NavMeshAgent.SetPath(path);
|
||||
FindCount = 0; // 성공 시 초기화
|
||||
return true;
|
||||
case NavMeshPathStatus.PathPartial:
|
||||
++FindCount;
|
||||
Debug.Log($"Path Partial. Attempt: {FindCount}");
|
||||
if (FindCount > 5)
|
||||
{
|
||||
FindCount = 0;
|
||||
return false;
|
||||
}
|
||||
var newpos = DSUtil.Get_RandomPos_onNavMesh(_pos, 0f, 5f);
|
||||
return Set_Path(newpos);
|
||||
case NavMeshPathStatus.PathInvalid:
|
||||
Debug.LogWarning("Path Invalid.");
|
||||
// 적 근처로 워프넣어볼까?
|
||||
//Set_Warp(DSUtil.Get_RandomPos_onNavMesh(_pos, 3f));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
protected void Set_Move(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_fAttackMoveTime = 1f;
|
||||
#if UNITY_EDITOR
|
||||
if (SceneManager.GetActiveScene().name == "StatTest")
|
||||
m_fAttackMoveTime = 0f;
|
||||
#endif
|
||||
m_NavMeshAgent.stoppingDistance = 0; // 툴에서 사용 용도
|
||||
m_NavMeshAgent.isStopped = false;
|
||||
m_NavMeshAgent.angularSpeed = 0f;
|
||||
NavMeshPath path = new NavMeshPath();
|
||||
m_NavMeshAgent.CalculatePath(_pos, path);
|
||||
|
||||
switch (path.status)
|
||||
{
|
||||
case NavMeshPathStatus.PathComplete:
|
||||
m_NavMeshAgent.SetPath(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected void Set_Destination(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_NavMeshAgent.ResetPath();
|
||||
m_NavMeshAgent.SetDestination(_pos);
|
||||
}
|
||||
}
|
||||
protected bool Complete_Destination()
|
||||
{
|
||||
if (m_NavMeshAgent.isOnNavMesh && !m_NavMeshAgent.pathPending)
|
||||
if (m_NavMeshAgent.remainingDistance <= m_NavMeshAgent.stoppingDistance)
|
||||
if (!m_NavMeshAgent.hasPath || m_NavMeshAgent.velocity.sqrMagnitude == 0f)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
public void ReCal_NaveMesh()
|
||||
{
|
||||
//return; // TODO 정인호 : 내비메시의 이상한 위치에 있으면 주변을 검색해서 내비메시 위로 올리는데 이상한 위치로 갈 수 있어서 일단 다시 뺌
|
||||
if (m_ID != 61 && m_NavMeshAgent && m_NavMeshAgent.enabled)
|
||||
{
|
||||
var newpos = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 0f, 1f);
|
||||
if (!Vector3.Equals(newpos, Get_position()))
|
||||
Set_Warp(newpos);
|
||||
}
|
||||
}
|
||||
|
||||
public void Set_AttackCoolTime(float _rate)
|
||||
{
|
||||
|
|
@ -811,7 +708,7 @@ public class Actor : MyCoroutine
|
|||
IEnumerator Co_JumpAttack(float heightPos_y, float duration)
|
||||
{
|
||||
var startPos = Get_position(); // 현재 위치
|
||||
var targetPos = Get_TeleportPostion();
|
||||
var targetPos = Get_TeleportPostion(m_Target);
|
||||
|
||||
var elapsed = 0f;
|
||||
|
||||
|
|
@ -866,11 +763,11 @@ public class Actor : MyCoroutine
|
|||
public Vector3 Get_CenterPositionFoward(float dist = 1f) { return Get_Center_position() + transform.forward * dist; }
|
||||
public Vector3 Get_PositionFoward(float dist = 1f) { return Get_position() + transform.forward * dist; }
|
||||
public Vector3 Get_PositionBack(float dist = 1f) { return Get_position() + -transform.forward * dist; }
|
||||
public Vector3 Get_TeleportPostion(float dist = 1f)
|
||||
public Vector3 Get_TeleportPostion(Actor target, float dist = 1f)
|
||||
{
|
||||
var startPos = Get_position(); // 현재 위치
|
||||
Vector3 direction = (m_Target.Get_position() - Get_position()).normalized; // 목표와 현재 위치의 방향 벡터를 구함
|
||||
return m_Target.Get_position() - direction * 1f; // 목표 위치에서 -1f 앞 지점 계산
|
||||
Vector3 direction = (target.Get_position() - Get_position()).normalized; // 목표와 현재 위치의 방향 벡터를 구함
|
||||
return target.Get_position() - direction * 1f; // 목표 위치에서 -1f 앞 지점 계산
|
||||
}
|
||||
public float Get_ScaleSizeDist() { return transform.localScale.x > 2f ? ObjSize.z * 0.5f : 0f; }
|
||||
public ActorStatInfo Get_StatInfo() { return m_Stat; }
|
||||
|
|
@ -1802,6 +1699,124 @@ public class Actor : MyCoroutine
|
|||
yield break;
|
||||
}
|
||||
#endregion
|
||||
#region 캐릭터 이동
|
||||
/// <summary>
|
||||
/// TelepoetPosion으로 이동
|
||||
/// </summary>
|
||||
public virtual void MoveToTarget(Actor target, float stopdist, Action _movecomplete = null, float dist = 1f)
|
||||
{
|
||||
StartCoroutine(Co_MoveToTarget(target, stopdist, _movecomplete, dist));
|
||||
}
|
||||
IEnumerator Co_MoveToTarget(Actor target, float stopdist, Action _movecomplete, float dist)
|
||||
{
|
||||
m_NavMeshAgent.stoppingDistance = stopdist;
|
||||
Set_Path(Get_TeleportPostion(target, dist));
|
||||
while (!Complete_Destination()) yield return null;
|
||||
_movecomplete?.Invoke();
|
||||
m_NavMeshAgent.stoppingDistance = m_NavStopDistance;
|
||||
}
|
||||
public virtual void Set_JoystickStatus(int status) { }
|
||||
public void Set_Warp(Vector3 _pos)
|
||||
{
|
||||
if (m_BoxCollider) m_BoxCollider.enabled = true;
|
||||
m_NavMeshAgent.enabled = true; // 사망 시 off 됨. 다시 세팅될 때 켜줌
|
||||
m_NavMeshAgent.Warp(_pos);
|
||||
}
|
||||
public virtual void Run_byJoystick(Vector3 _v) { }
|
||||
protected void StopMove_Imm(bool setIdle)
|
||||
{
|
||||
if (setIdle) CurAnim = eAnim.Idle;
|
||||
if (m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_NavMeshAgent.isStopped = true;
|
||||
m_NavMeshAgent.ResetPath(); // 경로를 비워서 멈춤
|
||||
m_NavMeshAgent.velocity = Vector3.zero; // 이 경우도 velocity를 0으로 설정
|
||||
}
|
||||
}
|
||||
int FindCount = 0;
|
||||
protected bool Set_Path(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
NavMeshPath path = new NavMeshPath();
|
||||
m_NavMeshAgent.CalculatePath(_pos, path);
|
||||
|
||||
switch (path.status)
|
||||
{
|
||||
case NavMeshPathStatus.PathComplete:
|
||||
m_NavMeshAgent.speed = Get_MoveSpeed();
|
||||
m_NavMeshAgent.SetPath(path);
|
||||
FindCount = 0; // 성공 시 초기화
|
||||
return true;
|
||||
case NavMeshPathStatus.PathPartial:
|
||||
++FindCount;
|
||||
Debug.Log($"Path Partial. Attempt: {FindCount}");
|
||||
if (FindCount > 5)
|
||||
{
|
||||
FindCount = 0;
|
||||
return false;
|
||||
}
|
||||
var newpos = DSUtil.Get_RandomPos_onNavMesh(_pos, 0f, 5f);
|
||||
return Set_Path(newpos);
|
||||
case NavMeshPathStatus.PathInvalid:
|
||||
Debug.LogWarning("Path Invalid.");
|
||||
// 적 근처로 워프넣어볼까?
|
||||
//Set_Warp(DSUtil.Get_RandomPos_onNavMesh(_pos, 3f));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
protected void Set_Move(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_fAttackMoveTime = 1f;
|
||||
#if UNITY_EDITOR
|
||||
if (SceneManager.GetActiveScene().name == "StatTest")
|
||||
m_fAttackMoveTime = 0f;
|
||||
#endif
|
||||
m_NavMeshAgent.stoppingDistance = 0; // 툴에서 사용 용도
|
||||
m_NavMeshAgent.isStopped = false;
|
||||
m_NavMeshAgent.angularSpeed = 0f;
|
||||
NavMeshPath path = new NavMeshPath();
|
||||
m_NavMeshAgent.CalculatePath(_pos, path);
|
||||
|
||||
switch (path.status)
|
||||
{
|
||||
case NavMeshPathStatus.PathComplete:
|
||||
m_NavMeshAgent.SetPath(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected void Set_Destination(Vector3 _pos)
|
||||
{
|
||||
if (m_NavMeshAgent.enabled && m_NavMeshAgent.isOnNavMesh)
|
||||
{
|
||||
m_NavMeshAgent.ResetPath();
|
||||
m_NavMeshAgent.SetDestination(_pos);
|
||||
}
|
||||
}
|
||||
protected bool Complete_Destination()
|
||||
{
|
||||
if (m_NavMeshAgent.isOnNavMesh && !m_NavMeshAgent.pathPending)
|
||||
if (m_NavMeshAgent.remainingDistance <= m_NavMeshAgent.stoppingDistance)
|
||||
if (!m_NavMeshAgent.hasPath || m_NavMeshAgent.velocity.sqrMagnitude == 0f)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
public void ReCal_NaveMesh()
|
||||
{
|
||||
//return; // TODO 정인호 : 내비메시의 이상한 위치에 있으면 주변을 검색해서 내비메시 위로 올리는데 이상한 위치로 갈 수 있어서 일단 다시 뺌
|
||||
if (m_ID != 61 && m_NavMeshAgent && m_NavMeshAgent.enabled)
|
||||
{
|
||||
var newpos = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 0f, 1f);
|
||||
if (!Vector3.Equals(newpos, Get_position()))
|
||||
Set_Warp(newpos);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public bool CanMove() { return !IsCC() && m_NavMeshAgent.isOnNavMesh && !m_NavMeshAgent.isStopped; }
|
||||
protected virtual bool IsAvoidCoolTime() { return false; }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
using CodeStage.AntiCheat.ObscuredTypes;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
public class Skill_PhantomFrenzy : ProjectileBase
|
||||
{
|
||||
[Header("공격 애니메이션")]
|
||||
public string attackAnimationName = "ass_skill3_attack";
|
||||
[Header("공격 횟수")]
|
||||
public int AttackCount = 7;
|
||||
[Header("공격 거리")]
|
||||
public float AttackDistance = 10f;
|
||||
|
||||
public override void Set(ProjectileData _data)
|
||||
{
|
||||
base.Set(_data);
|
||||
StartCoroutine(Co_Update());
|
||||
}
|
||||
|
||||
IEnumerator Co_Update()
|
||||
{
|
||||
// 이동 비활성화
|
||||
OptionInfo.Ins.PCMove = false;
|
||||
|
||||
var shooter = m_ProjectTileData.shooter;
|
||||
ObscuredInt attackTimes = AttackCount; // 공격 횟수 설정
|
||||
attackTimes.RandomizeCryptoKey();
|
||||
Actor target = m_ProjectTileData.target;
|
||||
|
||||
while (attackTimes > 0)
|
||||
{
|
||||
bool moveCompleted = false;
|
||||
|
||||
// 목표 지점으로 이동 (이동 완료 시 moveCompleted = true)
|
||||
shooter.MoveToTarget(target, 0.5f, () => moveCompleted = true);
|
||||
// 공격 애니메이션 실행
|
||||
shooter.AnimationPlay(attackAnimationName);
|
||||
|
||||
// 이동 완료 대기
|
||||
while (!moveCompleted || shooter.isPlaying()) yield return null;
|
||||
|
||||
// 남은 공격 횟수 감소
|
||||
--attackTimes;
|
||||
attackTimes.RandomizeCryptoKey();
|
||||
target = ActorInfo.Ins.Get_Far_EnemyActor_orNull(shooter.IsEnemy(), shooter.Get_position(), AttackDistance);
|
||||
if (DSUtil.CheckNull(target)) break;
|
||||
}
|
||||
|
||||
// 이동 활성화 및 대기 상태로 전환
|
||||
OptionInfo.Ins.PCMove = true;
|
||||
shooter.Play_Idle();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8260736bd9b784c498ebb5efd5a412f3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -221,6 +221,32 @@ public class ActorInfo : MonoBehaviour
|
|||
return nearest;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 특정 거리 내에서 가장 먼 적을 찾는다.
|
||||
/// </summary>
|
||||
public Actor Get_Far_EnemyActor_orNull(bool isEnemy, Vector3 pos, float dist = 10f)
|
||||
{
|
||||
var actors = Get_EnemyActors(isEnemy, pos, dist);
|
||||
//return actors.OrderByDescending(a => (pos - a.Get_position()).sqrMagnitude).FirstOrDefault();
|
||||
Actor far = actors.Count > 0 ? actors[0] : null;
|
||||
if (DSUtil.CheckNull(far)) return null;
|
||||
|
||||
float farDistSqr = (pos - far.Get_position()).sqrMagnitude;
|
||||
|
||||
foreach (var actor in actors)
|
||||
{
|
||||
float distanceSqr = (pos - actor.Get_position()).sqrMagnitude; // 제곱 거리 계산
|
||||
if (distanceSqr > farDistSqr)
|
||||
{
|
||||
farDistSqr = distanceSqr;
|
||||
far = actor;
|
||||
}
|
||||
}
|
||||
|
||||
Release_Actors(actors);
|
||||
return far;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 가장 가까운 동맹 하나를 찾는다.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ public enum eEffect
|
|||
Skill_IceBolt, Skill_Fireball, Skill_FireBolt, Skill_EnergyBall, Skill_Blizzard, Skill_Flower, Skill_Golem, Skill_EarthWorm,
|
||||
Skill_Hurricane, Skill_EatSnack, Skill_ShieldAttack, Skill_JumpAttack, Skill_ManaBurst, Skill_DaggerThrow, Skill_OneHandCombo1,
|
||||
Skill_FatalBlow, Skill_DashSlash, Skill_EnergySlash, Skill_BrutalSlash, Skill_Berserk, Skill_EarthSlam, Skill_Whirlwind,
|
||||
Skill_SweepAttack, Skill_VitalStrike, Skill_DeathBlade, Skill_ShadowSlash, Skill_DarkAmbush,
|
||||
Skill_SweepAttack, Skill_VitalStrike, Skill_DeathBlade, Skill_ShadowSlash, Skill_DarkAmbush, Skill_PhantomFrenzy,
|
||||
|
||||
Skill_Poison,
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue