오늘은 근접 무기의 공격을 구현했다. 코루틴과 Vector3.Lerp를 활용하여 무기의 이동을 구현했고, Animation Event를 통해 공격을 구현했다.
참고하기
https://www.blueraja.com/blog/404/how-to-use-unity-3ds-linear-interpolation-vector3-lerp-correctly
위의 글을 토대로 선형 보간을 활용할 때 Percentage를 통해 선형 보간을 하는 방법을 사용했다.
private void FixedUpdate()
{
// 선형 보간 시작한 시간
float timeSinceStarted = Time.time - _timeStartedMoving;
// 선형 보간 진행 정도
float percentageComplete = timeSinceStarted / (_weaponData.AtkSpeed / 3);
if (Target.Count != 0 && _isMoving && _canAttack)
{
// 근접 공격 이동
transform.position = Vector3.Lerp(transform.position, _targetPos, percentageComplete);
// 이동이 완료되면
if(percentageComplete >= .5f)
{
_animationEnd = false;
Debug.Log("Melee Attack");
// 공격 애니메이션 재생
_animator.SetTrigger("Attack");
_animator.SetFloat("AttackSpeed", 1 + _weaponData.AtkSpeed);
}
if (percentageComplete >= 1f)
{
_effect.SetActive(true);
_timeStartedMoving = Time.time;
_canAttack = false;
}
}
else if(_animationEnd)
{
_effect.SetActive(false);
transform.position = Vector3.Lerp(transform.position, _weaponPivot, percentageComplete);
if (percentageComplete >= 1)
{
Debug.Log("Melee Attack End");
Target.Clear();
_canAttack = true;
}
}
}
좀 엉망진창에 이렇게 작성해도 되는지 모르겠지만, 어쨌든 드디어 무기가 목표 위치로 이동해서 타격을 하고 다시 돌아오는 것을 구현했다...
오늘은 발사체와 캐릭터의 공격에 대한 토의를 했었다.
발사체를 string으로 해서 tag로 찾는 것 보다, id를 통해 찾기로 얘기가 되었다.
캐릭터 공격 시 물리 공격, 마법 공격으로 나눌 지에 대해 토의를 했었다. 물리 마법으로 할지, 근접 원거리로 나눌지 토의를 했으나 결국 물리 마법으로 진행하기로 했다.