Chapter 8-2. 모닥불 : 불의 데미지

Date:     Updated:

카테고리:

태그:

인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

Chapter 8. 모닥 불에 고기 굽기

불에 닿으면 데미지 입기

📜Fire.cs

Flame 불 파티클 시스템에 붙여준다.

  • 불은 일정 시간이 지나면 꺼진다.
  • 불 위에 플레이어가 올라가면 데미지를 입는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Fire : MonoBehaviour
{
    [SerializeField] private string fireName;  // 불의 이름 (난로, 모닥불, 화롯불)
    [SerializeField] private int damage; // 불의 데미지

    [SerializeField] private float damageTime; // 데미지가 들어갈 딜레이 (매 프레임마다가 아닌 일정 시간마다 데미지를 주기 위하여)
    private float currentDamageTime;

    [SerializeField] private float durationTime;  // 불의 지속 시간
    private float currentDurationTime;

    [SerializeField]
    private ParticleSystem ps_Flame;  // 불 파티클 시스템. 꺼주기 위하여

    // 상태 변수
    private bool isFire = true;

    // 필요한 컴포넌트
    private StatusController thePlayerStatus;

    void Start()
    {
        currentDurationTime = durationTime;

        thePlayerStatus = FindObjectOfType<StatusController>();
    }

    void Update()
    {
        if (isFire)
        {
            ElapseTime();
        }
    }

    private void ElapseTime()
    {
        currentDurationTime -= Time.deltaTime;

        if (currentDurationTime <= 0)
            Off();
 

        if (currentDamageTime > 0)
            currentDamageTime -= Time.deltaTime;  // 1초에 1씩
    }

    private void Off()
    {
        ps_Flame.Stop();
        isFire = false;
    }

    private void OnTriggerStay(Collider other)
    {
        if(isFire && other.transform.tag == "Player")
        {
            if (currentDamageTime <= 0)
            {
                thePlayerStatus.DecreaseHP(damage);
                currentDamageTime = damageTime;
            }
        }
    }
}
  • 불 파티클 시스템은 durationTime 시간 동안만 재생 되며, 이 시간이 지나면 재생을 멈춘다.
    • 게임 시작 때부터 시작하여 매 프레임마다 ElapseTime() 에서 타임을 차감함
    • 불 끄기(재생 멈추기)
      • Off()
  • 불에 플레이어가 닿으면 플레이어의 HP 를 불의 데미지만큼 깎는다. 단, 데미지는 매 프레임마다 적용하는 거시 아닌, damageTime 시간을 간격으로 적용한다.
    • OnTriggerStay(Collider other)
      • 👉 Is Trigger가 체크된 Collider와 부딪치는 동안 발동되는 이벤트 함수
        • 둘 중 하나만 Is Trigger가 되어 있으면 된다.
        • Is Trigger가 체크되면 관통할 수 있으므로 불을 플레이어가 관통하게 되면 자동으로 발동 된다.
          • 플레이어가 불에 닿으면 other엔 플레이어 정보가 들어온다.
    • 이 함수가 발동 될때 currentDamageTimedamageTime로 초기화 되며, ElapseTime() 에서 0 이 될 때까지 1초에 1씩 차감.
      • 그래도 또 아직도 불 안에 있어서 OnTriggerStay(Collider other) 가 실행되면 또 currentDamageTimedamageTime로 초기화 되며 반복


설정

  • Player에게 “Player” 태그를 달았다.

image

Flame 불 파티클 시스템

  • 📜Fire.cs
    • 불에 닿는 동안, 0.1 초마다 데미지를 1 씩 받는다.
    • 불은 180 초 후에 꺼진다.
  • 불에 피어오르는 바닥 쪽에 Sphere Collider 를 붙여주었다.
    • Is Trigger가 체크되어 있어야 한다. 플레이어와 닿았는지 알 수 있어야 하며, 플레이어가 관통할 수 있어야 하므로.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기