카테고리 없음

본캠프_TIL_68일차(몬스터 타입 트러블 슈팅)

티-히히 2024. 12. 18. 20:58
  • 오전
    • 오전회의
    • 스테이지 선택 스크롤 가능하게v
  • 오후
    • 타이틀씬 배경화면 작업v
    • 스토리 패널작업v
    • win popup losespopup 위로 올라오게v

 

몬스터 타입이 하나만 가져와지는 오류

private void SetMonsterScroll()
{
    //_testSOs = DataManager.Instance.GetTestSprite();
    _monsterSOs = DataManager.Instance.GetMonsterSOs();
    _sprites = Resources.Load<SpriteAtlas>("UI/UISprites/MonsterSprites");

    _monsterListData = new Dictionary<string, int>();
    for (int i = 0; i < _monsterSOs.Length; i++)
    {
        if (_monsterSOs[i].monsterType == MonsterType.Stationary)
        {
            GameObject Instance = Instantiate(monsterListSlot);

            Instance.transform.SetParent(monsterListScroll);
            Instance.transform.localScale = Vector3.one;

            var sprite = Instance.transform.GetChild(0).GetComponent<Image>();
            sprite.sprite = _sprites.GetSprite(_monsterSOs[i].poolTag);

            _monsterListData.Add(_monsterSOs[i].poolTag, _monsterSOs[i].id);
        }
    }
}

 

다음 코드는 몬스터 리스트를 보여주는 코드입니다.

if문을 타고 몬스터 타입이 Stationary인 몬스터만 와야하는데 모두 불러와지는 현상이 발생했습니다.

 

 

알고보니 모든 몬스터 타입이 Stationary로 불러와지고 있었습니다.

 

{
  "Monster_Data": {
    ....
    "MonsterType : Enum<MonsterType>": ["Stationary", "Stationary", "Stationary", "Stationary", "Summoner", "Minion", "Minion", "Minion", "Minion"]
    ...
  },

 

json정보가 잘못된것이 아닌지 확인해본 결과. json은 정상이었습니다.

 

 

private MonsterSO[] SetMonsterSOs()
{
    List<Monster_Data.Monster_Data> monsterDataList = Monster_Data.Monster_Data.GetList();

    MonsterSO[] monsterSOs = new MonsterSO[monsterDataList.Count];
    for (int i = 0; i < monsterSOs.Length; i++)
    {
        monsterSOs[i] = ScriptableObject.CreateInstance<MonsterSO>(); // 인스턴스 생성
        monsterSOs[i].id = monsterDataList[i].id;
        monsterSOs[i].poolTag = monsterDataList[i].name;
        monsterSOs[i].fatigue = monsterDataList[i].fatigue;
        monsterSOs[i].minFearInflicted = monsterDataList[i].minFearInflicted;
        monsterSOs[i].maxFearInflicted = monsterDataList[i].maxFearInflicted;
        monsterSOs[i].cooldown = monsterDataList[i].cooldown;
        monsterSOs[i].humanScaringRange = monsterDataList[i].humanScaringRange;
        monsterSOs[i].requiredCoins = monsterDataList[i].requiredCoins;
    }
    return monsterSOs;
}

 

몬스터데이터를 셋팅해주는 함수를 살펴보겠습니다.

잘 보니 몬스터 타입값을 셋팅해주지 않았었습니다

 

monsterType 은 enum타입으로

몬스터 타입값이 들어온 게 없으니 자동으로 0( Stationary )이 들어갔던 것 이었습니다.

 

monsterSOs[i].monsterType = monsterDataList[i].MonsterType;

 

다음 코드를 추가하여 해결했습니다.