진행한 것들
전체 테스트
이번 주에 만든 적 패트롤, 추적, 공격과 플레이어 연속 공격을 한 씬에 넣어서 테스트 했다.
데미지 계산
Weapon이라는 클래스를 만들어 무기에 컴포넌트로 등록시키고 OnTriggerEnter로 체크하여 데미지를 계산하고 입히게끔 했다.
attacker와 target으로 나누어 정보를 전달하였고 무적과 회피 그리고 크리티컬을 체크한 뒤 데미지를 계산하였다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Weapon : MonoBehaviour, IBattle
{
private EntitySO _weaponSO;
private const int PERCENT_EXCLUDE_MAX_VALUE = 101;
private void OnTriggerEnter(Collider other)
{
HealthSO targetSO = null;
IDamageable damageable = null;
if (other.CompareTag("Player"))
{
PlayerStatHandler statHandler = other.GetComponentInParent<PlayerController>().StatHandler;
targetSO = statHandler.Data;
damageable = statHandler;
if (_weaponSO == null)
{
_weaponSO = GetComponentInParent<EnemyController>().StatHandler.Data;
}
Attack(_weaponSO, targetSO, damageable);
}
else if (other.CompareTag("Enemy"))
{
EnemyStatHandler statHandler = other.GetComponentInParent<EnemyController>().StatHandler;
targetSO = statHandler.Data;
damageable = statHandler;
if (_weaponSO == null)
{
_weaponSO = GetComponentInParent<PlayerController>().StatHandler.Data;
}
Attack(_weaponSO, targetSO, damageable);
}
}
public void Attack(EntitySO attacker, HealthSO target, IDamageable targetDamageable)
{
if (target.IsInvincible)
return;
int randomEvasionProbability = UnityEngine.Random.Range(0, PERCENT_EXCLUDE_MAX_VALUE);
if (randomEvasionProbability < target.EvasionProbability)
return;
float attackDamage = attacker.Attack;
int randomCriticalProbability = UnityEngine.Random.Range(0, PERCENT_EXCLUDE_MAX_VALUE);
if (randomCriticalProbability < attacker.CriticalProbability)
attackDamage += attacker.Attack * attacker.CriticalMod;
targetDamageable.Damaged(attackDamage);
}
}
오늘의 이슈 / 내일 할 것
어제 이슈 : 패트롤 비동기
1. 공격 중에 점프, 구르기 이동 막기 (이동은 처음 공격 시 방향 전환만 적용)
StateMachine의 CurrentState가 AttackState면 return하도록 했다.
2. 맵 정보를 받아와서 적이 플레이어 추적하고 공격할 수 있도록 하기
Area에서 정보를 받아서 플레이어가 OnTriggerEnter 됐을 때 추적하고 OnTriggerExit 됐을 때 패트롤 상태가 되도록 했다.
오늘 이슈
1. 공격 상태가 아님에도 Attack을 호출하여 적 끼리 OnTriggerEnter가 불려서 NullReferenceException이 발생
내일 할 것
공격 상태에만 Attack을 호출할 수 있도록 하기
오늘의 회고
오늘은 이번 주에 작업 했던 것들을 합쳐서 점검하고 무기로부터 데미지를 전달할 수 있도록 했다. 이후에 아이템 작업 하시는 분의 StatHandler의 작업이 끝나면 무기의 스텟을 캐릭터 스텟에 추가하고 총 합을 Attack의 매개변수로 넘길 수 있도록 할 것이다. 무기도 장착해주고 보여지는 것들이 하나씩 늘어가니까 뭔가 진행되고 있는 것 같아서 기분이 좋다. 이 기분대로 열심히 더 해보자 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
DevLog - 이그라엘(IGRAL) 죽음 상태 추가 (0) | 2023.11.10 |
---|---|
DevLog - 이그라엘(IGRAL) 데미지 계산 적용 변경 (0) | 2023.11.06 |
DevLog - 이그라엘(IGRAL) 플레이어 연속 공격 (0) | 2023.11.02 |
DevLog - 이그라엘(IGRAL) 적 순찰 (0) | 2023.11.01 |
DevLog - 이그라엘(IGRAL) 적 상태머신 (0) | 2023.10.31 |