일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 개발일지
- 팀 프로젝트
- 연습
- VR
- 개발
- 멀티플레이
- CGV
- XR
- ChatGPT
- input system
- 앱 배포
- 팀프로젝트
- OVR
- 가상현실
- 유니티 UI
- 유니티 GUI
- 유니티
- Photon Fusion
- 모작
- HAPTIC
- 포트폴리오
- 길건너 친구들
- 오큘러스
- meta
- Oculus
- meta xr
- 드래곤 플라이트 모작
- 드래곤 플라이트
- 유니티 Json 데이터 연동
- 오브젝트 풀링
Archives
- Today
- Total
EasyCastleUNITY
드래곤 플라이트 모작 개발일지4 (드래곤 사망시 이펙트 구현) 본문
드래곤 플라이트는 여러가지 연출이 많이 들어간 게임입니다.
이번에는 그 중에서도 드래곤이 죽으면 그 위치에 연기 이펙트(애니메이션)이 시행되도록 해보겠습니다.
먼저 연기 리소스가 필요한데, 드래곤 플라이트의 연기 역할을 하는 리소스는 아래 그림입니다.
이 하나의 이미지를 가지고 먼저 애니메이션을 만들었습니다.
처음에는 퍼지듯이 나오고, 마지막 즘에는, 각 이미지의 alpha값을 서서히 줄여 사라지는 듯한 연출을 했습니다.
드래곤 사망처리
이제 앞에서 총알과 드래곤의 충돌처리를 했었는데, 드래곤에게 hp를 만들고, 그 hp가 0이되면, Destroy해보겠습니다.
총알과 부딫치면, hp가 감소하고, 0이되면 사라지도록했습니다.
대리자 활용
Dragon 스크립트에서 죽었을 때의 좌표를 대리자를 활용하여
메인으로 넘기고, 메인에서 드래곤이 죽었을 때, 그 자리에 사망 애니메이션을 생성하도록 했습니다.
Dragon
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dragon : MonoBehaviour
{
public System.Action <Vector3> onDie;
enum eDragonType
{
White,Gold
}
[SerializeField] private eDragonType dragonType;
private float moveSpeed;
private int hp;
private Vector3 deadPos;
// Start is called before the first frame update
void Start()
{
this.moveSpeed = 3f;
if(this.dragonType == eDragonType.White)
{
this.hp = 5;
}
else if(this.dragonType == eDragonType.Gold)
{
this.hp = 8;
}
}
// Update is called once per frame
void FixedUpdate()
{
this.transform.Translate(Vector2.down * Time.deltaTime * this.moveSpeed);
this.SelfComeback();
}
//테스트용 코드
private void SelfComeback()
{
if (this.transform.position.y < -5.5f)
{
this.transform.position = new Vector3(this.transform.position.x, 5.86f, this.transform.position.z);
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Bullet"))
{
Debug.LogFormat("<color=cyan>{0} Dragon이 총알과 충돌함</color>",this.dragonType);
this.HitDamage();
}
}
private void HitDamage()
{
this.hp -= 1;
if (this.hp <= 0)
{
this.deadPos = this.transform.position; //죽었을 때의 좌표를 저장
onDie(this.deadPos);
Destroy(this.gameObject);
}
}
}
GameMain
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameMain : MonoBehaviour
{
[SerializeField] private Player player;
[SerializeField] private Dragon[] dragons;
[SerializeField] private BulletGenerator bulletGenerator;
[SerializeField] private GameObject dustPrefab;
// Start is called before the first frame update
void Start()
{
foreach(var dragon in dragons)
{
dragon.onDie = (deadPos) => {
GameObject dust = Instantiate(this.dustPrefab);
dust.transform.position = deadPos;
};
}
}
// Update is called once per frame
void Update()
{
this.bulletGenerator.Shoot();
}
}
사망 애니메이션이 같은 것만 나오면, 사용자의 몰입감을 방해할 수 있습니다.
그래서 사망 애니메이션을 여러 개 만들고 랜덤으로 등장하도록 해보겠습니다.
사망 애니메이션 추가 제작
기본적으로 처음 형태를 잡은 다음에, 애니메이션 녹화 기능을 활용하여, 조금씩 이동 및 회전, 알파 값을 조정하여
만들었습니다.
이 3번째 애니메이션도 2번째와 같은 방법으로 만들었습니다.
랜덤함수를 통해 3개의 애니메이션 중 하나가 실행되도록 하였습니다.
이렇게 드래곤이 죽으면 사망 이펙트가 생기는 것에 대한 구현을 마쳤습니다.
'2D 프로젝트 개발 일지(드래곤 플라이트 모작)' 카테고리의 다른 글
드래곤 플라이트 모작 개발일지6 (드래곤 오브젝트 풀링 및 웨이브 만들기) (0) | 2023.09.14 |
---|---|
드래곤 플라이트 모작 개발일지5(드래곤이 죽으면, 그 자리에 아이템 생성) (0) | 2023.09.14 |
드래곤 플라이트 모작 개발일지3 (총알과 드래곤 충돌처리 및 배경 스크롤링) (0) | 2023.09.13 |
드래곤 플라이트 모작 개발일지2 (총알발사와 오브젝트 풀링) (0) | 2023.09.13 |
드래곤 플라이트 모작 개발일지1 (플레이어 이동 및 충돌처리) (0) | 2023.09.13 |