유니티3D 프로그래밍
Unity 6주차 5일 수업 내용 : 다단계 Scene 구성 (21.04.06) 본문
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class App : MonoBehaviour
{
public enum eSceneType
{
App, Logo, Title, InGame
}
private eSceneType sceneType;
void Start()
{
DontDestroyOnLoad(this.gameObject);
//씬전환 App -> Logo
//SceneManager.LoadScene("Logo"); //동기 로드
this.ChangeScene(eSceneType.Logo);
}
public void ChangeScene(eSceneType sceneType)
{
switch (sceneType)
{
case eSceneType.Logo:
{
AsyncOperation ao = SceneManager.LoadSceneAsync("Logo");
ao.completed += (obj) => {
Debug.Log("complete");
//씬이 로드완료됨
var logo = GameObject.FindObjectOfType<Logo>();
logo.onComplete = () => {
Debug.Log("title");
this.ChangeScene(eSceneType.Title);
};
logo.Init();
};
}
break;
case eSceneType.Title:
{
AsyncOperation ao = SceneManager.LoadSceneAsync("Title");
ao.completed += (obj) => {
Debug.Log("complete");
//씬이 로드완료됨
var title = GameObject.FindObjectOfType<Title>();
title.onTouch = () => {
//데이터 로드
DataManager.GetInstance().LoadDatas();
this.ChangeScene(eSceneType.InGame);
};
};
}
break;
case eSceneType.InGame:
{
//InGameScene 로드
var ao = SceneManager.LoadSceneAsync("InGame");
ao.completed += (oper) => {
InGame inGame = GameObject.FindObjectOfType<InGame>();
inGame.Init(100);
};
}
break;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterData
{
public int id;
public string name;
public float damage;
public string res_name;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterInfo
{
public int Id { get; private set; }
//생성자
public CharacterInfo(int id)
{
this.Id = id;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.Linq;
public class DataManager
{
private static DataManager instance;
public Dictionary<int, CharacterData> dicCharacterDatas;
//생성자
private DataManager() { }
public static DataManager GetInstance()
{
if (DataManager.instance == null)
DataManager.instance = new DataManager();
return DataManager.instance;
}
public void LoadDatas()
{
var ta = Resources.Load<TextAsset>("Data/chracter_data");
var json = ta.text;
//역직렬화
var arr = JsonConvert.DeserializeObject<CharacterData[]>(json);
this.dicCharacterDatas = arr.ToDictionary(x => x.id);
Debug.Log(this.dicCharacterDatas.Count);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hero : MonoBehaviour
{
//데이터
private CharacterInfo info;
//모델
private GameObject model;
private Animation anim;
//초기화
public void Init(CharacterInfo info, GameObject model)
{
this.info = info;
this.model = model;
this.anim = this.model.GetComponent<Animation>();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InGame : MonoBehaviour
{
public void Init(int characterId)
{
var shell = new GameObject();
shell.name = "Hero";
var model = CreateModel(characterId);
model.name = "Model";
model.transform.SetParent(shell.transform);
var hero = shell.AddComponent<Hero>();
var info = new CharacterInfo(characterId);
hero.Init(info, model);
}
public GameObject CreateModel(int id)
{
var data = DataManager.GetInstance().dicCharacterDatas[id];
var path = string.Format("Prefabs/{0}", data.res_name);
var prefab = Resources.Load<GameObject>(path);
var go = Instantiate<GameObject>(prefab);
return go;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class Logo : MonoBehaviour
{
public UnityAction onComplete;
public void Init()
{
StartCoroutine(this.WaitForDisplayLogo());
}
private IEnumerator WaitForDisplayLogo()
{
Debug.Log("1");
yield return new WaitForSeconds(3f);
Debug.Log("2");
this.onComplete();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Title : MonoBehaviour
{
public System.Action onTouch;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
this.onTouch();
}
}
}
각 Scene 마다 빈 오브젝트에 해당 씬의 스크립트를 넣는다.
'Unity > 수업내용' 카테고리의 다른 글
Unity UGUI Test 2 (21.04.20~21) (0) | 2021.04.20 |
---|---|
Unity UGUI Test (21.04.20) (0) | 2021.04.20 |
Unity 6주차 3,4,5일 수업 내용 : Zombie (21.04.14) (0) | 2021.04.16 |
Unity 6주차 2일 수업 내용 : 쿠키런 구현해보기 (21.04.13) (0) | 2021.04.13 |
Unity 5주차 5일 수업 내용 : Dodge, Fov (21.04.09) (0) | 2021.04.09 |