
오늘 학습 키워드
최종 팀 프로젝트
오늘 학습 한 내용을 나만의 언어로 정리하기
스태미나 / 쿨타임 때문에 특정 행동을 못할 때 피드백 주기
- 이벤트 버스를 사용하기로 결정.
- 그리고 지금까지 너무 중복되어 있었던 AdditionalSkill의 ConditionCheck를 SkillBase로 옮김
// SkillBase.cs
public virtual bool ConditionCheck()
{
// 쿨타임 / 스태미나 체크
bool canUse = controller.Condition.CheckCooldown(lastUsedTime, cooldown) &&
controller.Condition.TryUseStamina(needStamina);
return canUse;
}
// SuperCrash.cs
public override bool ConditionCheck()
{
if (!base.ConditionCheck()) return false;
// 발동 조건 체크 : 공중
if (controller.Move.isGrounded)
{
return false;
}
return true;
}- 부모 메서드의 반환값을 사용할 수 있다는 점을 이용했음.
- 그냥 의문. 과연 CheckCooldown이 false 라면 뒤에 TryUseStamina는 검사를 안하는가?
- 정답은 Yes. 단락 평가에 대한 정보
- 첫 번째 연산자가 전체 표현식의 결과를 결정지을 수 없을 때에만 두 번째 연산자의 실제 평가가 이뤄진다고 함.
- ex. &&의 경우 앞에 있는게 False면 뒤를 계산하지 않고 그냥 False로 반환됨
- ex. || 의 경우 앞에 있는게 True면 뒤를 계산하지 않고 그냥 True로 반환됨
private void Awake()
{
...
cantUseCuzStamina = new Observable<bool>(EventBusKey.CantUseCuzStamina, false);
cantUseCuzCooldown = new Observable<bool>(EventBusKey.CantUseCuzCooldown, false);
...
}
private void ConditionSettings()
{
...
EventBus.Subscribe(EventBusKey.CantUseCuzStamina, CannotActionCuzStamina);
EventBus.Subscribe(EventBusKey.CantUseCuzCooldown, CannotActionCuzCooldown);
}
private void CannotActionCuzStamina(object o)
{
if ((bool)o)
{
Debug.Log("[CantUse] Because You have no stamina");
}
}
private void CannotActionCuzCooldown(object o)
{
if ((bool)o)
{
Debug.Log("[CantUse] Because It's Cooldown");
}
}- 이벤트 버스를 활용해 스태미나/쿨타임으로 인한 행동 불가 신호를 보냄
플랫폼 끝자락 쯤에서 섬단을 하면 순간이동 하던 버그

- 아무래도 Ray는 피벗에서 가기 때문인듯…
- 다른 방법으로 판단해야 할 것 같음.