본문 바로가기

Unity/Problems

2020-05-18 유니티 복습 (파일 입출력, 람다식, 대리자)

App.Class

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
 
public class App : MonoBehaviour
{
    public List<Character> heroList;
 
    public Dictionary<int, CharacterData> dicCharacterData;
    public Dictionary<int, CharacterInfo> dicCharacterInfo;
    private void Awake()
    {
        DataManager.GetInstance().LoadData();
        this.dicCharacterData = new Dictionary<int, CharacterData>();
        this.dicCharacterInfo = new Dictionary<int, CharacterInfo>();
        this.heroList = new List<Character>();
 
    }
    void Start()
    {
        this.dicCharacterData = DataManager.GetInstance().GetDicCharacterData();
 
        foreach (var pair in this.dicCharacterData)
        { 
            var hero = CreateHero();
            hero.Init(Vector3.zero);
 
            hero.id = pair.Value.id;
            hero.char_name = pair.Value.char_name;
            hero.job_name = pair.Value.job_name;
            hero.res_name = pair.Value.res_name;
 
            this.heroList.Add(hero);
        }
 
 
        foreach (var pair in this.dicCharacterData)
        {
            var info = new CharacterInfo();
            info.id = pair.Value.id;
            info.level = 1;
            info.name = pair.Value.char_name;
            this.dicCharacterInfo.Add(info.id, info);
        }
 
        foreach (var pair in this.dicCharacterInfo)
        {
            Debug.LogFormat("{0},{1}", pair.Value.id, pair.Value.name);
        }
 
        this.heroList[1].GetExp();
 
        heroList[1].onLevelup = () =>
        {
            this.dicCharacterInfo[1].level += 1;
        };
 
        foreach (var pair in this.dicCharacterInfo)
        {
            Debug.LogFormat("{0},{1}", pair.Value.id, pair.Value.name);
        }
 
 
 
    }
 
    public Character CreateHero()
    {
        var heroGo = new GameObject();
        heroGo.name = "Hero";
        heroGo.transform.SetParent(this.transform);
        var Character = heroGo.AddComponent<Character>();
        return Character;
    }
    
    void Update()
    {
        
    }
 
    
}
 
 
 

DataManager.Class

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Newtonsoft.Json;
using System.Linq;
 
public class DataManager
{
    
    static DataManager instance;
 
    private Dictionary<int, CharacterData> dicCharacterData;
 
    private DataManager()
    {
        this.dicCharacterData = new Dictionary<int, CharacterData>();
    }
 
    public static DataManager GetInstance()
    {
        if (DataManager.instance == null){
            instance = new DataManager();
        }
        return DataManager.instance;
    }
    public void LoadData()
    {
        TextAsset textAsset = Resources.Load("Json/character_data"as TextAsset;
        string json = textAsset.text;
        this.dicCharacterData = JsonConvert.DeserializeObject<CharacterData[]>(json).ToDictionary(x => x.id, x => x);
    }
 
    public Dictionary<int, CharacterData> GetDicCharacterData()
    {
        return this.dicCharacterData;
    }
 
 
}
 
 
 

Character.Class

더보기
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
 
public class Character : MonoBehaviour
{
    public int id { get; set; }
    public string char_name { get; set; }
    public string job_name {get; set;}
    public string res_name { get; set; }
 
    public UnityAction onLevelup;
    void Start()
    {
        
    }
 
    public void Init(Vector3 initPos)
    {
        this.transform.position = initPos;
    }
 
    public void GetExp()
    {
        Debug.Log("몬스터를 잡아서 30 경험치를 얻었다.");
 
        //if () 대충 조건식 경험치 꽉참 레벨업해야됨
        //{ }
        //else
        //{ }
 
        this.onLevelup();
    }
    void Update()
    {
        
    }
}
 
 
 

CharacterInfo.Class

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CharacterInfo 
{
    public int id { get; set; }
    public int level { get; set; }
    public string name { get; set; }
}
 
 
 

CharacterData.Class

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CharacterData
{
    public int id;
    public string char_name;
    public string job_name;
    public string res_name;
}
 
 
 

 

 

 

에러...

 

 

에러난코드..

 

 

데이터 매니저로 데이터받아와서 역직렬화까지 잘되는데, 대리자연습이나 해볼까하고 썼는데, 에러...

당장은 왜 에러가 났는지 안보이고, 시간만 까먹을거같아서 일단 올려놓고 나중에 검증.

'Unity > Problems' 카테고리의 다른 글

2020-05-25 캐릭터 마우스 클릭 이동시 이벤트  (0) 2020.05.25
MainCam과 UICam의 설정문제  (0) 2020.05.22
2020-05-18 유니티 파일 입출력...  (0) 2020.05.18
UnityException 오류  (0) 2020.05.14
ArgumentException 오류  (0) 2020.05.14