Lobby :
캐릭터 목록을 횡스크롤로 보여주고 캐릭터 선택할 수 있다
버튼을 누르면 아이디를 InGame씬에 넘겨준다
InGame:
선택된 캐릭터의 아이디 값을 이용해서 Profile UI 상태를 해당 아이디 값에 맞는 항목으로 변경하고
선택된 캐릭터 모델의 데이터를 불러와서 실체화한다.
1. Lobby - 로비 씬을 관리한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lobby : MonoBehaviour
{
public UILobby uiLobby;
private void Start()
{
DataManager.GetInstance().Load();
this.uiLobby.Init();
}
}
|
2. UILobby - 로비씬의 UI를 관리한다.
SceneManager.LoadSceneAsync 메서드를 이용해서 InGame씬으로 데이터를 넘길 때
UILobby씬을 파괴하지 않아야 하는데 문제는 UILobby 게임 오브젝트에 속하게 되는 스크롤 리스트도 같이 넘어오게 됨.
씬 로딩이 완료된 뒤에 스크롤 리스트를 파괴하면 스크롤 리스트는 보이지 않게 되고
InGame 씬에 데이터를 넘길 때 필요한 UILobby 컴포넌트가 구성되어 있는 UILobby 오브젝트만 남게되어
원하는 값만 Init메서드를 통해 전달할 수 있음
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.SceneManagement;
public class UILobby : MonoBehaviour
{
public Transform contentsTrans;
private GameObject listItemPrefabs;
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
public void Init()
{
this.listItemPrefabs = Resources.Load("Prefabs/UI/ui_listItem_Hero") as GameObject;
var characterDatas = DataManager.GetInstance().GetCharacterDatas();
foreach(var data in characterDatas)
{
var listItemGo = Instantiate(this.listItemPrefabs) as GameObject;
var listItem = listItemGo.GetComponent<UI_ListItem_Hero>();
string uiModelPrefabsName = string.Format("Prefabs/UI/ui_{0}", data.res_name);
var uiModelPrefab = Resources.Load(uiModelPrefabsName) as GameObject;
var uiModel = Instantiate<GameObject>(uiModelPrefab);
listItem.Init(data.id,data.res_name,uiModel);
listItem.btn.onClick.AddListener(() =>
{
Debug.LogFormat("selected character ID : {0}", data.id);
AsyncOperation asynOper = SceneManager.LoadSceneAsync("InGame");
asynOper.completed += (obj) =>
{
var inGame = GameObject.FindObjectOfType<InGame>();
Object.Destroy(GameObject.Find("scrollview"));
inGame.Init(data.id);
};
});
listItem.transform.SetParent(this.contentsTrans, false);
}
}
}
|
3. UI_ListItem_Hero - 로비씬에 구성되는 UI 중 하나인 캐릭터 리스트를 관리한다.
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;
using UnityEngine.UI;
public class UI_ListItem_Hero : MonoBehaviour
{
public Text txtId;
public Button btn;
public Text txtName;
private GameObject uiModel;
public void Init(int id, string name, GameObject uiModel)
{
this.txtId.text = id.ToString();
this.txtName.text = name;
this.uiModel = uiModel;
this.uiModel.transform.SetParent(this.transform, false);
}
}
|
4. InGame - InGame 씬을 관리한다.
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
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InGame : MonoBehaviour
{
public UIInGame uiInGame;
private int selectedHeroId;
private CharacterData selectedCharacterData;
private void Start()
{
DataManager.GetInstance().Load();
}
public void Init(int selectedHeroId)
{
this.selectedHeroId = selectedHeroId;
this.selectedCharacterData = DataManager.GetInstance().GetCharacterDatas(this.selectedHeroId);
string Name = selectedCharacterData.res_name;
string ThumbName = selectedCharacterData.thumb_name;
int CurrentHp = selectedCharacterData.hp;
int MaxHp = selectedCharacterData.hp;
int CurrentExp = 50;
int TargetExp = 100;
int Level = 1;
this.uiInGame.Init(Name, ThumbName, CurrentHp, MaxHp, CurrentExp, TargetExp, Level);
//캐릭터 생성하기
string path = string.Format("Prefabs/{0}", this.selectedCharacterData.res_name);
GameObject heroShell = new GameObject();
heroShell.name = "Hero";
GameObject heroPrefabs = Resources.Load(path) as GameObject;
GameObject heroGo = Instantiate(heroPrefabs) as GameObject;
heroGo.transform.SetParent(heroShell.transform);
//리소스 이름 ch_01_01
//썸네일 thumb_ch_01_01
//Hp 게이지(current hp / max hp)
//exp 게이지 (current exp, target exp)
//레벨 1
//익명메소드 (dynamic)을 사용해서 넘기기인데 버그남..
//this.uiInGame.Init(
// new UIInGameParam
// {
// Name = selectedCharacterData.res_name,
// ThumbName = selectedCharacterData.thumb_name,
// CurrentHp = selectedCharacterData.hp,
// MaxHp = selectedCharacterData.hp,
// CurrentExp = 50,
// TargetExp = 100,
// Level = 1
// }
// );
}
}
|
5. UIInGame - InGame씬의 UI 를 관리한다.
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
|
using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
public class UIInGame : MonoBehaviour
{
public UIHeroState uiHeroState;
public Sprite[] arrThumbsIcons;
public SpriteAtlas uiInGameAtlas;
//public void Init(dynamic param)
//{
// //Debug.LogFormat("{0} {1} {2} {3} {4} {5} {6}", param.Name, param.ThumbName, param.CurrentHp,
// //param.MaxHp, param.CurrentExp, param.TargetExp, param.Level);
// //this.uiHeroState.Init(null, param.CurrentHp,
// // param.MaxHp, param.CurrentExp, param.TargetExp, param.Level, param.Name);
//}
public void Init(string Name, string ThumbName, int CurrentHp,
int MaxHp, int CurrentExp, int TargetExp, int Level)
{
Sprite spthumb = null;
//foreach(var thumb in this.arrThumbsIcons)
//{
// if(thumb.name == ThumbName)
// {
// spthumb = thumb;
// }
//}
//아틀라스 묶음에서 리소스 이름을 가진 스프라이트를 가져온다.
spthumb = this.uiInGameAtlas.GetSprite(ThumbName);
this.uiHeroState.Init(spthumb, CurrentHp, MaxHp,
CurrentExp, TargetExp, Level, Name);
}
}
|
6. UIHeroState - InGame씬의 UI 중 하나인 상태창을 관리한다.
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
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIHeroState : MonoBehaviour
{
public Image ImgThumb;
public Slider sliderHp;
public Slider sliderExp;
public Text txtProgress;
public Text txtLevel;
public Text txtName;
public void Init(Sprite spThumb, int currnetHp, int maxHp, int currentExp, int targetExp, int level, string name)
{
var strProgress = string.Format("{0}/{1}", currnetHp, maxHp);
this.txtProgress.text = strProgress;
this.txtLevel.text = level.ToString();
this.txtName.text = name;
this.ImgThumb.sprite = spThumb;
this.sliderHp.value = (float)currnetHp / (float)maxHp;
this.sliderExp.value = (float)currentExp / (float)targetExp;
}
}
|
7.UIInGameParam (참고용)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIInGameParam
{
public string Name;
public string ThumbName;
public int CurrentHp;
public int MaxHp;
public int CurrentExp;
public int TargetExp;
public int Level;
//Debug.LogFormat("{0} {1} {2} {3} {4} {5} {6}",param.Name, param.ThumbName, param.CurrentHp,
// param.MaxHp, param.CurrentExp, param.TargetExp, param.Level);
}
|
'C# > 수업내용' 카테고리의 다른 글
2020.05.25. 수업내용 - world 좌표 -> Screen좌표, hudText효과 연출하기/ 적 어그로 끌기 (0) | 2020.05.26 |
---|---|
2020.05.22. 수업내용 - 로그인 (InputField 이용) (0) | 2020.05.24 |
2020.05.21. 수업내용 - Atlas (0) | 2020.05.21 |
2020.05.21. 수업내용 - UI 카메라 설정 (0) | 2020.05.21 |
2020.05.21. 수업내용 - 포토샵_프로필 아이콘 (원형)으로 만들기, 기타 단축키 (0) | 2020.05.21 |