[Unity] 변수 등의 정보를 다른 Scene에 전달하는 간단한 방법
일단 Scene에 대해서 설명을 해드릴게요.
Scene이랑 게임 화면 이해하기 쉬워요?흔히 구체적인 예에서 말하는 것은 배역 게임이다.경기장에서 걷는'지도화면'과 적을 만났을 때 전환하는'전투화면'은 각각 다른 화면으로 관리하는 것이 좋다.이럴 때 Scene은'지도 Scene'과'전투 Scene'의 형식으로 각 화면에서 제작할 수 있다.
변수 정보를 다른 Scene에 주고 싶어요.
이렇게 써도 알 수 없기 때문에 다음과 같은 Scene으로 구성된 게임이 있다고 가정해 보세요.
이렇게 써도 알 수 없기 때문에 다음과 같은 Scene으로 구성된 게임이 있다고 가정해 보세요.
방법1:public에서 static 변수 사용하기
public에서static 변수를 사용하면 다른 스크립트의 변수를 인용할 수 있습니다.어디서든 변수를 호출할 수도 있고 저장할 수도 있기 때문에 Scene이 달라도 변수에 저장할 수 있습니다.다음은 샘플의 출처입니다.GamePlaying이 실제 게임 화면에 추가되었는지, GameResult가 게임 결과 화면에 추가되었는지 확인하십시오.
▶ [저장할 때의 스크립트] ▼using UnityEngine;
public class GamePlaying
{
public static bool isClear = false;
void Start () {
//スタートからクリア判定を置く
//isClear = true;
}
}
▶ [읽고 싶을 때 스크립트] ▼using UnityEngine;
public class GameResult
{
void Start () {
//ゲーム結果画面でGamePlayingの変数を読み込み
if(GamePlaying.isClear){
Debug.Log("isClear が true なのでクリアしてる状態です");
}
}
}
GameResult 측에서 공동으로 사용하고자 하는 변수 isClear를 설명할 수 있습니다.이 경우 GamePlaying 측면에서 참조할 수 있습니다GameResult.isClear
.
public에서static 변수의 위험을 이해하다
퍼블릭의static 변수 (위에서 말한 바와 같이) 를 사용하여 거의 모든 곳을 탐색할 수 있습니다.어디서든 참조하는 것은 편리하지만 원치 않는 곳에서 참조하는 경우도 있다.특히 사람과 함께 일할 때 "이 변수는 참조할 수 있으니 이용하세요!"에서 기술한 장면은 다음 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 둘레를 분석하도록 한다.
"static 아저씨"라는 야유도 있다. 너무 많이 쓰면 나쁠 수도 있지만 위험을 파악하면서 잘 분리해서 사용하는 것이 중요하다.한 마디로 하면 개인이 하는 부분은 상술한 방법을 사용할 수 있다고 생각합니다. 고민보다 정체되는 것이 추진이 중요하다고 생각합니다.
메서드 2: DontDestroyOnLoad 사용()
일반적으로 다른 Scene(변환)으로 전환하면 변환 이전의 모든 Scene 객체가 무시됩니다.DontDestroyOnLoad()
객체를 버리지 않으며 다른 Scene으로 전환(전환)한 경우에도 사용된 Scene을 버리지 않습니다.개체 자체가 남아 있기 때문에 개체를 감지하고 변수를 탐색하거나 조작할 수 있습니다.
▶ [게임 화면에 추가 스크립트] ▼using UnityEngine;
using UnityEngine.SceneManagement;
public class GamePlaying : MonoBehaviour {
public string test = "他のSceneで読み込まれるぜ!";
void Start () {
DontDestroyOnLoad (this);
}
//クリックしたら「GameResult」に遷移
void Update () {
if (Input.GetMouseButtonDown (0)) {
SceneManager.LoadScene ("GameResult");
}
}
}
▶ [결과 화면에 추가 스크립트] ▼using UnityEngine;
public class GameResult : MonoBehaviour {
void Start () {
//オブジェクトを名前で探す
GameObject resultObj = GameObject.Find ("ResultObject");
//変数「test」を参照しDebug.Logに出力
Debug.Log (resultObj.GetComponent<GamePlaying> ().test);
//オブジェクトの位置情報を変更
resultObj.transform.position = new Vector3 (
resultObj.transform.position.x,
resultObj.transform.position.y - 5,
resultObj.transform.position.z
);
}
}
▶ [게임 화면 캡처] ▼
▶ [결과 화면 캡처] ▼
결과 화면에서 test
이 변수를 참조하였으며,public 변수입니다.퍼블릭을 넣지 않으면 다른 곳은 참조할 수 없지만,static가 아니더라도 대상을 통해 참조할 수 있습니다.참고로 대체적으로 static, static은 정태적인 것이다. 처음에 구역을 확보했기 때문에 참조 대상의 변수는 하나밖에 없다.이 설명만으로는 이해하기 어렵지만 이번 상황을 예로 들면 이해하기 쉬울 것 같다.
이런 상황에서 우리는 대상ResultObject
의 변수test
를 인용했지만 다른 대상이라면 다른 대상을 찾고 찾은 대상의 변수test
를 인용할 수 있다.즉 변수test
는 대상의 수량에만 존재한다.
▶ [static 변수 추가 시도...] ▼using UnityEngine;
using UnityEngine.SceneManagement;
public class GamePlaying : MonoBehaviour {
public string test1 = "他のSceneで読み込まれるぜ!";
static public string test2 = "staticのテストだぜ";
void Start () {
DontDestroyOnLoad (this);
}
void Update () {
if (Input.GetMouseButtonDown (0)) {
SceneManager.LoadScene ("GameResult");
}
}
}
▶ [GameObject를 참조해도 참조할 수 없음] ▼
메서드 3: PlayerPrefs 영구 저장
프로그램과 응용 프로그램 자체에 값을 저장하면 Scene을 뛰어넘어도 받아들일 수 있습니다.다만 가격을 전달하기 위해 사용하는 것은 미묘할 수 있다.게임 화면의 점수 등을 기록하고 싶은 물건이라도 사용할 수 있다.
다음은 샘플의 출처입니다.아래의 사항에 주의하시기 바랍니다.
using UnityEngine;
public class GamePlaying
{
public static bool isClear = false;
void Start () {
//スタートからクリア判定を置く
//isClear = true;
}
}
using UnityEngine;
public class GameResult
{
void Start () {
//ゲーム結果画面でGamePlayingの変数を読み込み
if(GamePlaying.isClear){
Debug.Log("isClear が true なのでクリアしてる状態です");
}
}
}
일반적으로 다른 Scene(변환)으로 전환하면 변환 이전의 모든 Scene 객체가 무시됩니다.
DontDestroyOnLoad()
객체를 버리지 않으며 다른 Scene으로 전환(전환)한 경우에도 사용된 Scene을 버리지 않습니다.개체 자체가 남아 있기 때문에 개체를 감지하고 변수를 탐색하거나 조작할 수 있습니다.▶ [게임 화면에 추가 스크립트] ▼
using UnityEngine;
using UnityEngine.SceneManagement;
public class GamePlaying : MonoBehaviour {
public string test = "他のSceneで読み込まれるぜ!";
void Start () {
DontDestroyOnLoad (this);
}
//クリックしたら「GameResult」に遷移
void Update () {
if (Input.GetMouseButtonDown (0)) {
SceneManager.LoadScene ("GameResult");
}
}
}
▶ [결과 화면에 추가 스크립트] ▼using UnityEngine;
public class GameResult : MonoBehaviour {
void Start () {
//オブジェクトを名前で探す
GameObject resultObj = GameObject.Find ("ResultObject");
//変数「test」を参照しDebug.Logに出力
Debug.Log (resultObj.GetComponent<GamePlaying> ().test);
//オブジェクトの位置情報を変更
resultObj.transform.position = new Vector3 (
resultObj.transform.position.x,
resultObj.transform.position.y - 5,
resultObj.transform.position.z
);
}
}
▶ [게임 화면 캡처] ▼▶ [결과 화면 캡처] ▼
결과 화면에서
test
이 변수를 참조하였으며,public 변수입니다.퍼블릭을 넣지 않으면 다른 곳은 참조할 수 없지만,static가 아니더라도 대상을 통해 참조할 수 있습니다.참고로 대체적으로 static, static은 정태적인 것이다. 처음에 구역을 확보했기 때문에 참조 대상의 변수는 하나밖에 없다.이 설명만으로는 이해하기 어렵지만 이번 상황을 예로 들면 이해하기 쉬울 것 같다.이런 상황에서 우리는 대상
ResultObject
의 변수test
를 인용했지만 다른 대상이라면 다른 대상을 찾고 찾은 대상의 변수test
를 인용할 수 있다.즉 변수test
는 대상의 수량에만 존재한다.▶ [static 변수 추가 시도...] ▼
using UnityEngine;
using UnityEngine.SceneManagement;
public class GamePlaying : MonoBehaviour {
public string test1 = "他のSceneで読み込まれるぜ!";
static public string test2 = "staticのテストだぜ";
void Start () {
DontDestroyOnLoad (this);
}
void Update () {
if (Input.GetMouseButtonDown (0)) {
SceneManager.LoadScene ("GameResult");
}
}
}
▶ [GameObject를 참조해도 참조할 수 없음] ▼메서드 3: PlayerPrefs 영구 저장
프로그램과 응용 프로그램 자체에 값을 저장하면 Scene을 뛰어넘어도 받아들일 수 있습니다.다만 가격을 전달하기 위해 사용하는 것은 미묘할 수 있다.게임 화면의 점수 등을 기록하고 싶은 물건이라도 사용할 수 있다.
다음은 샘플의 출처입니다.아래의 사항에 주의하시기 바랍니다.
PlayerPrefs.Save()
using UnityEngine;
public class GamePlaying
{
void Start () {
//「SCORE」というキーで、Int値の「20」を保存
PlayerPrefs.SetInt("SCORE", 20);
PlayerPrefs.Save();
}
}
▶ [읽고 싶을 때 스크립트] ▼using UnityEngine;
public class GameResult
{
void Start () {
//「SCORE」というキーで保存されているInt値を読み込み
int resultScore = PlayerPrefs.GetInt("SCORE");
Debug.Log("保存されている点数:" + resultScore )
}
}
Reference
이 문제에 관하여([Unity] 변수 등의 정보를 다른 Scene에 전달하는 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tamoco/items/f5a5015bb1721fbec743텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)