<캐릭터 생성 월드로>한단계 진화함
Unity/과제 2019. 4. 19. 01:12//추가할것, 링큐써서 데이터 매니져 제네릭타입으로 구현해보기( 못하겠으면 빠르게 손절하기 )( +링큐 공부 ), 몬스터 추가, 움직이기 때리기(예전에 했던거),몬스터썸네일 몬스터 때리면 뜨도록 수정
//무기줍고 때리기, 0,0,0으로 귀환하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; namespace SG.scenes { public class App : MonoBehaviour { public Camera uiCamera; private void Awake() { //로드된 직후 호출 Object.DontDestroyOnLoad(this); } // Start is called before the first frame update void Start() { //객체 생성시 호출 var oper = SceneManager.LoadSceneAsync("Logo"); oper.completed += (AsyncOper) => { Debug.Log("로고 씬 로드 완료"); var logo = GameObject.FindObjectOfType<Logo>(); logo.Init(this.uiCamera); }; } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; namespace SG.scenes { public class Logo : MonoBehaviour { public UILogo uiLogo; public System.Action OnWaitForSeconds; public void Init(Camera uiCamera) { this.uiLogo.OnFadeInComplete = () =>//3완료 { Debug.Log("페이드 인 완료"); //타이틀 씬으로 전환 var oper = SceneManager.LoadSceneAsync("Title"); oper.completed += (AsyncOper) => { Debug.Log("로고 씬 로드 완료"); var title = GameObject.FindObjectOfType<Title>(); title.Init(uiCamera); }; }; this.uiLogo.OnFadeOutComplete = () =>//1완료 { Debug.Log("페이드 아웃 완료"); //3초기달 this.OnWaitForSeconds = () =>//2완료 { StartCoroutine(this.uiLogo.FadeIn());//3 }; StartCoroutine(this.WaitForSeconds(2));//2 }; this.uiLogo.Init(uiCamera); StartCoroutine(this.uiLogo.FadeOut());//1 } private IEnumerator WaitForSeconds(float sec) { yield return new WaitForSeconds(sec); OnWaitForSeconds(); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class UILogo : MonoBehaviour { public Canvas canvas; public Image dim; public System.Action OnFadeOutComplete; public System.Action OnFadeInComplete; public void Init(Camera uiCamera) { this.canvas.worldCamera = uiCamera; } public IEnumerator FadeOut() { var color = this.dim.color; float alpha = color.a; while (true) { alpha -= 0.016f; color.a = alpha; this.dim.color = color; if (alpha <= 0) { alpha = 0; break; } yield return null; } this.OnFadeOutComplete(); } public IEnumerator FadeIn() { var color = this.dim.color; float alpha = color.a; while (true) { alpha += 0.016f; color.a = alpha; this.dim.color = color; if (alpha >= 1) { alpha = 1; break; } yield return null; } this.OnFadeInComplete(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class UITitle : MonoBehaviour { public Canvas canvas; public Image dim; public System.Action OnFadeOutComplete; public System.Action OnFadeInComplete; public Button btn; public void Init(Camera uiCamera) { this.canvas.worldCamera = uiCamera; } public IEnumerator FadeOut() { var color = this.dim.color; float alpha = color.a; while (true) { alpha -= 0.016f; color.a = alpha; this.dim.color = color; if (alpha <= 0) { alpha = 0; break; } yield return null; } this.OnFadeOutComplete(); } public IEnumerator FadeIn() { var color = this.dim.color; float alpha = color.a; while (true) { alpha += 0.016f; color.a = alpha; this.dim.color = color; if (alpha >= 1) { alpha = 1; break; } yield return null; } this.OnFadeInComplete(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class StageData { public int id; public string name; public string prefab_name; public int monster_group_id; } | cs |
1 2 3 4 5 6 7 8 9 10 11 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class MonsterGroupData { public int id; public int group_id; public int monster_id; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class CharacterData { public int id; public string character_name; public int type; public string prefab_name; public int hp; public string thumb_name; public string thumb_hex_color; public string idle_anim_name; public string run_anim_name; public string attack_anim_name; public string hit_anim_name; public string death_anim_name; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using System.Collections; using System.Collections.Generic; using UnityEngine; namespace SG { public class CharacterInfo { public int id; public int hp; public Vector3 pos; public CharacterInfo(int id, int hp, Vector3 pos) { this.id = id; this.hp = hp; this.pos = pos; } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace SG.scenes { public class InGame : MonoBehaviour { public Canvas canvas; public Image dim; public Character hero; public Character monster; public System.Action OnFadeOutComplete; public System.Action OnFadeInComplete; public System.Action OnWaitForSeconds; private void Awake() { //데이터 불러오기 DataManager.GetInstance().LoadCharacterDatas("Data/character_data"); DataManager.GetInstance().LoadMonsterGroupDatas("Data/monster_group_data"); DataManager.GetInstance().LoadStageDatas("Data/stage_data"); AssetManager.GetInstance().LoadDatas("PreLoad"); var characterDatas = DataManager.GetInstance(); var monsterGroupDatas = DataManager.GetInstance(); //스테이지 생성 var stageDatas = DataManager.GetInstance().GetStageData(0); this.CreateStage(stageDatas.id); //캐릭터 생성하기(히어로&&몬스터) this.hero = CreateCharacter(0); } private Character CreateCharacter(int id) { var data = DataManager.GetInstance().GetCharacterData(id); var asset = AssetManager.GetInstance().dicAssetData[data.prefab_name]; var charGo = GameObject.Instantiate<GameObject>(asset); var modelPrefab = AssetManager.GetInstance().dicAssetData[data.prefab_name]; var character = charGo.AddComponent<Character>(); character.name= data.character_name; character.info = new SG.CharacterInfo(id, data.hp, new Vector3(0, 0, 0)); if (character.info.id == 1) { character.transform.position = new Vector3(5, 0, 5); } else { character.transform.position = character.info.pos; } Debug.Log("캐릭터가 생성되었습니다."); return character; } private void CreateStage(int id) { var stageDatas = DataManager.GetInstance().GetStageData(id); var stagePrefab = AssetManager.GetInstance().dicAssetData[stageDatas.prefab_name]; var stageGo = Instantiate(stagePrefab); stageGo.transform.position = Vector3.zero; } public void Init(Camera uiCamera) { this.canvas.worldCamera = uiCamera; Debug.Log("와 게임 시작이다!"); //월드 생성 후 페이드 아웃 this.OnFadeOutComplete = () => { Debug.Log("페이드 아웃완료"); }; StartCoroutine(this.FadeOut()); } public IEnumerator FadeOut() { var color = this.dim.color; float alpha = color.a; while (true) { alpha -= 0.016f; color.a = alpha; this.dim.color = color; if (alpha <= 0) { alpha = 0; break; } yield return null; } this.OnFadeOutComplete(); } public IEnumerator FadeIn() { var color = this.dim.color; float alpha = color.a; while (true) { alpha += 0.016f; color.a = alpha; this.dim.color = color; if (alpha >= 1) { alpha = 1; break; } yield return null; } this.OnFadeInComplete(); } private IEnumerator WaitForSeconds(float sec) { yield return new WaitForSeconds(sec); OnWaitForSeconds(); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class Character : MonoBehaviour { private Animation anim; public int id; public GameObject model; public string characterName; public SG.CharacterInfo info; private void Awake() { this.anim = this.gameObject.GetComponent<Animation>(); } public void Init(Vector3 initPosition) { this.gameObject.transform.position = initPosition; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class AssetManager { private static AssetManager Instance; public Dictionary<string, GameObject> dicAssetData; private AssetManager() { this.dicAssetData = new Dictionary<string, GameObject>(); } public static AssetManager GetInstance() { if (AssetManager.Instance == null) { AssetManager.Instance = new AssetManager(); } return AssetManager.Instance; } public void LoadDatas(string path) { var asset = Resources.LoadAll<GameObject>(path); foreach(var data in asset) { this.dicAssetData.Add(data.name, data); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; public class DataManager { private static DataManager Instance; public Dictionary<int, CharacterData> dicCharacterData; public Dictionary<int, MonsterGroupData> dicMonsterGroupData; public Dictionary<int, StageData> dicStageData; private DataManager() { this.dicCharacterData = new Dictionary<int, CharacterData>(); this.dicMonsterGroupData = new Dictionary<int, MonsterGroupData>(); this.dicStageData = new Dictionary<int, StageData>(); } public static DataManager GetInstance() { if (DataManager.Instance == null) { DataManager.Instance = new DataManager(); } return DataManager.Instance; } public void LoadCharacterDatas(string path) { Debug.Log("캐릭터 데이터 로드 완료"); var json = Resources.Load<TextAsset>(path); var arrDatas = JsonConvert.DeserializeObject<CharacterData[]>(json.text); foreach (var data in arrDatas) { this.dicCharacterData.Add(data.id, data); } } public void LoadMonsterGroupDatas(string path) { Debug.Log("몬스터 그룹 데이터 로드 완료"); var json = Resources.Load<TextAsset>(path); var arrDatas = JsonConvert.DeserializeObject<MonsterGroupData[]>(json.text); foreach (var data in arrDatas) { this.dicMonsterGroupData.Add(data.id, data); } } public void LoadStageDatas(string path) { Debug.Log("스테이지 데이터 로드 완료"); var json = Resources.Load<TextAsset>(path); var arrDatas = JsonConvert.DeserializeObject<StageData[]>(json.text); foreach (var data in arrDatas) { this.dicStageData.Add(data.id, data); } } public CharacterData GetCharacterData(int id) { return this.dicCharacterData[id]; } public MonsterGroupData GetMonsterGroupData(int id) { return this.dicMonsterGroupData[id]; } public StageData GetStageData(int id) { return this.dicStageData[id]; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace SG.scenes { public class Title : MonoBehaviour { public UITitle uiTitle; public Camera uiCamera; public bool isRead; private void Awake() { this.uiTitle.btn.onClick.AddListener(() => { if (!isRead) { Debug.Log("아직 실행이 준비되지 않았습니다."); } else { //인게임 실행 var oper = SceneManager.LoadSceneAsync("InGame"); oper.completed += (AsyncOper) => { Debug.Log("인게임씬 로드 완료"); var inGame = GameObject.FindObjectOfType<InGame>(); inGame.Init(this.uiCamera); }; } }); } public void Init(Camera uiCamera) { this.uiCamera = uiCamera; this.uiTitle.Init(uiCamera); this.uiTitle.OnFadeOutComplete = () => { Debug.Log("똬이럴실행"); isRead = true; }; StartCoroutine(this.uiTitle.FadeOut()); } } } | cs |
'Unity > 과제' 카테고리의 다른 글
<설계구조를 다시 짜보았다.> (0) | 2019.04.21 |
---|---|
<데이터 로드, 월드 구성, by포토샵>미완성 (0) | 2019.04.18 |