에셋스토어의 상반기 빅세일! 스프링세일을 맞아 유니티 유튜버 베르님과 함께 몇가지 에셋을 함께 살펴봅니다. 방송에서 소개드릴 에셋은 아래와 같습니다.

 

👇 Show More 클릭! 👇

1. Fluffy Grooming Tool​

2. Destructible 2D

3. AAA Projectiles Vol.2

4. RT-Voice PRO

5. KWS Water System (Standard Rendering)

6. Pure Nature

7. Amplify Impostors

8. Weather Maker - Volumetric Clouds and Weather System for Unity

9. Space Graphics Toolkit​

반응형

 

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

지난 블랙 프라이데이 세일에 이어서 이번 스프링 세일 라이브커머스도 진행을 맡게 되었습니다!

 

[투네이션 후원]

https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61541

- 유니티 플러스 : https://prf.hn/click/camref:1100lkbzf/creativeref:1011l61476

- 유니티 프로 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61542

 

[디스코드 채널]

https://discord.gg/tqmRTy4pgk

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 어몽어스의 전선 고치기 임무를 만들어봅시다!

 

사용 엔진 버전 : 2019.4

 

리소스 : https://drive.google.com/file/d/1-QrHUpE40wdpZpNthEFHxo3Iw50-Ufi_/view?usp=sharing

 

타임라인

0:00 인트로

0:27 끊어진 전선 UI 배치하기

2:22 와이어 끌기 기능 구현

4:05 와이어 끌기 기능 테스트

4:27 아웃트로

 

[투네이션 후원] https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://assetstore.unity.com/?aid=1100lkbzf

- 유니티 플러스 : https://prf.hn/click/camref:1100lkbzf/creativeref:1011l61476

- 유니티 프로 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61542

 

[디스코드 채널] https://discord.gg/tqmRTy4pgk

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 투표 후에 플레이어가 추방되는 연출과 기능을 만들어보겠습니다!

 

리소스 : https://drive.google.com/file/d/1aCeadnc5XUeTM0fwNUsFQvsu5lFv5C8r/view?usp=sharing

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:24 추방 UI 배치

1:27 추방 UI 기능 구현

8:05 씬 세팅과 테스트

8:59 아웃트로

 

[투네이션 후원]

https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://assetstore.unity.com/?aid=1100lkbzf 

- 유니티 플러스 : https://prf.hn/click/camref:1100lkbzf/creativeref:1011l61476

- 유니티 프로 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61542

 

[디스코드 채널]

https://discord.gg/tqmRTy4pgk 

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

아주 오랜만에 메이크 더 어몽어스 강좌로 돌아왔습니다.

이번에는 지난 강좌에 이어서 투표로 결정된 추방자가 추방되는 연출을 추가하고 추방된 플레이어가 죽는 기능을 추가해보도록 하겠습니다.

본 작업에 들어가기 전에 영상 하단의 링크에서 리소스를 다운로드 받아서 임포트해줍니다.

추방 UI 배치

바로 직전 강좌에서는 투표 직후에 누가 표를 많이 받았는지 보여주는 결과까지 구현했으니 이제 투표 결과로 표를 많이 받은 플레이어를 추방하는 UI를 추가할 차례입니다.

Gameplay 씬에서 Canvas 오브젝트 아래에 이미지 오브젝트를 하나 생성하고 Ejection UI 라는 이름을 붙여줍니다.

그리고 이 이미지가 화면 전체를 덮도록 만들어주고 색을 검은 색으로 만들어 줍니다.

그 다음에는 이 이미지 아래에 텍스트 오브젝트를 만들고 글자 색과 글자 크기를 적당하게 지정해줍니다.

그리고 이미지 오브젝트를 하나 더 생성하고 방금 전에 임포트한 이미지를 넣어주고 머티리얼과 위치를 설정해줍니다.

마지막으로 추방된 플레이어 이미지가 날아갈 경로의 왼쪽 끝과 오른쪽 끝을 표시하는 오브젝트를 배치합니다.

추방 UI 기능 구현

UI 배치를 마친 다음에는 기능을 만들 차례입니다.

EjectionUI라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터를 엽니다.

스크립트 에디터가 열리고 나면 먼저 스크립트 상단에 UnityEngine.UI 네임스페이스를 using 선언해줍니다.

그리고 EjectionUI 클래스의 멤버 변수로 Text 타입의 ejectionResultText과 Image 타입의 ejectionPlayer를 선언해줍니다.

그 다음에는 추방된 플레이어 이미지가 날아갈 경로의 왼쪽 끝과 오른쪽 끝 위치를 담을 RectTransform 타입의 left와 right 변수를 선언합니다.

먼저 Start 함수를 만들고 ejectionPlayer 이미지의 머티리얼을 인스턴스화 해줍니다.

그 다음에는 Open 함수를 만들고 추방당할 플레이어가 있는지를 뜻하는 bool 타입의 isEjection, 추방당한 플레이어의 색상을 표현할 EPlayerColor 타입의 ejectionPlayerColor, 추방당한 플레이어가 임포스터인지 알려주는 bool 타입의 isImposter, 남아있는 임포스터의 수를 알려주는 int 타입의 remainImposterCount를 매개변수로 선언해줍니다.

이 함수에서는 먼저 isEjection 값에 따라서 출력될 텍스트를 만들어 주고 난 다음 오브젝트를 활성화시켜줍니다.

그 다음에는 ShowEjectionResult_Coroutine 함수를 만듭니다.

여기서는 글자가 순서대로 촤라락 보여지는 기능을 만들기 위해서 텍스트를 앞부분과 뒷부분으로 나눠줄 겁니다.

먼저 추방되는 플레이어의 여부에 따라서 플레이어 이미지의 색을 결정해줍니다.

그 다음에는 추방되는 캐릭터 이미지를 회전시키면서 날아가도록 코드를 작성합니다.

그리고 적당한 딜레이를 주면서 글자를 순서대로 출력하도록 만들어 줍니다.

코루틴 함수를 모두 작성한 다음에는 이 코루틴 함수를 Open 함수에서 호출하도록 만들어줍니다.

마지막으로 Close 함수를 만들어서 EjectionUI를 닫도록 코드를 작성합니다.

그 다음 작업으로는 투표가 끝난 이후에 이 EjectionUI를 호출해줘야 합니다.

우선 이 EjectionUI로 접근하기 쉽도록 IngameUIManager로 이동해서 EjectionUI를 캐싱해서 프로퍼티로 불러올 수 있도록 만들어 줍니다.

그 다음에는 GameSystem 스크립트를 열고 MeetingProcess_Coroutine 함수로 이동합니다.

이 코루틴 함수의 아래에 CalculateVoteResult_Coroutine 함수를 만들어 줍니다.

CalculateVoteResult_Coroutine 함수에서는 투표 결과를 계산해야 하는데 먼저 어느 플레이어가 가장 많은 표를 받았는지 확인해야 합니다.

플레이어들이 받은 표를 계산하여 정렬시키기 위해 IComparer 인터페이스를 상속받아서 CharacterVoteComparer라는 이름으로 클래스를 만들어줍니다.

IComparer 인터페이스를 상속받아서 Compare 함수를 구현하면 배열을 빠르게 정렬할 수 있습니다.

Comparer를 만든 다음에는 CalculateVoteResult_Coroutine 함수로 돌아가서 System.Array.Sort 함수에 players 배열과 방금 만든 CharacterVoteComparer를 넣어서 플레이어들을 받은 표 순서대로 정렬해줍니다.

그리고 남은 임포스터 수를 구해두고 제일 처음에는 표를 가장 많이 받은 플레이어의 받은 표 수와 스킵 표 수를 비교합니다.

스킵 표 수가 가장 많이 받은 표 수보다 많거나 같다면 플레이어는 추방당하지 않습니다.

그리고 가장 많은 표를 받은 플레이어와 2순위 플레이어가 동률인 경우도 추방이 이루어지지 않습니다.

마지막으로 스킵 표와 2순위 표보다 1순위 표가 많은 경우에는 1순위 플레이어를 추방해야 합니다.

이 CalculateVoteResult_Coroutine 함수는 서버에서 호출될 예정이기 때문에 클라이언트에서 EjectionUI를 열도록 만들어둘 RpcOpenEjectionUI 함수를 만들고 ClientRpc 어트리뷰트를 붙여줍니다.

그리고 여기서는 IngameUIManager를 통해서 EjectionUI에 접근해서 Open 함수를 호출해줍니다.

그 다음에는 CalculateVoteResult_Coroutine 함수로 돌아가서 각 상황에 맞게 RpcOpenEjectionUI 함수를 호출해줍니다.

RpcOpenEjectionUI 함수를 호출한 다음에는 플레이어가 추방당하는 분기에서 추방당한 플레이어를 죽음 처리해줘야 합니다.

Dead 함수를 호출하면 될 것 같은데, 현재 이 Dead 함수는 크루원이 임포스터에게 죽는 것을 전제로만 동작하게 되어 있으니 조금 수정이 필요해보입니다.

Dead 함수로 이동해서 매개변수에 bool 타입의 isEject 매개변수를 추가해주고 시체를 만드는 부분을 if문으로 묶어서 추방으로 죽은게 아닐 때만 동작하도록 만들어줍니다.

그리고 아래의 RpcDead 함수에도 같은 매개변수를 추가하고 KillUI가 isEject가 아닐 때만 호출되도록 수정해줍니다.

그리고 이 Dead 함수를 수정함으로써 발생하는 에러 역시 모두 수정해줍니다.

수정이 모두 끝나면 CalculateVoteResult_Coroutine 함수로 돌아가서 가장 많은 표를 받은 플레이어의 Dead 함수를 호출해주고 사망한 크루원의 시체들을 찾아서 제거해줍니다.

추방 작업이 끝나고나면 플레이어들이 다시 테이블 근처에 원형으로 배치되도록 만들어줘야 합니다.

GameReady 코루틴 함수를 보면 캐릭터들을 원형 테이블 근처에 배치하는 코드가 있을 겁니다.

이 코드를 블럭 선택해서 우클릭하고 [빠른 작업 및 리팩터링] 항목을 선택해서 [메서드 추출]로 새 함수로 만들어 줍니다.

그리고 이 함수를 CalculateVoteResult_Coroutine 함수에서 호출해줍니다.

그 다음에는 클라이언트에서 EjectionUI를 닫게 만들어줄 RpcCloseEjectionUI 함수를 만들고 ClientRpc 어트리뷰트를 붙여준 다음 EjectionUI의 Close 함수를 호출하게 만들어줍니다.

그리고 다시 플레이어의 캐릭터가 움직일 수 있게 myCharacter의 IsMoveable을 true로 바꿔줍니다.

완성된 RpcCloseEjectionUI 함수는 CalculateVoteResult_Coroutine 함수에서 모든 작업이 끝나고 일정 시간이 지나면 호출되게 만들어줍니다.

그리고 CalculateVoteResult_Coroutine 함수를 MeetingProcess_Coroutine 함수의 제일 아래에서 호출해줍니다.

아 마지막으로 MeetingUI가 닫히도록 만들어주기 위해서 MeetingUI 스크립트로 이동해서 Close 함수를 만들어주고 GameSystem의 RpcOpenEjectionUI 함수에서 호출해줍니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

씬 세팅과 테스트

에디터로 돌아온 다음에는 EjectionUI 오브젝트에 방금 생성한 컴포넌트를 부착하고 프로퍼티를 할당해줍니다.

그리고 캔버스에 붙어있는 IngameUIManager에 EjectionUI를 캐싱해줍니다.

작업이 끝난 다음에는 게임을 빌드해줍니다.

빌드가 완료되면 게임을 실행하고 테스트합니다.

테스트 해보면 아무도 추방하지 않은 경우, 임포스터가 아닌 플레이어를 추방했을 경우, 임포스터인 플레이어를 추방했을 경우, 모두 다른 문구가 나오는 것을 볼 수 있습니다.

아웃트로

이번에는 어몽어스 게임에서 투표 후에 플레이어가 추방되는 UI 연출과 그 처리를 해보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 에디터에 붙여진 버전 넘버링의 의미와 LTS에 대해서 알아봅시다!

 

타임라인

0:00 인트로

0:10 어느 버전의 유니티를?

1:10 유니티 버전과 시맨틱 버전 분류법

3:59 LTS

5:21 아웃트로

 

[투네이션 후원] https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://assetstore.unity.com/?aid=1100lkbzf

 

[디스코드 채널]

더 많은 질문이나 베르의 게임 개발 유튜브와 관련된 활동을 위한 디스코드 채널도 있습니다. 아래의 링크를 통해 방문하실 수 있습니다.

https://discord.gg/tqmRTy4pgk

 

# 참고자료

유의적 버전 2.0.0-ko2 - https://semver.org/lang/ko/

[인터뷰] 유니티 코리아 "엔진의 핵심 가치 '게임' 놓치지 않겠다” - https://www.inven.co.kr/webzine/news/?news=233326

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 유니티 엔진의 버전과 LTS라는 용어에 대해서 알아보도록 하겠습니다.

어느 버전의 유니티를?

우리는 유니티 엔진을 처음 배울 때 어떤 버전의 유니티를 설치해야 하는지 고민에 빠지게 됩니다.

먼저 유니티 허브에서 유니티 에디터를 설치하려고 해도 2018, 2019, 2020에 2021버전까지 있습니다.

그리고 사전 릴리즈 탭을 보면 2022 버전도 있죠.

거기에 유니티 홈페이지의 다운로드 아카이브에 가보면 각 연도별 버전마다 또 무수히 많은 세부 버전의 설치 파일들이 가득합니다.

그리고 버전 넘버링이 연도로 바뀌기 전의 3, 4, 5버전까지 있죠.

물론 이렇게 과거의 버전들이 제공되는 이유는 이전 버전의 유니티로 만들어진 프로젝트들을 지원하기 위한 것입니다.

오래된 버전의 유니티 엔진으로 만들어진 프로젝트를 정상적으로 열고 작업하기 위해서는 버전에 맞는 엔진을 설치해야 합니다.

하지만 새로운 프로젝트를 만들려는 사람은 가급적이면 최신 버전이며 안정적인 버전의 유니티 엔진을 다운로드 받아야 합니다.

그래야 최신으로 제공되는 기능과 가장 나은 비주얼로 안정적인 게임 개발이 가능하기 때문이죠.

유니티 버전과 시맨틱 버전 분류법

그럼 잠시 유니티 버전 숫자를 보도록 하겠습니다.

유니티의 다운로드 아카이브를 보면 초기에는 3, 4, 5와 같은 숫자를 사용했고 5 버전 후로는 2017과 같이 연도를 메인 버전 넘버로 사용했습니다.

유니티 3 다음에 4가 나오는데 1년, 유니티 4 다음에 5가 나오는데 3년 정도가 걸린 것을 보면 2017년 이후로는 매년 새로운 기능과 성능 향상으로 게임 엔진 계의 대격변을 일으키겠다는 포부가 엿보이는 것을 알 수 있습니다.

실제로도 2017 이후 버전들은 연도 버전이 바뀔 때마다 상당한 수준의 기능과 성능 개선이 있었습니다.

하지만 숫자 넘버에서 연도 넘버로 바뀐 것을 제외하고 보면 이 버전 넘버링에는 한 가지 공통점이 있습니다.

3.5.7 / 4.7.2 / 5.6.7 / 2017.4.40 / 2018.4.36 / 2019.4.34 / 2020.3.25 / 2021.2.7

어떤 공통점인지 알아채셨나요?

네, 맞습니다.

모든 버전 숫자가 3개로 나열되죠.

이런 방식으로 3개의 숫자로 버전을 표시하는 방식을 시맨틱 버전 분류법, 번역하면 유의적 버전 분류법이라고 합니다.

이 3개의 숫자 중에 첫 번째 숫자를 메이저(Major) 버전이라고 하고 이전 버전과 호환이 되지 않게 기능이 바뀌거나 추가되면 변경되는 숫자입니다.

두 번째 숫자는 마이너(Minor) 버전이라고 하고 이전 버전과 호환되면서 새로운 기능이 추가되면 변경되는 숫자입니다.

그리고 세 번째 숫자는 패치(Patch) 버전이라고 하고 이전 버전과 호환되면서 버그를 수정한 것이라면 변경되는 숫자입니다.

최신 버전의 유니티 엔진은 메이저 버전을 연도로 표시합니다.

이 부분은 앞에서 이야기 했듯이 유니티 측에서 매년 새로운 혁신을 이루어 내겠다는 포부로 볼 수 있지만, 약간의 문제는 업데이트 일정이 조금씩 밀리면서 연도 버전과 실제 연도가 일치하지 않는 경우가 현재 발생하고 있습니다.

이 버전 불일치 문제는 유니티 측에서도 인지하고 있고, 업데이트 일정을 조절해서 맞출 예정이라고 합니다.

그리고 두 번째 숫자인 마이너 버전은 유니티 5까지는 일관성이 없었지만 2017~2019까지는 1~4 사이의 숫자를 사용했습니다.

이 마이너 버전 1은 아직 에디터가 안정화되지 않은 베타 버전으로 안정화 단계에 따라서 버전이 올라가고 가장 안정화된 상태에서 장기 지원을 하는 버전에 버전 넘버 4를 붙여줍니다.

그리고 2020 버전이 이후에는 연도와 버전 넘버의 불일치를 되돌리기 위해 1~3까지만 버전 넘버를 사용하여 버전 넘버 3을 장기 지원 버전으로 하도록 변경했습니다.

그리고 마지막 패치 버전은 유니티 에디터에 자잘한 버그를 수정할 때마다 계속해서 올라가도록 되어 있습니다.

이런 버전 분류 방식으로 인해서 게임 개발 중인 유니티 프로젝트의 에디터 버전을 올릴 때는가급적이면 패치 버전과 마이너 버전까지만 올리도록 하고 메이저 버전을 바꿔야 한다면 프로젝트를 반드시 백업한 뒤에 버전을 올려서 문제가 없는지 확인해야 합니다.

LTS

그 다음으로 살펴볼 부분은 LTS입니다.

유니티 허브에서 다른 버전의 에디터를 설치하기 위해서 에디터 설치 버튼을 눌러보면 2020.3, 2019.4, 2018.4 버전 뒤에 LTS 라는 약자가 붙어있습니다.

버전 뒤에 붙어있는 이 LTS는 Long Term Support의 약자로 우리 말로는 장기 지원 버전이라고 합니다.

이런 장기 지원 버전은 연도 버전이 바뀐 이후에도 해당 연도의 LTS 버전이 최초로 릴리스된 날짜로부터 2년간 계속해서 매월 업데이트됩니다.

이런 식으로 장기 지원 버전을 만들어서 계속 업데이트를 해주는 이유는 이미 예전 버전의 에디터로 계속해서 진행해오던 프로젝트가 유니티 에디터의 바뀐 메이저 버전을 따라 무작정 버전을 올리면 어떤 문제가 발생할지 알 수 없기 때문에 이전 버전으로 개발하는 개발자들이 최대한 안정적으로 개발을 이어나갈 수 있게 하기 위해서 입니다.

그리고 유니티 엔진은 끊임없이 업데이트되는데, 버전 넘버링 중에 가장 앞자리인 연도 버전이 바뀔 때마다 유니티는 가장 많은 변화를 겪게 됩니다.

하지만 이 연도 버전이 처음 나온 시점인 1버전이나 2버전에서는 새로운 기능이 대거 들어와서 엔진이 조금 불안정한 상태가 됩니다.

그래서 새로운 연도 넘버링의 엔진은 곧바로 게임 개발에 사용하는 것보다는 새 버전의 엔진에 들어오는 기능을 테스트 해보는 용도로 사용하는 것이 좋습니다.

그리고 정식으로 게임을 개발할 때는 가장 최신의 LTS 버전인 에디터를 설치해서 개발하는 것을 추천합니다.

아웃트로

이번 영상에서는 유니티의 버전 넘버링과 LTS에 대해서 알아보았습니다.

이 강좌는 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번 강좌에서는 유니티 엔진에서 시간과 관련된 프로퍼티들을 제공하는 Time 클래스의 주요 프로퍼티에 대해서 알아봅시다. 본 강좌는 이전에 올라온 Time 클래스 관련 강좌를 하나로 묶은 것입니다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:11 detaTime

3:03 timeScale

4:37 unscaledDeltaTime

6:10 time

7:27 realtimeSinceStartup

8:53 timeSinceLevelLoad

9:56 아웃트로

 

[투네이션 후원]

https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61541

 

[디스코드 채널]

https://discord.gg/tqmRTy4pgk

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티 엔진에서 시간과 관련된 값들을 제공해주는 Time 클래스의 프로퍼티들에 대해서 알아보겠습니다.

deltaTime

제일 먼저 설명할 프로퍼티는 deltaTime 입니다.

먼저 deltaTime에서 delta는 보통 값의 차이를 의미하는 단어입니다.

시간을 의미하는 Time과 조합해서 생각해보면 deltaTime은 차이가 나는 시간이라는 뜻으로 지난 프레임이 완료되는 데까지 걸린 시간 차이를 의미하며 단위는 초 단위입니다.

한마디로 한 프레임을 진행하는데 걸린 시간이라는 뜻이죠.

그래서 게임을 진행하다가 컴퓨터 사양이나 게임의 최적화 문제로 게임의 프레임이 떨어지는 프레임 드랍 현상이 일어나면 이 deltaTime 값은 한 프레임의 화면을 렌더링하는데 걸리는 시간만큼 커지게 됩니다.

보통 30프레임 기준의 게임에서는 한 프레임당 deltaTime이 0.033정도가 나와야하고 60프레임 기준의 게임에서는 한 프레임당 0.016 정도가 나와야 합니다.

유니티 에디터에서 스크립트를 하나 생성하고 Start 함수에서 Application.targetFrameRate를 30으로 지정한 다음 Update 함수에서 Time.deltaTime을 디버그로 출력시키도록 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아가서 아무 게임 오브젝트에나 방금 만든 컴포넌트를 붙이고 게임을 실행해보면 앞에서 말한대로 약 0.033초에 가까운 값이 매 프레임마다 갱신되는 것을 볼 수 있습니다.

그리고 다시 스크립트에서 targetFrameRate를 60으로 변경하고 에디터로 돌아가서 테스트해보면 0.016초에 가깝게 deltaTime 값이 나오는 것을 확인할 수 있습니다.

그럼 이 delta time은 어디에 사용될까요?

그 예시를 보여드리도록 하겠습니다.

먼저 Update 함수에서 W키를 누르면 오브젝트를 이동시키는 코드를 작성해보겠습니다.

이 때 이동 코드에서 캐릭터의 이동 방향과 속도만 이용해서 캐릭터를 이동시키면 문제가 발생하게됩니다.

이 비교 영상처럼 프레임이 10일 때와 60일 때 캐릭터가 다른 속도로 움직이게 되는 겁니다.

이 문제의 원인은 프레임이 10일 때는 1초에 캐릭터를 10번 움직이게 되고, 프레임이 60일 때는 1초에 캐릭터를 60번 움직이기 때문입니다.

좀 더 풀어서 설명해보자면 이 코드에서는 프레임이 10일 때는 1의 속도로 캐릭터를 1초동안 10번 움직이기 때문에 이동한 거리가 10이 되는 것이고, 프레임이 60일 때는 1의 속도로 캐릭터를 1초동안 60번 움직이기 때문에 이동한 거리가 60이 됩니다.

1초 동안 움직인 횟수가 달라서 움직인 거리 역시 달라지는 것이죠.

이것은 컴퓨터의 성능이 오브젝트의 속도에 영향을 미치게 되는 것으로 보통의 게임에서는 발생해서는 안되는 문제입니다.

이 문제를 해결하기 위한 방법이 바로 이 이동 값에 delta time을 곱해주는 겁니다.

이렇게 이동 벡터에 delta time을 곱해주고 나면, 게임이 몇 프레임으로 진행되는지에 전혀 상관없이 오브젝트는 동일한 속도로 움직이게 됩니다.

이런 식으로 이동이나 회전 등 움직임에 있어서 시간의 영향을 받는 기능을 만들 때는 값에 deltaTime을 곱해서 흘러간 프레임 시간만큼만 가중치를 줌으로써 프로세서 속도의 영향에서 자유로워 지게됩니다.

timeScale

그 다음 프로퍼티는 timeScale 입니다.

time scale라는 프로퍼티의 이름을 단순하게 번역해보면 시간의 크기라는 뜻입니다.

이 값을 조절하면 시간이 흐르는 속도를 조절하여 시간이 빠르게 흐르거나 느리게 흐르게 만들 수 있습니다.

C# 스트립트를 하나 생성하고 스크립트 에디터를 엽니다.

스크립트 에디터가 열리고 나면 float 타입으로 timer 변수를 만들어줍니다.

그리고 Update 함수에서 timer 변수에 deltaTime 값을 누적시키며 더하고 그 timer 변수를 이용해서 오브젝트가 Sin 그래프를 따라서 움직이게 만들어 줍니다.

그 아래에는 키보드 화살 키를 눌러서 timeScale를 늘리거나 줄이는 코드를 작성합니다.

그리고 숫자 1을 누르면 timeScale를 1로 만들도록 해줍니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 이동합니다.

에디터로 이동한 다음에는 큐브 오브젝트를 생성하고 방금 만든 컴포넌트를 붙여줍니다.

이제 게임을 플레이시켜 보겠습니다.

게임이 시작되면 큐브가 왕복으로 움직이는 모습을 볼 수 있는데 이때 위쪽 화살표 키를 누르면 time scale이 커지면서 큐브의 움직임이 빨라집니다.

반대로 아래쪽 화살표 키를 누르면 time scale이 작아지면서 큐브의 움직임이 느려집니다.

그러다가 time scale이 0이 되면 움직임이 완전히 멈춥니다.

그리고 숫자 1 키를 누르면 time scale이 1이 되면서 원래의 속도로 움직입니다.

이런 식으로 time scale을 조절해서 슬로우 모션같은 연출을 할 수 있습니다.

unscaledDeltaTime

그 다음 알아볼 프로퍼티는 unscaledDeltaTime입니다.

delta time에 대해서 설명했을 때 이야기한 것처럼 delta time은 게임에서 플레이어의 입력과 게임 처리, 화면 렌더링 등의 작업이 한 번 처리되고 그 결과물이 플레이어의 모니터에 그려지는 한 프레임이 진행되는 시간을 의미합니다.

이 delta time에 unscaled를 붙임으로써 크기가 바뀌지 않은 delta time을 의미하게 됩니다.

time scale의 영향을 받지 않는 delta time인 것이죠.

새 C# 스크립트를 생성하고 앞에서 만든 컴포넌트에서 오브젝트를 이동시키는 코드를 복사해서 Update 함수에 붙여넣어줍니다.

그리고 timer에 더해주는 값을 deltaTime에서 unscaledDeltaTime으로 바꿔줍니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

그리고 씬에 새로운 3D 오브젝트를 배치하고 거기에 새로 만든 컴포넌트를 붙여줍니다.

그 다음 게임을 플레이시키면 거의 비슷한 속도로 움직이는 두 오브젝트가 보일 겁니다.

이 때 화살표 키를 눌러서 time scale을 조절하면 delta time으로 움직이는 오브젝트의 속도는 time scale의 영향을 받아 느려지거나 빨라지지만, unscaled delta time으로 움직이는 오브젝트의 속도는 전혀 영향을 받지 않고 동일한 속도로 움직이는 것을 볼 수 있습니다.

이런 식으로 어떤 오브젝트의 움직임이 time scale의 영향을 받지 않기를 원할 때는 unscaled delta time을 사용해야 합니다.

time scale과 delta time, unscaled delta time을 적절하게 조합해서 사용하면 특수한 스킬로 적들은 멈춰있거나 느려졌는데 플레이어만 정상적인 속도로 움직이는 기능을 연출할 수 있습니다.

time

그 다음 프로퍼티를 설명하기 전에 씬을 하나 새로 생성합니다.

Time 클래스의 프로퍼티인 time은 게임이 시작된 이후로부터 흐른 시간을 보여주는 프로퍼티입니다.

유니티 에디터에서 새 C# 클래스를 생성하고 스크립트 에디터를 열어줍니다.

비주얼 스튜디오가 열리고 나면 클래스의 상단에 UnityEngine.UI 네임스페이스를 using 선언해줍니다.

그리고 Text 타입으로 측정한 시간을 보여줄 timeText 변수를 선언해줍니다.

그 다음 Update 함수에서는 Time.time 값을 문자열로 만들어서 timeText로 출력하는 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아갑니다.

에디터에서는 Hierarchy 뷰에 우클릭해서 [UI > Text] 항목을 선택해서 텍스트 UI를 생성합니다.

그리고 Canvas 게임오브젝트에 방금 만든 컴포넌트를 붙인 뒤 Time Text 프로퍼티에 방금 만든 텍스트 UI를 할당해줍니다.

그 다음 게임을 플레이해보면 게임이 시작된 이후에 흐른 시간이 계속해서 올라가는 모습을 볼 수 있습니다.

realtimeSinceStartup

그 다음에 설명할 프로퍼티는 realtimeSinceStartup입니다.

이 realtimeSinceStartup 역시 time과 같이 게임이 시작된 이후로부터 흐른 시간을 보여주는 프로퍼티입니다.

그럼 이 realtimeSinceStartup 프로퍼티가 time 프로퍼티와 어떤 차이가 있는지 알아보겠습니다.

다시 스크립트로 돌아가서 Time.time을 출력하는 timeText에 realtimeSinceStartup도 함께 출력하도록 코드를 수정합니다.

그리고 키보드 화살표 키로 timeScale을 조절할 수 있는 코드를 작성합니다.

코드를 모두 수정한 다음에는 에디터로 돌아갑니다.

에디터로 돌아온 다음 게임을 플레이해보면 게임이 시작된 이후로 흐른 시간이 Time.time과 Time.realtimeSinceStartup 프로퍼티를 통해서 출력됩니다.

이 때 키보드의 화살표 키를 눌러서 time scale을 조절해보면 Time.time은 time scale 값에 따라 영향을 받지만 realtimeSinceStartup은 전혀 영향을 받지 않는 모습을 볼 수 있습니다.

거기에 추가로 게임을 잠시 일시정지시켰다가 플레이시켜보면 realtimeSinceStartup은 일시정지한 시간이 포함되어 값이 바뀐 것을 확인할 수 있습니다.

이렇게 게임이 시작된 시간 값을 출력하는 기능은 쓸데가 별로 없어보이지만, 게임을 실행한 시간을 기록해서 플레이어에게 업적을 준다던지, 너무 많은 시간동안 게임을 플레이하고 있는 유저가 있다면 경고문을 출력해주는 기능에 사용할 수 있습니다.

timeSinceLevelLoad

그리고 마지막으로 알아볼 프로퍼티는 timeSinceLevelLoad입니다.

이 프로퍼티는 마지막으로 씬이 로드된 이후로 흐른 시간을 의미합니다.

스크립트로 돌아가서 timeText에 timeSinceLevelLoad를 출력하는 코드를 추가합니다.

그리고 스크립트 상단에 UnityEngine.SceneManagement 네임스페이스를 using 선언하고 Update 함수에서 스페이스 키를 누르면 현재 씬을 다시 로드하도록 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아갑니다.

에디터에서는 빌드 세팅 창을 열어서 현재 씬을 Scenes In Build 목록에 추가해줍니다.

그 다음에 게임을 플레이해보면 time과 realtimeSinceStartup, 그리고 timeSinceLevelLoad 값이 동시에 상승하는 것을 확인할 수 있습니다.

이 때 스페이스 키를 누르면 현재 씬이 다시 로드되는데 time과 realtimeSinceStartup은 누적된 상태로 계속 증가하지만 timeSinceLevelLoad 값은 초기화되어서 0부터 다시 누적되는 모습을 볼 수 있습니다.

이 프로퍼티를 이용하면 던전 씬에 진입하고 난 이후에 플레이어가 던전을 클리어하는데 걸린 시간을 측정할 수 있습니다.

아웃트로

이번 영상에서는 Time 클래스의 여러 가지 프로퍼티에 대해서 알아보았습니다.

이 강좌는 구독자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

'Unity3D > Programming' 카테고리의 다른 글

[Unity] JSON  (0) 2022.04.05
[Unity] Time 클래스 통합본  (0) 2021.12.27
[Unity] Time.time & Time.realtimeSinceStartup & Time.timeSinceLevelLoad  (0) 2021.12.07
[Unity] timeScale과 unscaledDeltaTime  (0) 2021.11.29
[Unity] Time.deltaTime  (0) 2021.11.22
[Unity] 인보크(Invoke)  (0) 2021.07.12

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 프로젝트를 생성하고, 저장/불러오기하는 방법을 알아보겠습니다!

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:11 프로젝트 생성

2:09 프로젝트 저장

3:33 프로젝트 불러오기

4:25 아웃트로

 

[투네이션 후원] https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61541

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티 엔진을 설치한 이후에 프로젝트를 생성하고, 저장/불러오기 하는 방법에 대해서 알아보겠습니다.

프로젝트 생성

먼저 유니티 프로젝트를 생성하는 방법을 알아보겠습니다.

유니티 엔진 설치 강좌를 따라서 유니티 엔진을 설치했다면 유니티 허브를 실행합니다.

유니티 허브의 화면에서 새 프로젝트를 생성하기 위해서는 프로젝트 탭의 파란색 [새 프로젝트] 버튼을 클릭하면 됩니다.

[새 프로젝트] 버튼을 클릭하면 프로젝트 생성 단계로 넘어갈 수 있습니다.

프로젝트 생성 단계에서는 여러 가지를 결정할 수 있는데 먼저 상단의 에디터 버전을 선택하면 지금 만드는 프로젝트의 유니티 버전을 고를 수 있습니다.

여기에는 여러분이 컴퓨터에 설치해둔 모든 버전의 유니티 에디터가 표시되는데, 저는 지금 2020.3 버전만 설치해둔 상태라 이 버전만 보입니다.

유니티 에디터를 설치하면서 이야기 했듯이 보통의 경우에는 최신 버전의 LTS를 선택해주는게 가장 안정적입니다.

그 다음엔 템플릿입니다.

어떤 게임을 만들 것인지에 따라서 선택하면 되는데 가장 기본적인 템플릿은 2D와 3D입니다.

2D 게임을 만들 계획이라면 2D 템플릿을 선택하고, 3D 게임을 만들 계획이라면 3D 템플릿을 선택합니다.

보통은 템플릿 중에서 2D 템플릿과 3D 템플릿처럼 코어라고 표시된 템플릿을 선택해서 사용하면 됩니다.

코어 템플릿에는 2D와 3D 템플릿 이 외에도 VR 템플릿, AR 템플릿, 3D 모바일 템플릿, 2D 모바일 템플릿이 있습니다.

그 외의 템플릿들은 유니티의 기능을 배우거나 확인해보기 위한 샘플이나 학습 템플릿들입니다.

그 다음에는 프로젝트의 이름을 정하면 됩니다.

기본 이름은 My project로 지정되는데 같은 이름이 있다면 뒤에 넘버링이 추가됩니다.

다만 기본 이름을 사용하면 프로젝트가 많이 쌓이게 되었을 때 어떤게 어떤 프로젝트인지 찾기가 어려워지기 때문에 항상 프로젝트의 이름을 알아보기 쉽게 정하는 습관을 만들도록 합시다.

프로젝트 위치는 여러분이 찾기 쉬운 위치나 깃의 로컬 리포지토리가 될 곳을 지정해주면 됩니다.

이제 프로젝트 생성 버튼을 누르면 새로운 프로젝트가 생성됩니다.

프로젝트 저장

새로 만든 프로젝트의 생성이 완료되면 유니티 엔진 에디터가 실행됩니다.

유니티 에디터에서 작업한 것 중에 스크립트, 프리팹, 텍스처, 머티리얼 같은 에셋들은 프로젝트 뷰에서 보이고 게임의 레벨이라고 할 수 있는 씬의 내부에 배치된 오브젝트들은 씬 뷰와 하이어라키 뷰를 통해서 볼 수 있습니다.

프로젝트 뷰에서 에셋에 대한 작업은 대부분 수정 사항들이 곧바로 자동 저장되기 때문에 따로 신경쓸 필요는 거의 없습니다.

하지만 씬에서의 작업은 따로 저장하지 않고 잘못 끄면 작업 내용들이 전부 날아가버리는 문제가 발생할 수 있기 때문에 신경을 써주는 것이 좋습니다.

이렇게 씬에 오브젝트를 추가하거나 변경 사항이 생기면 하이어라키 뷰에서 씬의 이름 옆에 *모양이 표시되며 저장되지 않은 변경 사항이 있음을 알려줍니다.

앞에서도 말했다시피 저장을 제때하지 않으면 작업한 내용을 날리게 될 수 있으니 에디터를 종료하기 직전이나, 작업 내용이 만족스러워서 날아가면 안된다 싶은 생각이 드는 순간에는 항상 [Ctrl + S] 단축키를 눌러서 씬의 변경 사항을 저장해줍니다.

아니면 상단 메뉴 바에서 [File > Save] 항목을 선택해서 저장할 수도 있습니다.

추가로 에디터에서 게임이 플레이되고 있는 도중에는 씬의 변경사항을 저장할 수 없고 플레이 중에 수정한 내용은 플레이가 중단되면 바로 게임이 플레이되기 전으로 초기화 되기 때문에 씬에서 작업을 하기 전에는 게임이 플pre레이 중이 아닌지 잘 확인해야 합니다.

프로젝트 불러오기

그 다음에는 프로젝트를 다시 불러오는 방법을 배우기 위해 우선은 유니티 에디터를 종료하겠습니다.

그리고 다시 유니티 허브를 실행합니다.

프로젝트 목록의 최상단에 방금 전에 만든 프로젝트가 표시되는 것을 볼 수 있습니다.

여기서 원하는 프로젝트를 선택하면 이전에 작업하던 프로젝트를 다시 열어서 작업을 이어나갈 수 있습니다.

보통은 가장 최근에 실행한 프로젝트를 위로 오게 정렬을 하기 때문에 프로젝트를 오래동안 켜지 않으면 아래 쪽에 프로젝트가 내려가 있을 수도 있는데 그럴 때는 아래로 내려가서 프로젝트를 찾거나 검색을 이용해서 찾을 수 있습니다.

다만 가끔은 이 목록에서 프로젝트가 사라지는 경우도 있는데 그럴 때는 열기 버튼을 클릭하고 [열려는 프로젝트 선택] 대화상자에서 프로젝트를 직접 찾아서 선택해주면 됩니다.

아웃트로

이번 영상에서는 새 프로젝트 생성과 프로젝트 저장, 프로젝트를 다시 불러오는 방법에 대해서 알아보았습니다.

이 강좌는 구독자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 Time 클래스의 프로퍼티 중에서 time, realtimeSinceStartup, timeSinceLevelLoad에 대해서 알아보겠습니다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:14 Time.time

1:21 Time.realtimeSinceStartup

2:47 Time.timeSinceLevelLoad

3:57 아웃트로

 

[투네이션 후원]

https://toon.at/donate/637735212761460238

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

- 유니티 에셋스토어 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61541

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 Time 클래스의 프로퍼티 중에서 time과 realtimeSinceStartup, 그리고 timeSinceLevelLoad에 대해서 알아보도록 하겠습니다.

Time.time

Time 클래스의 프로퍼티인 time은 게임이 시작된 이후로부터 흐른 시간을 보여주는 프로퍼티입니다.

유니티 에디터에서 새 C# 클래스를 생성하고 스크립트 에디터를 열어줍니다.

비주얼 스튜디오가 열리고 나면 클래스의 상단에 UnityEngine.UI 네임스페이스를 using 선언해줍니다.

그리고 Text 타입으로 측정한 시간을 보여줄 timeText 변수를 선언해줍니다.

그 다음 Update 함수에서는 Time.time 값을 문자열로 만들어서 timeText로 출력하는 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아갑니다.

에디터에서는 Hierarchy 뷰에 우클릭해서 [UI > Text] 항목을 선택해서 텍스트 UI를 생성합니다.

그리고 Canvas 게임오브젝트에 방금 만든 컴포넌트를 붙인 뒤 Time Text 프로퍼티에 방금 만든 텍스트 UI를 할당해줍니다.

그 다음 게임을 플레이해보면 게임이 시작된 이후에 흐른 시간이 계속해서 올라가는 모습을 볼 수 있습니다.

Time.realtimeSinceStartup

그 다음에 설명할 프로퍼티는 realtimeSinceStartup입니다.

이 realtimeSinceStartup 역시 time과 같이 게임이 시작된 이후로부터 흐른 시간을 보여주는 프로퍼티입니다.

그럼 이 realtimeSinceStartup 프로퍼티가 time 프로퍼티와 어떤 차이가 있는지 알아보겠습니다.

다시 스크립트로 돌아가서 Time.time을 출력하는 timeText에 realtimeSinceStartup도 함께 출력하도록 코드를 수정합니다.

그리고 키보드 화살표 키로 timeScale을 조절할 수 있는 코드를 작성합니다.

코드를 모두 수정한 다음에는 에디터로 돌아갑니다.

에디터로 돌아온 다음 게임을 플레이해보면 게임이 시작된 이후로 흐른 시간이 Time.time과 Time.realtimeSinceStartup 프로퍼티를 통해서 출력됩니다.

이 때 키보드의 화살표 키를 눌러서 time scale을 조절해보면 Time.time은 time scale 값에 따라 영향을 받지만 realtimeSinceStartup은 전혀 영향을 받지 않는 모습을 볼 수 있습니다.

거기에 추가로 게임을 잠시 일시정지시켰다가 플레이시켜보면 realtimeSinceStartup은 일시정지한 시간이 포함되어 값이 바뀐 것을 확인할 수 있습니다.

이렇게 게임이 시작된 시간 값을 출력하는 기능은 쓸데가 별로 없어보이지만, 게임을 실행한 시간을 기록해서 플레이어에게 업적을 준다던지, 너무 많은 시간동안 게임을 플레이하고 있는 유저가 있다면 경고문을 출력해주는 기능에 사용할 수 있습니다.

Time.timeSinceLevelLoad

그리고 마지막으로 알아볼 프로퍼티는 timeSinceLevelLoad입니다.

이 프로퍼티는 마지막으로 씬이 로드된 이후로 흐른 시간을 의미합니다.

스크립트로 돌아가서 timeText에 timeSinceLevelLoad를 출력하는 코드를 추가합니다.

그리고 스크립트 상단에 UnityEngine.SceneManagement 네임스페이스를 using 선언하고 Update 함수에서 스페이스 키를 누르면 현재 씬을 다시 로드하도록 코드를 작성합니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 돌아갑니다.

에디터에서는 빌드 세팅 창을 열어서 현재 씬을 Scenes In Build 목록에 추가해줍니다.

그 다음에 게임을 플레이해보면 time과 realtimeSinceStartup, 그리고 timeSinceLevelLoad 값이 동시에 상승하는 것을 확인할 수 있습니다.

이 때 스페이스 키를 누르면 현재 씬이 다시 로드되는데 time과 realtimeSinceStartup은 누적된 상태로 계속 증가하지만 timeSinceLevelLoad 값은 초기화되어서 0부터 다시 누적되는 모습을 볼 수 있습니다.

이 프로퍼티를 이용하면 던전 씬에 진입하고 난 이후에 플레이어가 던전을 클리어하는데 걸린 시간을 측정할 수 있습니다.

아웃트로

이번 영상에서는 Time 클래스의 프로퍼티 중에서 time과 realtimeSinceStartup, 그리고 timeSinceLevelLoad에 대해서 알아보았습니다.

이 강좌는 구독자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

'Unity3D > Programming' 카테고리의 다른 글

[Unity] JSON  (0) 2022.04.05
[Unity] Time 클래스 통합본  (0) 2021.12.27
[Unity] Time.time & Time.realtimeSinceStartup & Time.timeSinceLevelLoad  (0) 2021.12.07
[Unity] timeScale과 unscaledDeltaTime  (0) 2021.11.29
[Unity] Time.deltaTime  (0) 2021.11.22
[Unity] 인보크(Invoke)  (0) 2021.07.12

+ Recent posts