Chapter 8-2. 모닥불 : 불의 데미지
카테고리: Unity Lesson 3
태그: Unity Game Engine
인프런에 있는 케이디님의 [유니티 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
엔 플레이어 정보가 들어온다.
- 플레이어가 불에 닿으면
- 둘 중 하나만
- 👉
- 이 함수가 발동 될때
currentDamageTime
가damageTime
로 초기화 되며, ElapseTime() 에서 0 이 될 때까지 1초에 1씩 차감.- 그래도 또 아직도 불 안에 있어서 OnTriggerStay(Collider other) 가 실행되면 또
currentDamageTime
가damageTime
로 초기화 되며 반복
- 그래도 또 아직도 불 안에 있어서 OnTriggerStay(Collider other) 가 실행되면 또
- OnTriggerStay(Collider other)
설정
Player
에게 “Player” 태그를 달았다.
Flame
불 파티클 시스템
- 📜Fire.cs
- 불에 닿는 동안, 0.1 초마다 데미지를 1 씩 받는다.
- 불은 180 초 후에 꺼진다.
- 불에 피어오르는 바닥 쪽에 Sphere Collider 를 붙여주었다.
Is Trigger
가 체크되어 있어야 한다. 플레이어와 닿았는지 알 수 있어야 하며, 플레이어가 관통할 수 있어야 하므로.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기