inflearn logo
강의

Khóa học

Chia sẻ kiến thức

유니티 쿨타임 코루틴활용 질문

893

chjjang258585

1 câu hỏi đã được viết

0

플레이어가 여러가지 스킬의 투사체를 소환해 날리는 타입으로 공격합니다.

게임 진행 중에 스킬을 획득하고, 스킬을 획득하면 스킬의 Id 값을 매개변수로 활용하여

코루틴을 실행합니다. while 문 안에 스킬의 해당 투사체 소환 함수를 실행하고 해당 스킬의 쿨타임만큼 WaitForSeconds 를 실행하고 있습니다.

그런데 게임을 진행 중에 일시정지 했을 때, 문제가 생깁니다.

처음엔 while문 안에서 만약 일시정지 상태라면 yield return null 로 넘어가는 방식으로

작성했습니다. 예를 들면 쿨타임이 3초인 스킬이 있는데 소환하고 1초가 지난 후에, 일시정지가 되었다면 일시정지가 풀린 후에 2초가 지나는게 아닌, 일시정지 상태에서도 시간이 흐릅니다.

그래서 일시정지가 풀리면 바로 소환합니다. 일시정지 직전 소환한 오브젝트가 있으니, 중복생성 된 것처럼 연출이 나옵니다.

 

그래서 소환 실행함수 안에서 일시정지상태라면 return 시켜 소환을 취소하는 방식으로 했습니다. 타이밍에 따라서 소환을 스킵해서 쿨타임이 길어지고, 결국 원하는 연출은 나오지 않더군요ㅠㅠ
여러가지 스킬을 굴리다보니 코루틴을 사용했는데, 다른 방식으로 해야 효과적으로 쿨타임을 관리할 수 있을까요?

유니티 unity

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴이에요. 유니티에서 일시정지 상태에서 쿨타임이 흐르는 동안 플레이어의 스킬을 제어하는 방법에 대해 궁금하신 것 같습니다.

일시정지 상태에서 시간이 멈추는 것처럼 쿨타임도 멈추게 하기 위해서는 WaitForSeconds를 사용할 수는 없습니다. 대신 코루틴을 진행하는 동안 Time.deltaTime 값을 더해 쿨타임을 체크해야 합니다.

float skillCooldown = 3.0f;
bool isPaused = false;

IEnumerator SkillCooldown()
{
    float currentTime = 0.0f;

    while (currentTime < skillCooldown)
    {
        // 일시정지 상태이면 시간에 Time.deltaTime을 더하지 않고 건너뛴다
        if (isPaused)
        {
            yield return null;
            continue;
        }

        currentTime += Time.deltaTime;
        yield return null;
    }

    // 쿨타임이 끝났을 때 처리하는 부분
    // 스킬을 소환하거나 원하는 연출을 실행한다
}

위의 예제 코드에서는 isPaused라는 변수로 게임의 일시정지 상태 여부를 체크합니다. 일시정지 상태인 경우 Time.deltaTime을 더하지 않고 yield return null로 건너뛰기 때문에 일시정지 상태에서는 쿨타임이 멈추게 됩니다. 일시정지가 풀리면 쿨타임이 다시 흘러갑니다.

소환 실행 함수 내에서 일시정지 상태라면 코루틴을 멈추는 방법보다는 위와 같이 쿨타임 체크를 할 때 일시정지 상태를 확인하고 건너뛰는 방식을 사용하는 것이 좋습니다. 이렇게 하면 일시정지 직전에 소환한 오브젝트가 중복 생성되는 문제를 해결할 수 있을 것입니다.

만약 스킬마다 쿨타임이 다르다면, skillCooldown 변수를 스킬마다 따로 저장하고 코루틴을 실행할 때 해당 스킬의 쿨타임을 인자로 전달해주는 방식으로 구현하면 됩니다.

이와 관련된 더 자세한 내용은 Unity의 공식 문서 또는 유니티 개발자 커뮤니티를 참고하시면 도움이 될 것입니다. 질문이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

3:56에 폰트 불러온 과정이 궁금합니다 ㅠㅠ

0

13

2

Spider와 Monster 구현 방식을 구분한 이유

1

18

1

Sprute Sheet에 대해서.

0

21

1

ResourceManager 클래스 관련 질문

1

36

2

FBX chan 모델

0

27

1

첨부된 수업자료와 강의 내용이 다릅니다.

0

53

2

몬스터 HP 게이지바 이동

0

23

1

TextMeshPro용 커스텀 한글 2350자.txt 파일은 어디에 있나요?

0

30

1

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

35

1

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

46

2

C#에서의 RAII

0

67

3

Scene 뷰에서 Enemy Entity가 보이지 않는 문제

0

50

2

Lessons 3 & 4 don't have subtitles unfortunately

0

40

1

클로드코드 + 유니티 컨텐츠만들기 응용에 대하여 질문드립니다.

0

74

1

매니저 관련 질문이 있습니다.

0

73

2

Instantiate

0

53

2

유니티 허브 다운로드

1

64

2

비쥬얼 스튜디오에서 unity연결이 없습니다.

0

79

2

UserDataManager 클래스 hasSaveError 처리

0

47

2

제공해주신 자료에 스크립트들이 빠져있습니다

0

44

2

플레이어를 왜 ECS로 만드는 건가요?

0

56

1

싱글턴패턴

0

49

2

코드 관련 질문

0

53

2

섹션7 수업자료 업로드 부탁드립니다.

0

48

2