Chapter 8-3. 모닥불 : 불 옮겨 붙기
카테고리: Unity Lesson 3
태그: Unity Game Engine
인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
Chapter 8. 모닥 불에 고기 굽기
불에 닿으면 옮겨 붙게 하기
🚖 플레이어에게 옮겨 붙을 불 프리팹
- 이름은
Burn Effect Prefab
- 모닥 불 프리팹인
Flame
파티클 시스템과 거의 비슷하므로 일단 복사해서 만들어 주었다.- 검은 연기
Smog
는 지웠다. - 컴포넌트로 붙은 Collider 와 📜Fire.cs 는 제거했다.
- Emission 에서 방출되는 입자를 좀 적게 해주었다. 모닥불과는 다르게 좀 약한 규모의 불이므로.
- 검은 연기
📜Burn.cs
플레이어에게 옮겨 붙는 불.
Player
에게 붙인다.
- 플레이어에게 옮겨 붙은 불은 플레이어에게 일정 시간동안 데미지를 준 후 사라진다.
- 옮겨 붙는 불은 플레이어를 따라다녀야 하므로 플레이어에게 옮겨 붙는 불 프리팹을 따로 만들어, 플레이어가 불에 닿으면 플레이어의 자식으로 태어나게 해야 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Burn : MonoBehaviour
{
private bool isBurning = false;
[SerializeField] private int damage; // 옮겨 붙은 불의 데미지
[SerializeField] private float damageTime;
private float currentDamageTime;
[SerializeField] private float durationTime;
private float currentDurationTime;
[SerializeField]
private GameObject flame_prefab; // 불 붙으면 프리팹 생성
private GameObject go_tempFlame; // 붙은 불 프리팹을 Instantiate 해서 이 곳에 담을 것. (파괴시킬 거라 담아두는게 필요)
public void StartBurning()
{
if(!isBurning)
{
go_tempFlame = Instantiate(flame_prefab, transform.position, Quaternion.Euler(new Vector3(-90f, 0f, 0f)));
go_tempFlame.transform.SetParent(transform);
}
isBurning = true;
currentDurationTime = durationTime;
}
void Update()
{
if (isBurning)
{
ElapseTime();
}
}
private void ElapseTime()
{
if (isBurning)
{
currentDurationTime -= Time.deltaTime;
if (currentDurationTime <= 0)
Off();
if (currentDamageTime > 0)
currentDamageTime -= Time.deltaTime;
if (currentDamageTime <= 0)
Damage();
}
}
private void Damage()
{
currentDamageTime = damageTime;
GetComponent<StatusController>().DecreaseHP(damage);
}
private void Off()
{
isBurning = false;
Destroy(go_tempFlame);
}
}
- StartBurning() 👉 플레이어게 붙을 불 생성
- 플레이어가 모닥불과 충돌했을 때인 📜Fire의 OnTriggerStay(Collider other) 에서 호출 시킬 것이므로 public
- 이미 불이 붙어 있을 때 또 붙게 하면 안되므로
!isBurning
상태일 때만 프리팹을 생성하도록 한다.- 불 입자들은 하늘 위로 날아가야 하므로 회전갑은 X : -90 으로 준다.
- 태어날 위치는 플레이어인
transform.position
- 플레이어를 따라다닐 수 있도록 플레이어를 불의 부모로 설정한다.
- 이미 불이 붙어 있을때 또 불 붙게 하거나 추가 데미지를 가하면 안되므로
isBurning
필요 - 나머지는 📜Fire.cs 와 비슷.
GetComponent<StatusController>().DecreaseHP(damage);
이 코드 때문에 📜StatusController.cs 를 📜Burn.cs 과 같게 Player
에 붙는 것으로 옮겨 주었다.
- 옮겨 붙은 불은 0.5 초 마다 2 의 데미지를 주며 3 초 뒤에 사라진다.
- 📜StatusController.cs 를
Player
에 옮김.
📜Fire.cs
private void OnTriggerStay(Collider other)
{
if(isFire && other.transform.tag == "Player")
{
if (currentDamageTime <= 0)
{
other.GetComponent<Burn>().StartBurning();
thePlayerStatus.DecreaseHP(damage);
currentDamageTime = damageTime;
}
}
}
플레이어에게 불이 붙은 것을 확인할 수 있다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기