Top 39 유니티 씬 전환 데이터 전달 The 188 Latest Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 유니티 씬 전환 데이터 전달 on Google, you do not find the information you need! Here are the best content compiled and compiled by the toplist.prairiehousefreeman.com team, along with other related topics such as: 유니티 씬 전환 데이터 전달 유니티 DontDestroyOnLoad, 유니티 씬 복사, 유니티 다중 씬 전환, 유니티 맵 전환, 유니티 씬 개수, 유니티 DontDestroyOnLoad 해제, 유니티 데이터 관리, 유니티 스테이지 이동


Unity C# : Using Data in different scene
Unity C# : Using Data in different scene


유니티 씬 변경시 데이터와 gameObject 유지

  • Article author: velog.io
  • Reviews from users: 553 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 유니티 씬 변경시 데이터와 gameObject 유지 유니티에서 씬이 변경 될 때는 일반적으로 모든 데이터가 소실된다. 씬이 변경되더라도 유지되어야 하는 데이터는 어떻게 처리할까? …
  • Most searched keywords: Whether you are looking for 유니티 씬 변경시 데이터와 gameObject 유지 유니티에서 씬이 변경 될 때는 일반적으로 모든 데이터가 소실된다. 씬이 변경되더라도 유지되어야 하는 데이터는 어떻게 처리할까? 유니티에서 씬이 변경 될 때는 일반적으로 모든 데이터가 소실된다. 씬이 변경되더라도 유지되어야 하는 데이터는 어떻게 처리할까?첫씬에서 유지되어야 하는 데이터를 가지는 빈 오브젝트를 생성한다.public static키워드로 전역에서 참조할 수 있는 객체의 인스턴스를 선언
  • Table of Contents:
유니티 씬 변경시 데이터와 gameObject 유지
유니티 씬 변경시 데이터와 gameObject 유지

Read More

unity 변수/함수/오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad)

  • Article author: foxtrotin.tistory.com
  • Reviews from users: 41063 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about unity 변수/함수/오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad) 유니티에서 씬에서 씬으로 변수나 함수를 못 넘기는 이유가, 씬이 … 붙어있는 스크립트든 정보를 가져와서 쓰면 씬끼리 데이터 공유가 되는 것. …
  • Most searched keywords: Whether you are looking for unity 변수/함수/오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad) 유니티에서 씬에서 씬으로 변수나 함수를 못 넘기는 이유가, 씬이 … 붙어있는 스크립트든 정보를 가져와서 쓰면 씬끼리 데이터 공유가 되는 것. 지금 씬(Stage)는 스테이지 선택 창임 여기서 스테이지를 클릭하면 Scene1에다가 현재 클릭된 스테이지 번호를 넘겨주고, 그 번호의 스테이지를 실행하게 해주고 싶다 그러면 ‘스테이지 번호’ 변수가 다른 씬으로..
  • Table of Contents:

안 쓰던 블로그

unity 변수함수오브젝트 다른 씬에서 접근 공유하기(DontDestroyOnLoad) 본문

티스토리툴바

unity 변수/함수/오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad)
unity 변수/함수/오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad)

Read More

유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity]

  • Article author: luv-n-interest.tistory.com
  • Reviews from users: 1831 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity] 그래서 사람들은 포기하지 않고 다른 방법을 생각해낸다. -GameControl , a special GameObject. 새로운 오브젝트를 만든다. 씬 간의 이동에도 … …
  • Most searched keywords: Whether you are looking for 유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity] 그래서 사람들은 포기하지 않고 다른 방법을 생각해낸다. -GameControl , a special GameObject. 새로운 오브젝트를 만든다. 씬 간의 이동에도 … 참고링크를 내 방식대로 해석했다. 게임이라면 꺼서 지금까지의 기록이 사라지면 안된다. 만약 예전에도… 자동저장이 있었다면 누나와 싸우지 않지 않았을까?? 게임을 중간에 끄더라도… 아무 기분이 상하지 않..기술: C++, C#, Unity, Unreal, DX ++ devops k8s
    관심분야: 새로운 컨텐츠를 구현하는게 제일 재밌는 것 이라고 생각하고 있으며 이미 있는 것에 대해 최적화 또는 리팩토링하는데에 관심이 있습니다(엔진 튜닝 또는 커스터마이징) 하지만 개발은 항상 힘이 듭니다. 그래서 포기하고 싶을 때도 많지만 내일 또다시 시도해봅니다.
    요즘엔 새로운 것에 눈을 떴습니다.
  • Table of Contents:

유니티에서 데이터 관리하는 법How To Handle Data Between Scenes [Unity]

-Data Persistence 데이터의 지속성이 필요하다

-PlayerPrefs an easy way but not the best

-GameControl a special GameObject

새로운 오브젝트를 만든다

그 오브젝트는 어차피 씬 넘어가면 없어지지 않느냐

DontDestroyOnLoad method

우리는 값을 접근할 수 있게끔 첫 번째 씬에서 참조자를 만든다 치자

그럼 다른 씬에서는 어떻게 그 오브젝트에 접근을 해야할까

Static Reference

Prefab is the way

ControlManager

티스토리툴바

유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity]
유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity]

Read More

Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다. : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 13843 ⭐ Ratings
  • Top rated: 4.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다. : 네이버 블로그 위의 유니티 매뉴얼을 보게 된다면, First Scene Load 부분의 3가지를 확인해야한다. Awake. OnEnable. OnLevelWasLoaded( 이제 사용 안하는 것을 … …
  • Most searched keywords: Whether you are looking for Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다. : 네이버 블로그 위의 유니티 매뉴얼을 보게 된다면, First Scene Load 부분의 3가지를 확인해야한다. Awake. OnEnable. OnLevelWasLoaded( 이제 사용 안하는 것을 …
  • Table of Contents:

카테고리 이동

Doko

이 블로그 
Unity
 카테고리 글

카테고리

이 블로그 
Unity
 카테고리 글

Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다. : 네이버 블로그
Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다. : 네이버 블로그

Read More

유니티 unity ] 씬(Scene)간의 데이터 전달

  • Article author: onepinetwopine.tistory.com
  • Reviews from users: 18089 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 유니티 unity ] 씬(Scene)간의 데이터 전달 유니티 unity ] 씬(Scene)간의 데이터 전달. 언제나 변함없이 2019. 6. 17. 00:42. 반응형. public PrintScore : MonoBehaviour { vo Start() … …
  • Most searched keywords: Whether you are looking for 유니티 unity ] 씬(Scene)간의 데이터 전달 유니티 unity ] 씬(Scene)간의 데이터 전달. 언제나 변함없이 2019. 6. 17. 00:42. 반응형. public PrintScore : MonoBehaviour { vo Start() … public class PrintScore : MonoBehaviour { void Start() { if(Question2_Score.test == 2) { result_score1.text = “Score : ” + Question2_Score.score .ToString() + “점”; } if(Question3_Score.test == 3) {..
  • Table of Contents:

한 걸음 두 걸음

유니티 unity ] 씬(Scene)간의 데이터 전달 본문

유니티 unity ] 씬(Scene)간의 데이터 전달
유니티 unity ] 씬(Scene)간의 데이터 전달

Read More

유니티 씬 전환시 오브젝트 유지하기 DontDestroyOnLoad 간단한 예제 유니티 기초

  • Article author: young-94.tistory.com
  • Reviews from users: 45270 ⭐ Ratings
  • Top rated: 4.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 유니티 씬 전환시 오브젝트 유지하기 DontDestroyOnLoad 간단한 예제 유니티 기초 새로이 씬을 로드해도 if 문에서 변경하였던 변수의 값이 유지되는 것입니다. 이제 완성된 Stage_2 씬을 사용하기 위해 Build Settings에 들어간 뒤. …
  • Most searched keywords: Whether you are looking for 유니티 씬 전환시 오브젝트 유지하기 DontDestroyOnLoad 간단한 예제 유니티 기초 새로이 씬을 로드해도 if 문에서 변경하였던 변수의 값이 유지되는 것입니다. 이제 완성된 Stage_2 씬을 사용하기 위해 Build Settings에 들어간 뒤. 이번 예제는 씬 전환 포스팅에 이어서 진행됩니다. 유니티에서 새로운 씬을 로드하게 되면 앞서 사용하던 씬의 내용은 사라지게 됩니다. 그런데 여기서 RPG 게임을 생각해 보면 Player처럼 새로운 씬이 시작되었..나도 잘 몰라..
  • Table of Contents:
유니티 씬 전환시 오브젝트 유지하기 DontDestroyOnLoad 간단한 예제 유니티 기초
유니티 씬 전환시 오브젝트 유지하기 DontDestroyOnLoad 간단한 예제 유니티 기초

Read More

Scene 전환시 데이터 유지와 설계 질문 – 인프런 | 질문 & 답변

  • Article author: www.inflearn.com
  • Reviews from users: 45220 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Scene 전환시 데이터 유지와 설계 질문 – 인프런 | 질문 & 답변 설계는 개발자 마음대로라지만 Rookiss님이 게임을 만드신다면 어떻게 설계하실지 궁금합니다. course. [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] … …
  • Most searched keywords: Whether you are looking for Scene 전환시 데이터 유지와 설계 질문 – 인프런 | 질문 & 답변 설계는 개발자 마음대로라지만 Rookiss님이 게임을 만드신다면 어떻게 설계하실지 궁금합니다. course. [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] … 안녕하세요 ㅎㅎ

    강의를 들으며 토이프로젝트로 조그마한 게임을 하나 만들고 있습니다. 몇 가지 궁금한 점이 생겨 질문드립니다.

    Q1.1) 아래 사진은 루카노르 백작 이라는 게임입니다.
    캐릭터가 위의 문을 열고 들어가면 빌런인 염소가 존재합니다. 문제는 이 방을 나갔다 새…

  • Table of Contents:
Scene 전환시 데이터 유지와 설계 질문 - 인프런 | 질문 & 답변
Scene 전환시 데이터 유지와 설계 질문 – 인프런 | 질문 & 답변

Read More

유니티 씬(Scene)과 씬 전환 (Scene Transition)

  • Article author: notyu.tistory.com
  • Reviews from users: 28908 ⭐ Ratings
  • Top rated: 3.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 유니티 씬(Scene)과 씬 전환 (Scene Transition) LoadSceneAsync()은 AsyncOperation 클래스를 리턴 값으로 전달한다. AsyncOperation 프로퍼티로 현재 씬의 호출 상태를 알수 있다. 아래는 각 프로퍼티에 … …
  • Most searched keywords: Whether you are looking for 유니티 씬(Scene)과 씬 전환 (Scene Transition) LoadSceneAsync()은 AsyncOperation 클래스를 리턴 값으로 전달한다. AsyncOperation 프로퍼티로 현재 씬의 호출 상태를 알수 있다. 아래는 각 프로퍼티에 … 1. 씬 (Scene) 경찰, 범죄 등과 관련된 영화나 드라마를 보게 되면, Crime Scene이라는 노란색 테이프로 현장을 막아놓은 장면들이 나온다. 범죄에 사용된 물건, 사물 등이 존재하는 사건 현장이 씬이다. 씬은 캐..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

유니티 씬(Scene)과 씬 전환 (Scene Transition)
유니티 씬(Scene)과 씬 전환 (Scene Transition)

Read More

JS Mobile Blog :: [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법

  • Article author: jsmobile.tistory.com
  • Reviews from users: 36596 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about JS Mobile Blog :: [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법 [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법. 1. 정적 클래스 생성한다. – 정적 클래스 만들때, … …
  • Most searched keywords: Whether you are looking for JS Mobile Blog :: [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법 [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법. 1. 정적 클래스 생성한다. – 정적 클래스 만들때, … [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법 1. 정적 클래스 생성한다. – 정적 클래스 만들때, 클래스명 뒤에 자동으로 붙여지는 “MonoBehaviour” 은 지우고, start(), update() 도 지운다. 2. 다음과 같이 s..Game, Mobile Game, Smartphone application, Smart Device Game
  • Table of Contents:
[유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법

티스토리툴바

JS Mobile Blog :: [유니티 3D]  씬 넘어갈 때 데이터 전송하는 방법
JS Mobile Blog :: [유니티 3D] 씬 넘어갈 때 데이터 전송하는 방법

Read More

씬이 바뀌어도 유지되는 게임오브젝트를 위한 DontDestroyOnLoad() [유니티|Unity] :: 블메의 코딩하는 공간

  • Article author: bluemeta.tistory.com
  • Reviews from users: 16139 ⭐ Ratings
  • Top rated: 4.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 씬이 바뀌어도 유지되는 게임오브젝트를 위한 DontDestroyOnLoad() [유니티|Unity] :: 블메의 코딩하는 공간 대표적으로 싱글턴 인스턴스 – GameManager가 있습니다. 게임을 통틀어서 계속 유지해야만 하는 데이터 – 구조체(게임 설정 등) 역시 마찬가지입니다. …
  • Most searched keywords: Whether you are looking for 씬이 바뀌어도 유지되는 게임오브젝트를 위한 DontDestroyOnLoad() [유니티|Unity] :: 블메의 코딩하는 공간 대표적으로 싱글턴 인스턴스 – GameManager가 있습니다. 게임을 통틀어서 계속 유지해야만 하는 데이터 – 구조체(게임 설정 등) 역시 마찬가지입니다. 1. 씬이 바뀌어도 유지해야만 하는 게임오브젝트?  대표적으로 싱글턴 인스턴스 – GameManager가 있습니다. 게임을 통틀어서 계속 유지해야만 하는 데이터 – 구조체(게임 설정 등) 역시 마찬가지입니다.  레벨이..
  • Table of Contents:
씬이 바뀌어도 유지되는 게임오브젝트를 위한 DontDestroyOnLoad() [유니티|Unity] :: 블메의 코딩하는 공간
씬이 바뀌어도 유지되는 게임오브젝트를 위한 DontDestroyOnLoad() [유니티|Unity] :: 블메의 코딩하는 공간

Read More


See more articles in the same category here: Top 159 tips update new.

오브젝트 다른 씬에서 접근, 공유하기(DontDestroyOnLoad)

반응형

지금 씬(Stage)는 스테이지 선택 창임

여기서 스테이지를 클릭하면 Scene1에다가 현재 클릭된 스테이지 번호를 넘겨주고, 그 번호의 스테이지를 실행하게 해주고 싶다

그러면 ‘스테이지 번호’ 변수가 다른 씬으로 공유되어야 함

유니티에서 씬에서 씬으로 변수나 함수를 못 넘기는 이유가, 씬이 넘어갈 때 그 씬에 있는 모든 오브젝트를 파괴하기 때문인데, 파괴되지 않거나 static이면 씬이 넘어가도 접근할 수 있으니까 공유가 될 것이다

만약 플레이어가 맵을 이동해야 한다면? 플레이어 객체는 삭제되지 않아야 되니까 이 경우는 DontDestroyOnLoad라는 유니티 동작 매커니즘을 추가해서 객체가 파괴되지 않도록 해준다

DontDestroyOnLoad를 적용한 객체는 씬이 넘어가도 삭제되지 않으므로 새로운 씬이 실행되어도 계속 접근할 수 있다

그리고 그 객체의 컴포넌트든, 붙어있는 스크립트든 정보를 가져와서 쓰면 씬끼리 데이터 공유가 되는 것

참고)

DontDestroyOnLoad가 나와서 싱글톤 패턴을 짚고 가자면,

‘싱글톤 패턴’이라고 간단히 말해 한 개의 클래스 인스턴스만 갖도록 하고, 그 인스턴스에 전역적으로 접근할 수 있게 해주는 코딩 패턴이 있음

유니티에서 말하는 싱글톤 패턴은 객체 하나를 만들고, 씬이 바뀔 때에도 그 객체는 삭제되지 않게 DontDestroyOnLoad를 해주는 형태임

그래서 새로운 씬이 실행되어도 그 객체는 삭제되지 않으므로 계속 접근할 수 있다

아래 나올 코드에서도 위에서 말했듯 DontDestroyOnLoad를 쓰는데, 근데 이건 싱글톤 패턴은 아니라고 생각함

싱글톤 패턴은 한 개의 클래스 인스턴스를 갖게 하고(static사용), 그 인스턴스에 전역적으로 접근(DontDestroyOnLoad 사용)할 수 있게 해주는 것인데 내 코드는 static을 사용하지 않았기 때문임

DontDestroyOnLoad만 쓰는 건 그냥 유니티의 동작 매커니즘(씬이 넘어가도 객체가 삭제되지 않음)을 이용했을 뿐임(이 내용이 틀리면 정정좀)

어쨌든 DontDestroyOnLoad를 쓴 객체는 씬이 넘어갔을 때

이런 식으로 넘어옴

DontDestroyOnLoad아래 stagenum이 넘어온 모습이다

구현하기 전에 싱글톤에서 주의해야 할 점이,

씬이 넘어갈 때 오브젝트가 다 삭제되는데 싱글톤은 삭제되지 않으니까, 어딘가의 자식이면 안 됨

무조건 최상위 객체여야 함

근데 내 프로젝트에서 StageManager는 각 스테이지 버튼 s1, s2..에 붙어있는 구조라 Canvas아래 있을 수밖에 없어서

씬을 넘기는 SceneManager가 붙은 stagenum이라는 객체에서 스테이지 번호 변수도 같이 넘겨주려고 한다

StageManager 스크립트

public class StageManager : MonoBehaviour { public SceneChange sc; public void OnClickBox() { string nowbutton = EventSystem.current.currentSelectedGameObject.name; if (nowbutton == “s1”) sc.stageNum = 1; else if (nowbutton == “s2”) sc.stageNum = 2; else if (nowbutton == “s3”) sc.stageNum = 3; else if (nowbutton == “s4”) sc.stageNum = 4; if (sc.stageNum != 0) sc.call(); } }

SceneChange 스크립트

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SceneChange : MonoBehaviour { public int stageNum; public GameObject stageNumObject; // Start is called before the first frame update public void call() { SceneManager.LoadScene(“Scene1”); DontDestroyOnLoad(stageNumObject); } }

1. StageManager에서 SceneChange스크립트를 불러온다

2. StageManager에서 SceneChange에 있는 stageNum변수를 업데이트 한다

3. SceneChange의 stageNumObject는 씬이 넘어갈 때 삭제되지 않고 넘어갈 오브젝트임

SceneChange 스크립트가 붙어 있어서 SceneChange의 stageNum도 같이 감

즉, 씬이 바뀌어도 stagenum객체의 SceneChange에 있는 변수 접근이 가능함

씬이 넘어가면 이렇게 됨

이제 넘어온 변수를 사용하면 된다

넘어온 씬(Scene1)의 GameManager 스크립트

public class GameManager : MonoBehaviour { int click, nowStage; GameObject StageManager; void Start() { StageManager = GameObject.Find(“stagenum”); nowStage = StageManager.GetComponent().stageNum; //… } }

1. 삭제되지 않고 넘어온 GameObject를 찾는다(find)

2. 그 GameObject에 붙어있는 SceneChange 스크립트를 불러온다(GetComponent)

3. 스크립트 안에 있는 stageNum변수를 가져온다

————–

참고로 넘어올 변수를 static으로 선언했다면 그냥 갖다 쓰면 됨

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SceneChange : MonoBehaviour { public static int stageNum; public GameObject stageNumObject; // Start is called before the first frame update public void call() { SceneManager.LoadScene(“Scene1”); DontDestroyOnLoad(stageNumObject); } }

근데 이 코드의 경우는 stageNum을 업데이트 해줘야 했기 때문에 static으로 하지 않음

반응형

유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity]

728×90

반응형

728×170

참고링크를 내 방식대로 해석했다.

게임이라면 꺼서 지금까지의 기록이 사라지면 안된다.

만약 예전에도… 자동저장이 있었다면 누나와 싸우지 않지 않았을까??

게임을 중간에 끄더라도… 아무 기분이 상하지 않도록 데이터를 저장해야 한다.

그래서 알아보기로 했다.

ㅋㅋㅋㅋㅋ

Holy Grail 이거보고 할리갈리라 읽음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

진짜 시작해보자

-Data Persistence, 데이터의 지속성이 필요하다.

데이터를 다루려면 현재 가지고 있는 데이터가 사라지지 않아야 한다.

다만 여기서는 Save하거나 Load와 같이 메모리에 저장한다는 의미는 아니다.

그저 게임이 실행하는 동안만 데이터를 가지고 있었으면 좋겠다는 이야기다.

1945, 메탈슬러그가 껐다 킨다고 해서 중간 부분부터 시작하진 않는 것처럼.. 최소한 게임이 진행되고 있을 때 데이터가 사라지지 않고 우리가 제어할 수 있어야 한다는 이야기다.

++ 1탄 깼는데 1탄 clear가 저장이 안되어서 2탄을 못가면 그게 말이 되는 소리일까

-PlayerPrefs an easy way but not the best

플레이어프렙스를 쓸 수 있다. 하지만.. 최선의 방법은 아니다. 한계가 명확하다.

//PlayerPrefs 에 데이터 저장 PlayerPrefs.SetFloat(“health”, 100); PlayerPrefs.SetFloat(“experience”, 1000); //PlayerPrefs 에서 데이터 추출 float health = PlayerPrefs.GetFloat(“health”); float experience = PlayerPrefs.GetFloat(“experience”);

엄청 간단하다. 저렇게 하면 데이터가 저장되고..불러올 수 있다.

장점

쓰기 겁나 쉽다.

유니티가 알아서 다해준다.

단점

문자열, 정수, 불리안 타입만 저장 가능하다.

파일 상에 저장되어서 조작하기 쉽다.

중요한 데이터에 쓰기에 알맞지 않다.

그래서 사람들은 포기하지 않고 다른 방법을 생각해낸다.

-GameControl , a special GameObject

새로운 오브젝트를 만든다.

씬 간의 이동에도 데이터를 저장할 수 있게 어떻게 하냐..?

우선 우리가 2개가 필요하다고 가정해보자.

1.health

2.experience

public class GameControl : MonoBehaviour { //Data to persist public float health; public float experience; }

이렇게 우리가 필요하다면 “따로” 오브젝트를 만들어서 데이터를 잘라서 넣으면 된다.

그렇게 되면 PlayerPrefs에선 3개의 타입만 저장이 되지만

이 오브젝트에는 우리가 원하는 다른 타입도 넣을 수 있다.

그 오브젝트는 어차피 씬 넘어가면 없어지지 않느냐??

DontDestroyOnLoad method

이 메서드가 우리가 “따로” 만든 오브젝트의 기능을 향상시켜준다.

이 메서드는 새로운 씬을 로딩 중일 때도, target Object는 파괴하지 않는다고 한다.

-> 새로운 씬으로 넘어가도 이 오브젝트가 유지된다는 뜻이다.

public class GameControl : MonoBehaviour { //Data to persist public float health; public float experience; void Awake() { //이 메서드 덕분에 다른 씬이 로딩되어도 파괴되지 않는다. DontDestroyOnLoad(gameObject); } }

해석 쫌 하나. 잘 해석했네 그 뜻이 맞다.

이렇게 씬을 옮겨도 유지가 되는 것이다.

씬을 옮겨지더라도 오브젝트가 없어지는 것은 해결했지만 아직 2개가 남았다.

1. Data access, 데이터 접근

2. Object Reference management, 데이터 접근할 때 참조

우리는 값을 접근할 수 있게끔 첫 번째 씬에서 참조자를 만든다 치자.

그럼 다른 씬에서는 어떻게 그 오브젝트에 접근을 해야할까??

Static Reference

역시나 Static을 이용한다.

Data access 문제를 해결해보자.

그니까 오브젝트에 굳이 참조자를 공유하지 않고도 접근하는 방법이 필요하다.

그래서 우리는 싱글톤 패턴이라는 것을 이용하기로 했다.

**싱글톤과 Static은 조금 다른데 나중에 정리해보자.

그래서 참조자를 static으로 선언해서 언제든 참조할 수 있게 하는 것이다.

public class GameControl : MonoBehaviour { //Static reference -> 정적으로 선언 public static GameControl control; //Data to persist -> 저장 할 데이터 public float health; public float experience; void Awake() { //Let the gameobject persist over the scenes DontDestroyOnLoad(gameObject); //Check if the control instance is null if (control == null) { //This instance becomes the single instance available control = this; } } }

만약 GameControl 를 이용하고 싶다? 이렇게 사용한다.

//Read data directly Debug.Log(GameControl.control.health); Debug.Log(GameControl.control.experience); //Read data through a local variable float currentHealth = GameControl.control.health; float currentExperience = GameControl.control.health; //Edit data GameControl.control.health += 10; GameControl.control.experience += 100;

이렇게 아무데서나 이용할 수 있다.

Prefab is the way

일단 우리가 오브젝트에 저장하고 나면 그 오브젝트를 프리팹에 저장할 수 있다.

하지만 그 전에 할 것이 몇가지 있다.

우리가 하고 싶은 것은 씬 사이의 데이터들을 제어하고 싶은데 그렇게 하려고 모든 씬에다 GameControl을 넣고 싶진 않다.

그렇게 하려면 Awake()에 조금 변화가 필요하다.

매순간 객체화를 할 때 마다 다른 객체가 있는지 체크하고 있으면 그 객체를 삭제하게 한다.

이게 바로 싱글톤 방식이다. 싱글톤의 가장 강력한 규칙이 있다.

“one and only one will live forever and ever!”

가장 중요한 규칙이다.

public class GameControl : MonoBehaviour { //Static reference public static GameControl control; //Data to persist public float health; public float experience; void Awake() { //Let the gameobject persist over the scenes DontDestroyOnLoad(gameObject); //Check if the control instance is null if (control == null) { //This instance becomes the single instance available control = this; } //Otherwise check if the control instance is not this one else if (control != this) { //In case there is a different instance destroy this one. Destroy(gameObject); } } }

그래서 우리는 어떤 씬을 불러오더라도 일단 GameControl을 일단 선언하면 끝까지 살아있고 게임의 오브젝트들과 데이터를 바꾸고 공유할 수 있다.

ControlManager

굳이 객체화시킬 때마다 기존의 객체가 있을 때마다 삭제하는 것을 하기 싫다면..?

ControlManager 를 생각해볼 수 있다.

GameManager는 GameControl의 객체화를 책임지고 있다.

public class ControlManager : MonoBehaviour { //Reference to the prefab of the game control private Object gameControlRef; void Awake() { //Initialise the reference gameControlRef = Resources.Load(“Prefabs/GameControl”); //Check if the game control instance is null if (GameControl.control == null) { //This instance becomes the single instance available Instantiate(gameControlRef); } //The job is done this object is not used anymore so destroy it Destroy(gameObject); } }

ControlManager ControlObject가 객체화가 될지 말지 정한다.

여기까지 모든 데이터 관리는 끝났다.

한국인은 항상 요약이 필요하다.

그래서 요약한다.

데이터를 저장할 오브젝트를 생성한다.

DontDestroyOnLoad 메서드로 씬 간의 오브젝트를 유지한다.

static으로 선언하여 다른 오브젝트에서도 데이터에 접근할 수 있도록 한다.

오브젝트를 프리팹으로 선언하고 게임 전체에서 유일하게 존재할 수 있도록 한다.

참고링크

gamedevelopertips.com/how-to-handle-data-between-scenes-in-unity/

반응형

그리드형

Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다.

Scene 사이의 데이터 넘기기, 앞으로는 이렇게 넘긴다.

https://docs.unity3d.com/Manual/ExecutionOrder.html

위의 유니티 매뉴얼을 보게 된다면, First Scene Load 부분의 3가지를 확인해야한다.

Awake

OnEnable

OnLevelWasLoaded( 이제 사용 안하는 것을 권장하며, SceneManager를 통해서 한다. )

우리가 씬이 2개 있다고 가정했을 때, 그 씬을 A, B라고 하고 A씬에서 B씬으로 넘어간다고 가정하자.

그리고 A 씬에서 데이터를 받거나( 네트워크 통신을 통해서, 또는 바꾸거나 ), 수정했을 때 그 바뀐 값을 그대로 다른 씬(B씬)으로 넘기고 싶다. 물론, A의 경우 씬이 넘어가더라도 오브젝트 파괴 및 인스턴스의 파괴가 안되게 하기 위해서 DontDestroyOnLoaded를 해줘야한다. 그리고 각각의 스크립트에 다음과 같이 적혀 있다.

– Awake()

– Start() – 여기서 DontDestroyOnLoaded // SceneManger.SceneLoaded 설정

– Update()

– OnLevelLoaded() // 더 이상 사용하지 않는 것을 권장하며 SceneManager.SceneLoaded를 통해서 하기를 권장

– Awake()

– Start()

1. A씬이 기본 씬이기 때문에 A씬의 파이프라인이 진행된다.

– 위 수행순서를 보는 순서대로 쭉- 진행된다.

2. B 씬으로 값을 넘긴다면, 다음과 같이 수행된다.

– B의 Awake 수행

– A에서 적어놓은 OnLevelWasLoaded 수행 ( 또는 SceneManager.SceneLoaded 수행 )

– B의 OnLevelWasLoaded 수행

– B의 Start 수행 — (1), 여기서 A 오브젝트 파괴 ( DestroyObject( A.gameObject) )

– A의 Update 수행 ( 만약에 (1) 수행한다면 여기서 더이상 수행안됨 )

————-

<정리>

1. A 씬에서 우리가 넘기려는 데이터를 가진 클래스를 DontDestroyObject 시킨다.

2. B 씬에 있는 스크립트에서 A씬에서 넘긴 스크립트 데이터가 필요하다면 Start() 함수에서 오브젝트를 검색해서 가져온다.

3. 적절히 처리 후, 해당 Object를 파괴하던, 뭘 하던 한다. ( 이 때, 데이터는 B씬에 있는 스크립트에 저장시켜놔야 한다. 그래야 쓰니까 )

4. 보통은 대기 씬 – 플레이 씬- 대기 씬 – …. 순서로 가기 때문에 데이터를 이동시킨 후, 해당 오브젝트를 파괴시키는 것이 좋을 듯 하다. 그렇지 않으면 자꾸 해당 오브젝트가 살아있을 테니… ( 역시나 상황에 따라 다르다. )

So you have finished reading the 유니티 씬 전환 데이터 전달 topic article, if you find this article useful, please share it. Thank you very much. See more: 유니티 DontDestroyOnLoad, 유니티 씬 복사, 유니티 다중 씬 전환, 유니티 맵 전환, 유니티 씬 개수, 유니티 DontDestroyOnLoad 해제, 유니티 데이터 관리, 유니티 스테이지 이동

Leave a Comment