
문제:
스킬 지속 시간이 끝나도 스킬 정보 오브젝트(skillInfoObject)가 비활성화되지 않는 문제가 발생했습니다.
해결 방법:
문제 원인 파악:
초기 구현에서는 쿨다운 시간 동안만 대기하고, 스킬 지속 시간에 대한 처리가 누락되었습니다.
해결 과정:
SkillEffect 코루틴에서 스킬 지속 시간을 추적하는 로직을 추가했습니다.
스킬 지속 시간 동안 대기한 후, 지속 시간이 끝나면 skillInfoObject를 비활성화하도록 수정했습니다.
protected IEnumerator SkillEffect()
{
onCooldown = true;
cooldownRemaining = cooldownTime;
skillTimeRemaining = skillDuration;
// 스킬 정보 오브젝트 활성화
if (skillInfoObject != null)
{
skillInfoObject.SetActive(true);
}
// 스킬 지속 시간 동안 대기
float elapsedSkillTime = 0f;
while (elapsedSkillTime < skillDuration)
{
elapsedSkillTime += Time.deltaTime;
yield return null;
}
// 스킬 지속 시간이 끝났을 때 스킬 정보 오브젝트 비활성화
if (skillInfoObject != null)
{
skillInfoObject.SetActive(false);
}
// 쿨다운 시간 동안 대기
while (cooldownRemaining > 0)
{
cooldownRemaining -= Time.deltaTime;
yield return null;
}
onCooldown = false;
UpdateCooldownUI(0);
}
private void OnSkillInfoButtonClick()
{
if (skillTextObject != null)
{
skillTextObject.SetActive(true);
StartCoroutine(DisableAfterDelay(skillTextObject, 2.0f)); // 2초 후에 비활성화
}
}
private IEnumerator DisableAfterDelay(GameObject target, float delay)
{
yield return new WaitForSeconds(delay);
target.SetActive(false);
}
오늘은 Unity에서 스킬 시스템을 구현하고, 스킬 정보 오브젝트의 활성화 및 비활성화 문제를 해결했습니다. 스킬 사용 시 지속 시간과 쿨다운 시간을 관리하고, 스킬 정보 오브젝트가 적절히 표시되도록 수정했습니다. 또한, skillInfoButton을 클릭하여 스킬 정보를 표시하고, 2초 후 또는 다른 곳을 터치했을 때 해당 오브젝트가 비활성화되도록 구현했습니다.