본문 바로가기

Unity/수업내용

2020-05-19 수업내용 스크롤뷰

수동으로 스크롤뷰 만들기

 

유니티 화면 1-1

 

유니티 화면 1-2

 

 

 

 

동적으로 스크롤뷰 만들기

 

유니티 화면 1-1 ListItem_Mission

 

유니티 화면 2-1 SampleScene

 

 

소스코드

 

App.class

더보기
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;
 
public class App : MonoBehaviour
{
    public UIApp uIApp;
    // Start is called before the first frame update
    void Start()
    {
        uIApp.Init();
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
}
 
 
 

 

UIApp.class

더보기
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 System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using UnityEngine.AI;
using System.Linq;
 
public class UIApp : MonoBehaviour
{
    public Transform contents;
 
    private GameObject listItemPrefab;
    private Dictionary<int, MissionData> dicMissionDatas;
    public void Init()
    {
        var ta = Resources.Load<TextAsset>("mission_data");
        this.dicMissionDatas =
            JsonConvert.DeserializeObject<MissionData[]>(ta.text).ToDictionary(x => x.id, x => x);
 
        this.listItemPrefab =
      Resources.Load<GameObject>("Prefabs/ListItem_Mission");
 
        foreach (var data in this.dicMissionDatas.Values)
        {
 
            var listItemGo =
               Instantiate<GameObject>(this.listItemPrefab);
            var uiBinder = listItemGo.GetComponent<UIBinder_ListItem_Mission>();
 
            uiBinder.onClickBtnReward = (id) =>
            {
                Debug.LogFormat("mission id: {0}", id);
                var missionData = this.dicMissionDatas[id];
                Debug.LogFormat("[reward] type: {0}, amount: {1}", missionData.reward_type, missionData.reward_amount);
            };
 
            var missionName = string.Format(data.name, data.goal);
            uiBinder.Init(data.id, missionName);
            listItemGo.transform.SetParent(contents, false);
        }
    }
}
 
 
 

 

UIBinder_ListItem_Mission.class

더보기
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
 
public class UIBinder_ListItem_Mission : MonoBehaviour
{
    public Text textMissionName;
    public Button btnGetReward;
    public UnityAction<int> onClickBtnReward;
 
    private int id; //mission id;
 
    public void Init(int id,string missionName)
    {
        this.id = id;
        this.textMissionName.text = missionName;
        this.btnGetReward.onClick.AddListener(() =>
        {
            this.onClickBtnReward(this.id);
        });
    }
}
 
 
 

 

MissionData.class

 

더보기
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 MissionData
{
    public int id;
    public string name;
    public int goal;
    public string res_name;
    public int reward_type;
    public int reward_amount;
    public bool btn_icon_type;
}
 
 
 
 

 

 

 

 

스크롤뷰 종료버튼있는 팝업창 만들기(생성과 동시에 초기화됨)

 

유니티화면 1-1 

 

소스코드

 

 

App

더보기
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class App : MonoBehaviour
{
    public UIApp uiApp;
    private GameObject uiMissionPrefab;
    private UIMission uiMission;
 
    void Start()
    {
        this.uiMissionPrefab = Resources.Load<GameObject>("Prefabs/UIMission");
 
        this.uiApp.onClickBtnMission = () => {
            Debug.Log("show mission popup");
 
            this.uiMission =
                Instantiate<GameObject>(this.uiMissionPrefab).GetComponent<UIMission>();
 
            this.uiMission.btnClose.onClick.AddListener(() => {
                Object.Destroy(this.uiMission.gameObject);
            });
 
            this.uiMission.Init();
 
        };
    }
 
    void Update()
    {
 
    }
}
 
 
 

 

MissionData

더보기
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 MissionData
{
    public int id;
    public string name;
    public int goal;
    public string res_name;
    public int reward_type;
    public int reward_amount;
    public bool btn_icon_type;
}
 
 
 
 

 

UIApp

더보기
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class UIApp : MonoBehaviour
{
    public Button btnMission;
    public System.Action onClickBtnMission;
 
    // Start is called before the first frame update
    void Start()
    {
        this.btnMission.onClick.AddListener(() =>
        {
            this.onClickBtnMission();
        });    
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
}
 
 
 

 

UIBinder_ListItem_Mission

더보기
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
 
public class UIBinder_ListItem_Mission : MonoBehaviour
{
    public Text textMissionName;
    public Button btnGetReward;
    public UnityAction<int> onClickBtnReward;
 
    private int id; //mission id;
 
    public void Init(int id,string missionName)
    {
        this.id = id;
        this.textMissionName.text = missionName;
        this.btnGetReward.onClick.AddListener(() =>
        {
            this.onClickBtnReward(this.id);
        });
    }
}
 
 
 

 

UIMission

더보기
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 System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using UnityEngine.AI;
using System.Linq;
using UnityEngine.UI;
 
public class UIMission : MonoBehaviour
{
    public Transform contents;
    public Button btnClose;
 
    private GameObject listItemPrefab;
    private Dictionary<int, MissionData> dicMissionDatas;
    public void Init()
    {
        var ta = Resources.Load<TextAsset>("mission_data");
        this.dicMissionDatas =
            JsonConvert.DeserializeObject<MissionData[]>(ta.text).ToDictionary(x => x.id, x => x);
 
        this.listItemPrefab = Resources.Load<GameObject>("Prefabs/ListItem_Mission");
 
        foreach (var data in this.dicMissionDatas.Values)
        {
            var listItemGo = Instantiate<GameObject>(this.listItemPrefab);
            var uiBinder = listItemGo.GetComponent<UIBinder_ListItem_Mission>();
 
            uiBinder.onClickBtnReward = (id) =>
 
            {
                Debug.LogFormat("mission id: {0}", id);
                var missionData = this.dicMissionDatas[id];
                Debug.LogFormat("[reward] type: {0}, amount: {1}", missionData.reward_type, missionData.reward_amount);
            };
 
            var missionName = string.Format(data.name, data.goal);
            uiBinder.Init(data.id, missionName);
            listItemGo.transform.SetParent(contents, false);
        }
    }
}
 
 
 

 

해야할일, 스크롤바 팝업창 새로만들어 보기