씬이 바뀌어도 오브젝트가 파괴되지 않게 해주는 DontDestroyOnLoad | 유니티

  Рет қаралды 9,098

WER's GAME DEVELOP YOUTUBE

WER's GAME DEVELOP YOUTUBE

Күн бұрын

씬을 이동해도 파괴되지 않는 게임 오브젝트를 만들기 위해서 DontDestroyOnLoad 기능을 사용하는 방법을 알아봅시다.
타임라인
0:00 인트로
0:23 - 씬 이동을 이동할 때 게임 오브젝트 파괴되는 예시 구현해보기
1:14 - 씬을 이동해도 게임 오브젝트가 파괴되지 않게하는 DontDestroyOnLoad 사용 방법
2:08 - DontDestroyOnLoad 오브젝트 파괴 방법
2:31 - DontDestroyOnLoad 기능 사용시 주의점
4:24 - 주의점 해결 방법 1 : 중복 검사 후 파괴하기
4:58 - 주의점 해결 방법 2 : 초기화 씬 만들기
5:19 - 주의점 해결 방법 3 : 컨테이너로 라이프 사이클 관리하기
본 영상의 오프닝은 비디오몬스터를 이용해서 만들어졌습니다.
videomonster.com/
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
- 유니티 에셋스토어 : prf.hn/l/vJl41D5
- 유니티 플러스 : prf.hn/l/wLNyJZG
- 유니티 프로 : prf.hn/l/qXOybmp
[투네이션]
toon.at/donate/63773521276146...
[Patreon]
/ wergamedevchan
#유니티강좌 #DontDestroyOnLoad #게임만들기 #Unity #유니티 #유니티엔진 #게임엔진 #베르 #베르의프로그래밍노트

Пікірлер: 30
@choiwol0729
@choiwol0729 3 жыл бұрын
좋은 영상이네요 감사합니다 좋은 거 배우고 갑니다 :)
@user-ns4yg9lp7o
@user-ns4yg9lp7o 2 жыл бұрын
와 진짜 이런거 알려주시는 분 은 베르님 밖에 없는거 같아요.. 와 진짜 너무 감사합니다
@BinderColor
@BinderColor Жыл бұрын
강의 보는 중 질문드립니다 만약에 씬 1에서 DontDestroyOnLoad된 오브젝트가 씬 2를 거쳐 씬 3에서 파괴되게 하려면 어떻게 해야 할까요 ? 대부분의 영상들에서 DontDestroyOnLoad가 씬 2개에서 움직여서 한 번 질문드려봅니다 !
@user-fd3fy5fl8o
@user-fd3fy5fl8o 3 жыл бұрын
와우 감사합니다.
@ooj5652
@ooj5652 3 жыл бұрын
안녕하세요 매번 영상 보며 공부하고 있는 학생인데 여쭤볼 것이 있어서요! 현재 여러 가지 힌트를 조합하여 보스를 물리치는 아케이드 추리 게임을 만들고 있는데 씬은 4가지이며, 1층, 2층, 3층, 계단으로 제작했습니다. 각 층에는 여러 가지의 힌트들이 있는데 예를 들어 1층에서 힌트를 얻고, 2층에 갔다가 1층으로 돌아왔을 때 데이터를 유지(각 방의 문을 열고 갔으면 열린 채로 있거나, 얻은 힌트는 사라지고, 얻지 못한 힌트는 그 자리에 있도록) 하고 싶은데 어떻게 해야 할까요?
@wergia
@wergia 3 жыл бұрын
게임 진행 상황을 저장할 수 있는 객체를 만들어야겠죠? 영상처럼 DontDestroyOnLoad로 지정된 오브젝트에 저장하는 방법도 있고 static 클래스에 저장하는 방법도 있을 겁니다. 그렇게 저장되어 있는 값을 다른 층으로 이동했을 때 불러와서 세팅해주면 될 거에요!
@jaewonlee4480
@jaewonlee4480 4 жыл бұрын
안녕하세요, 영상 잘보고 있습니다! 저는 약간 다른 문제인데 하나의 scene(1) 에서 스코어를 저장하고 다음 scene(2) 에서 그 스코어를 표기하고 그대로 가져와 표기하고 싶은데, 그 스코어들을 Script(1) 에 public int score1로 저장을 했는데, 그 스코어를 Script(2)에서 불러오게 해서 scene2에 보여지게 하고싶은데 혹시 이때도 DontDestoryOnLoad 사용이 가능한가요? 감사합니다 :)
@wergia
@wergia 4 жыл бұрын
음 차라리 Script(1)을 DontDestroyOnLoad로 만들어서 scene(2)에서도 사용하는게 어떨까 싶네요. scene(1)에서는 Script(1)을 쓰고 scene(2)에서는 Script(2)를 사용하는 구조를 완전히 유지하고 싶다면 1. DontDestroy로 된 중간 오브젝트를 만들어서 Script(1) -> 중간 오브젝트 -> Script(2) 로 전달하는 구조를 만들던지 2. Script(1)의 public int score1을 public static int score로 정적 변수로 만들어서 객체 생성과 관계없이 Script(2)에서 꺼내서 쓸 수 있게 만들던지(단, static은 모든 Script(1) 클래스의 객체들이 공유하기 때문에 여러 Script(1) 오브젝트의 점수를 저장하지 못하게 될 겁니다.) 3. 다른 방법은 각 스테이지별 점수를 저장하는 static 객체를 만들어서 scene(1)의 Script(1)에서는 Scorer.scene1Score = 10;으로 접근해서 저장하고 scene(2)의 Script(2)에서는 Scorer.scene2Score = Scorer.scene1Score 식으로 가져와서 사용하는 방법 정도가 당장 생각나네요. 구조는 얼마든지 자유롭게 생각하시면 됩니다. 그 중에서 가장 적절하다고 생각하는 구조를 선택하시면 됩니다.
@JASON-wy4lk
@JASON-wy4lk Жыл бұрын
DontDestoryObject가 중복되지 않고 하나만 생기도록 하는것은 가능하나 GameManager처럼 참조가 많이 있는 오브젝트의 경우 씬을 전환하면 참조가 다 끊긴 GameManager오브젝트를 남기고 참조가 연결되어 있었던 GameManager 오브젝트를 Destroy하게 되는데요 해결법이 있을까요?
@wergia
@wergia Жыл бұрын
여러가지 방법이 있을 수 있습니다. 간단한 방법을 생각해보자면 게임 매니저가 생성될 당시의 시간을 기록해두고 새로운 게임 매니저가 생성되면 생성 시간을 비교해서 제일 오래된 게임 매니저만 남기고 다른 오브젝트들을 제거하는 방법이 있을 수 있습니다.
@ryanson739
@ryanson739 2 жыл бұрын
좋은 강의 감사합니다^^ 실무에서는 어떤 상황에서 DontDestoryObject를 사용하나요? 실제 사용 케이스가 궁금합니다.
@wergia
@wergia 2 жыл бұрын
보통 여러 씬에 걸쳐서 오브젝트를 유지해야 될 때 사용합니다. 특히 하드웨어와 연결되는 오브젝트를 유지할 때 사용합니다.
@old_cleanwater
@old_cleanwater 11 ай бұрын
GameManager 스크립트가 들어있는 오브젝트를 DontDestroyOnLoad 로 사용하는 경우도 있을까요?
@skdngs
@skdngs 3 жыл бұрын
안녕하세요!DontDestroyObject사용 후 시작 씬으로 되돌아갈때마다 계속 타이머나 체력이 누적되어서 이를 해결할 방법을 찾다가 베르님 영상을 보게되었습니다🥺 이렇게 댓글을 작성하게된 이유는 if(objs.Length == 1) 부분에서 Length 에 빨간 줄이 그어지며, DontDestroyObject에는 Length에 대한 정의가 포함되어있지않고 DontDestroyObject 형식의 첫 번째 인수울 허용하는 액세스 가능한 확장 메서드 Length가 없다고 떠서인데요😭😭해결방법을 알수있을까하여 이렇게 댓글달아 여쭈어봅니다ㅠㅠ!
@wergia
@wergia 3 жыл бұрын
objs를 찾은 함수 이름이 어떻게 되나요? FindObjectOfType 인지 FindObjectsOfType 인지 확인해보세요. s가 붙어있는 함수를 써야 해당 컴포넌트가 붙어있는 모든 오브젝트를 찾아서 배열로 줍니다. 그래야 Length 프로퍼티를 사용할 수 있어요.
@skdngs
@skdngs 3 жыл бұрын
@@wergia 알람이 안떠 늦게확인합니다🥺🥺답글주셔서 너무감사드립니다 헉 그러네요 몇번 검토했는데도 발견하지못한 오타...........한번에 콕 찝어줏셔서 넘 감사드립니다🙇‍♀️!!!!///!!!
@민즈
@민즈 5 ай бұрын
혹시 UI오브젝트들도 되는법이 있을까요...
@wkwldwldskful
@wkwldwldskful 3 жыл бұрын
와.. 찾던 기능인데 이렇게 찾을 줄이야. 제가 구현하다가 약간의 오류?가 생겨서 이렇게 댓글을 남깁니다. 캐릭터를 DontDestroyOnLoad기능을 이용해서 씬이 넘어가도 삭제되지 않게 만들었는데, 씬이 바뀌면 캐릭터가 자꾸 떨어지더라구요... 무엇이 문제인지 잘 모르겠어서 이렇게 댓글을 남깁니다
@wergia
@wergia 3 жыл бұрын
캐릭터가 이동된 다음 위치 문제인 듯 하네요 씬을 이동한 다음에 캐릭터를 씬의 시작 지점으로 재이동시키는 기능을 추가해보세요
@user-kc4mr9ot8p
@user-kc4mr9ot8p 4 жыл бұрын
유익한 강의 감사합니다! 1번째 방식으로 따라했는데, 오브젝트가 하나로 유지되는 건 성공했는데, 안에 연결되어있던 게임매니저가 사라졌습니다ㅠㅠ 이럴 땐 어떻게 해야하나요?
@wergia
@wergia 4 жыл бұрын
안에 연결되어 있는 게임 매니저도 게임오브젝트였다면 아마 사라질 겁니다. 게임 매니저 역시 사라지지 않으려면 DontDestoryOnLoad로 설정해줘야 합니다.
@user-kc4mr9ot8p
@user-kc4mr9ot8p 4 жыл бұрын
@@wergia 게임매니저가 유지되는 건 성공했는데... 씬2에서 씬1으로 넘어갈 때 Time.timeScale = 0으로 두었다가 씬1에서 다시 Time.timeScale = 1를 하도록 하는데 이게 작동을 안 합니다.... 그래서 다시 씬 2로 이동이 안 됩니다.... ㅠㅠ
@wergia
@wergia 4 жыл бұрын
@@user-kc4mr9ot8p Time.timeScale = 1을 어디서 호출하고 있나요?
@user-kc4mr9ot8p
@user-kc4mr9ot8p 4 жыл бұрын
@@wergia 씬1의 awake에서 호출하고 있습니다
@user-kc4mr9ot8p
@user-kc4mr9ot8p 4 жыл бұрын
지금 2번째 스트립트에는 void Awake() { var obj = FindObjectsOfType(); if (obj.Length == 1) { DontDestroyOnLoad(gameManager); DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); Destroy(gameManager); } } 가 있고 1번쨰 스크립트에는 void Awake() { Time.timeScale = 1; rigid = GetComponent(); SpriteRenderer = GetComponent(); anim1 = GetComponent(); } 이렇게 되어있습니다 스프라이트랜더만 작동하는 걸 봐선 타임이 0으로 되어있는 것 같아서 추가로 적어요,,,ㅠㅠ
@user-nr8nm2ud9r
@user-nr8nm2ud9r 2 жыл бұрын
너가 최고야!
@wergia
@wergia 4 жыл бұрын
아 썸네일...
유니티에서 싱글톤 패턴 구현하기 | 유니티
7:56
베르의 게임 개발 유튜브
Рет қаралды 11 М.
오브젝트 풀링 구현하기 | 유니티
14:50
베르의 게임 개발 유튜브
Рет қаралды 15 М.
Каха заблудился в горах
00:57
К-Media
Рет қаралды 8 МЛН
Spot The Fake Animal For $10,000
00:40
MrBeast
Рет қаралды 177 МЛН
Dear Game Developers, Stop Messing This Up!
22:19
Jonas Tyroller
Рет қаралды 698 М.
[Unity/MiddleClass] Make a function to move the character to the clicked position
13:09
베르의 게임 개발 유튜브
Рет қаралды 14 М.
How to Sort 2D Sprites by Pivot Point for 2D Unity URP Top Down Games
8:26
유니티 JSON 저장과 불러오기 ! (Save and load tutorial using Unity JSON)
25:30
NK Studio의 유니티 스페셜 테크닉
Рет қаралды 12 М.
코루틴 다루기 (1) - 코루틴 기초 | 유니티
7:40
베르의 게임 개발 유튜브
Рет қаралды 15 М.
이로써 프랑스는 죽었다
16:10
GROUND C 그라운드씨
Рет қаралды 262 М.
Making My Own Programming Language and Coding a Game in It
10:19
AstroSam
Рет қаралды 1,2 МЛН
Simple Drag Drop (Unity Tutorial for Beginners)
10:31
Code Monkey
Рет қаралды 320 М.
Tierlisting the BEST (and worst) GAME ENGINES
33:51
BiteMe Games
Рет қаралды 210 М.
How to ACTUALLY get into Gamedev
14:01
DaFluffyPotato
Рет қаралды 706 М.
Каха заблудился в горах
00:57
К-Media
Рет қаралды 8 МЛН