//델리게이트 전역선언
public delegate void Next_Process(); // void형 델리게이트
public delegate void Next_AttackProcess(RaycastHit _hitInfo); //RaycastHit 형 델리게이트
public class AttackComponent : ComponentBase
{
private Next_AttackProcess SuccessAttack;
private Next_Process FailAttack;
//생성자
public AttackComponent(UnitBase _uInfo, string _attackTagName, Next_AttackProcess _SuccessAttack = null, Next_Process _FailAttack = null)
{
uInfo = _uInfo;
attackTagName = _attackTagName;
SuccessAttack = _SuccessAttack;
FailAttack = _FailAttack;
}
public override void Updating()
{
if (!uInfo.unitData.isDie)
{
//레이쏘기
ShotRay(uInfo.Get_Transform().position + addUpStartShootPosition, uInfo.Get_Transform().forward,
uInfo.unitData.AttDistance, attackTagName, SuccessAttack, FailAttack);
}
}
Color hitColor = Color.white;
void ShotRay(Vector3 start, Vector3 direction, float distance, string tagName, Next_AttackProcess successNxt, Next_Process failNxt)
{
Debug.DrawRay(start, direction * distance, hitColor);
hitColor = Color.white;
bool isFind = false;
RaycastHit[] hits = Physics.RaycastAll(start, direction, distance);
for (int i = 0; i < hits.Length; i++)
{
if (isFind) break;
if (string.Equals(hits[i].collider.tag, tagName))
{
isFind = true;
//공격성공시 콜백
if (successNxt != null)
successNxt(hits[i]);
hitColor = Color.red;
}
}
if (!isFind)
{
//공격실패시 콜백
if (failNxt != null)
failNxt();
}
}
}