Unity/FPS Project

FPS Project - 4 [ 데미지2 ]

SiJun-Park 2025. 4. 5. 07:13

이번은 저번 Project - 3에 이어서 데미지 입는 부분을 추가 구현을 하였습니다.

 

몬스터가 피해를 입으면 빨간색으로 변하도록 하였습니다.

 

    public void Hit(float damage, object obj)
    {
        if (Dead) return;
        HP -= damage;
        if (HP <= 0) Die();

        switch (obj)
        {
            case PlayerControlManager player:
                player.TextManager.ChangeHp(HP);
                if (HitCheck == false) { HitCheck = true; ChangeColor(0); }
                break;
            case GameObject enemy:
                HpTextControl txt = Instantiate(MonsterHP, enemy.transform);
                txt.transform.position = new Vector3(enemy.transform.position.x +0.4f, enemy.transform.position.y + pos, enemy.transform.position.z);
                txt.OnSetting(damage, size);
                ChangeColor(1);
              break;
        }
    }

 

바뀐점은 ChangeColor라는 것이 생겼습니다

이것이 0이면 유저이고 1이면 몬스터입니다.

 

 public void ChangeColor(int type)
    {
        if (CurrentCoroutine != null) StopCoroutine(CurrentCoroutine);
        CurrentCoroutine = StartCoroutine("OnChangeColor", type);
    }

    IEnumerator OnChangeColor(int type)
    {

        if (type == 0)
        {
            Color color = HitScreen.color;
            yield return new WaitForSeconds(.2f);
            for (float i = 0; i < 0.5f; i += Time.deltaTime)
            {
                color.a = Mathf.Lerp(0.13f, 0f, i / 0.5f);
                HitScreen.color = color;
                yield return null;
            }
            HitCheck = false;
        }
        else
        {

            foreach (var item in SkinRenderer) item.material.color = Color.red;
            yield return new WaitForSeconds(ChangeSpeed);
            foreach (var item in SkinRenderer) item.material.color = Color.white;
        }
    }

 

 

그래서 피해를 입으면 ChangeColor에 들어와서 코루틴이 만약에 돌고있다면 중단시키고 새롭게 시작을 시킵니다.

*여기서 유저일 경우는 화면이 지속적으로 빨게지기 때문에 한번만 되도록 하였습니다.

https://sijun1191.tistory.com/37

 

RPG Project - 5 [ 플레이어 체력 감소 및 피해 효과 ]

이번 목표는 유저 체력 감소와 피해 효과 입니다.  몬스터가 유저를 인식하고 공격 시 유저는 피해를 입으며 화면이 반짝이는 효과를 주려고 합니다.  bool _isCheck; public void Hitted(int damage) { GameOb

sijun1191.tistory.com

위의 RPG Project에서 사용한 방법과 동일하게 하였습니다.

 

몬스터일 경우 코드를 본다면 foreach로 돌게 하였습니다

 

그 이유가 이번에 받은 asset이 여러 부위로 나뉘어져 있어서 한 부위만 하면 그 부위만 특정적으로 빨간색으로 변하기 때문에

 

모든 Render를 바꾸기 위해서 위와같이 작업을 하였습니다.

 

 

결과