1인 개발/숫자의 신

숫자의 신 개인 프로젝트 6일차

잼잼재미 2024. 8. 3. 17:32

구현 내용


1. Block Item 구현


 

  • Hp Item / Time Item / Destroy Item 추가
  • 일정 확률로 Block이 Item을 가지고 스폰
  • Dotween Pro 에셋 적용

 

 

Block 스크립트

public enum Item
{
    None,
    Hp,
    Time,
    Destroy,
}

private void SetItemType()
{
    int value = Random.Range(1, 101);
    int value2 = Random.Range(1, _itemTypes.Length);

    if (value <= 95) ItemType = Item.None;
    else ItemType = _itemTypes[value2];
}

 

각각 Item 이름을 enum으로 설정, 오브젝트를 활성화 할 때 마다, Item의 종류를 랜덤으로 설정했다.

 

 

Destroy Item

private void ItemAbility()

    if (ItemType == Item.Destroy)
    {
        if (_gameController.Blocks.Count <= 1) return;

        while(true)
        {
            int num = Random.Range(0, _gameController.MaxNumber + 1);

            if (_gameController.Blocks.ContainsKey(num))
            {
                _gameController.Blocks[num].GetComponent<Block>().ReduceHp();
                break;
            }
            else continue;
        }
    }
}

 

Dictionary 자료구조인 Blocks의 수가 자기 자신인 하나뿐일 때는 while문을 빠져나갈 수 없기 때문에 예외 처리를 했다. 그 외는 랜덤 값의 정수가 Blocks의 key값으로 가지고 있을 때 까지 반복문을 실행하고, 해당하는 데이터를 삭제 했다.

 

 

회고


오늘은 Block의 item을 구현했다. Item 효과를 가진 Block을 계산 성공하면 해당 Item 효과를 적용하도록 구현했다. Item 효과에 맞게 Block을 Dotween Pro를 사용해서 색이 깜빡이도록 설정했다. 어려운 코드는 거의 없었다. 하지만 Block을 빠른 속도로 계속 생성하고 계산을 하지 않으면 Block이 쌓이다가 유니티가 정지했다. 정확히 어떤 부분에서 오류가 나는지는 한번 더 확인해보도록 하겠다.