private float timeSinceLastAttack = float.MaxValue;
게임 개발이나 다른 실시간 시스템에서 흔히 사용하는 패턴 중 하나로,
다음 공격까지의 대기 시간을 나타내기 위해 사용됩니다.
[ 코드 분석 ]
- private: 이 변수는 클래스 내부에서만 접근할 수 있습니다.
- float timeSinceLastAttack: 공격 이후 경과 시간을 저장하는 float 타입의 변수
- float.MaxValue: float 타입이 가질 수 있는 가장 큰 값으로, 이는 약 3.40282347E+38
[ 의미와 목적 ]
이 변수는 게임에서 플레이어 또는 NPC의 공격 간의 시간을 추적하는 데 사용될 수 있습니다.
초기값을 float.MaxValue로 설정하는 이유는 다음과 같습니다:
- 초기화
- 이 값은 게임이 시작되었을 때 또는 캐릭터가 처음 생성되었을 때 아직 공격을 하지 않았음을 나타냅니다. float.MaxValue로 설정함으로써, 첫 번째 공격을 언제든지 할 수 있도록 합니다.
- 조건 검사
- 공격 로직에서 timeSinceLastAttack 값을 사용하여 특정 조건을 검사할 수 있습니다. 예를 들어, 공격 쿨다운(cooldown)이 끝났는지 확인하기 위해, 현재 시간과 timeSinceLastAttack의 차이가 일정 시간(쿨다운 시간)보다 큰지 확인합니다. 초기값이 float.MaxValue이면 첫 번째 검사에서 이 조건이 항상 참이 되어 첫 번째 공격을 즉시 허용합니다.
- 리셋
- 공격을 한 후에는 timeSinceLastAttack 값을 다시 초기화하거나 갱신하여 다음 공격까지의 시간을 추적합니다.
[ 예시 ]
이 예시에서
timeSinceLastAttack 변수는 Update 메서드에서 매 프레임마다 증가하며,
플레이어가 공격 버튼을 눌렀을 때와 공격 쿨다운 시간이 지났을 때 공격을 수행합니다.
공격 후 timeSinceLastAttack을 0으로 재설정하여 다음 공격까지의 시간을 다시 추적합니다.
초기값이 float.MaxValue인 것은 첫 번째 공격이 항상 즉시 가능하게 하기 위함입니다.
* Time.deltaTime은 프레임마다 정해진 고유 값
게임이 초당 60 프레임으로 실행된다면, 각 프레임 사이의 시간은 대략 1/60초, 즉 약 0.01667초가 됩니다.
게임이 초당 30 프레임으로 실행된다면, 각 프레임 사이의 시간은 대략 1/30초, 즉 약 0.03333초가 됩니다.
'Unity > Knowledge' 카테고리의 다른 글
Rigidbody2D - Body Type (0) | 2024.05.24 |
---|---|
Vector, 몬스터가 플레이어를 추격 하는 로직 및 정규화 (0) | 2024.05.14 |
Prefes와 Static 차이점 (0) | 2024.05.12 |
공격 시스템 구축 (0) | 2024.05.10 |
조준(Aim) 시스템 구축 (0) | 2024.05.09 |