오늘 학습 키워드

최종 팀 프로젝트

오늘 학습 한 내용을 나만의 언어로 정리하기

스태미나 / 쿨타임 때문에 특정 행동을 못할 때 피드백 주기

  • 이벤트 버스를 사용하기로 결정.
  • 그리고 지금까지 너무 중복되어 있었던 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는 피벗에서 가기 때문인듯…
  • 다른 방법으로 판단해야 할 것 같음.