Unity_2기 내일배움캠프 TIL

Unity_2기 7주차 (231219)

잼잼재미 2023. 12. 19. 22:48

구현 내용


1. PotionItem 추가

  • PowerItem
  • SpeedItem
  • AttackSpeedItem

 

 

 

PowerItem 

public void PowerItem()
{
    _spriteRenderer.color = new Color(255, 255, 255, 0);
    _circleCollider.enabled = false;

    // 플레이어 기본 공격x 2
    _originAtk = GameManager.instance.DataManager.PlayerCurrentStats.attackSO.power;
    GameManager.instance.UpdatePlayerAttackSODatas(0, _originAtk, 0);

    // 스킬 공격x2
    foreach (SkillItemData skill in _skillItemDataList.skillDataList)
    {
        skill.Atk *= 2;
    }

    StartCoroutine(RestorePower());
}

IEnumerator RestorePower()
{
    yield return new WaitForSeconds(5f);

    // 기본 공격 복구
    GameManager.instance.UpdatePlayerAttackSODatas(0, -_originAtk, 0);

    // 스킬 복구
    foreach (SkillItemData skill in _skillItemDataList.skillDataList)
    {
        skill.Atk /= 2;
    }

    Destroy(gameObject);
}

 

기본공격은 Player의 Atk에 접근해서 Atk만큼 증가 시켰다가 코루틴을 사용해서 5초 뒤, 복구했다. 스킬은 모든 스킬을 가지고 있는 List를 순회해서 Atk를 전부 2배로 바꾸고 5초 뒤, 복구했다. Player가 가지고 있는 SkillData에 접근해서 Atk를 수정하면, 아이템을 먹고 다른 SkillItem을 먹는다면, 그 아이템은 적용이 안된다. 그래서 ScriptalbeObject 값 모두 변경했다. 그리고, 코루틴은 스크립트가 있는 오브젝트가 파괴되면, 실행되지 않기때문에, 아이템과 처음 접촉하면 color의 a값을 0으로 하고, 콜라이더를 enabled = false; 했다. 그리고 복구 후, 오브젝트를 파괴했다. SpeedItem과 AttackSpeedItem도 동일하게 구현했다.

 

 

2. SkillDamgeText 

 

 

 

SkillDamageText 스크립트

[SerializeField] private float _speed;
[SerializeField] private TMP_Text _damageText;
[SerializeField] private GameObject _damageTextPrefab;

void Update()
{
    transform.position += new Vector3(0, 0.5f, 0) * Time.deltaTime * _speed ;
}

public void CreateText(SkillItemData data, Transform transform)
{
    _damageText.text = data.Atk.ToString();
    Instantiate(_damageTextPrefab, transform.position + new Vector3(0, 0.5f, 0), Quaternion.identity);
}

 

TextMeshPro - Text를 사용해서 Text 프리팹을 만들었다. 그리고 스킬이 적과 충돌하면, 프리팹이 생성되도록 했다. Text는 Skill 스크립트에서 data를 받아와서 Atk에 접근했다.

 

 

DestroyPrefabs 스크립트

[SerializeField] private float _destroyTime;
void Start()
{
    Destroy(gameObject, _destroyTime);
}

 

프리팹 Destroy 스크립트를 만들어서 일정 시간 뒤, Text 프리팹이 파괴되도록 했다.

 

 

오늘의 회고


오전 알고리즘 코드카타 시간 후, 팀원들과 전체적으로 mainScene과 폴더 통합을 했다. 6명이 작업한 내용을 하나로 모으는 것이기 때문에 생각보다 시간이 오래걸렸다. 각자 개인적인 구현보다도 이런 통합 과정이 정말 중요하다고 느꼈다. 그리고 어제 구현했던 Item과 Skill의 사운드를 ScripablaObject에 추가했다. 또, Player의 특정 스탯을 증가시키는 PotionItem들을 구현했는데, Player를 내가 구현한 부분이 아니어서 스탯에 접근하는 것이 어려웠다. DamageText도 구현했는데 Skill에는 잘 작동하지만 기본공격에는 작동이 되지 않는다. 내일 기본공격이 적과 충돌하는 코드를 살펴서 추가해보겠다.

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 7주차 (231221)  (0) 2023.12.21
Unity_2기 7주차 (231220)  (0) 2023.12.20
Unity_2기 7주차 (231218)  (0) 2023.12.18
Unity_2기 6주차 (231215)  (1) 2023.12.15
Unity_2기 6주차 (231214)  (0) 2023.12.14