EasyCastleUNITY

드래곤 플라이트 모작 개발일지 12(메테오 날아오기 전에, 경고 애니메이션 및 보스 출현 경고 만들기) 본문

2D 프로젝트 개발 일지(드래곤 플라이트 모작)

드래곤 플라이트 모작 개발일지 12(메테오 날아오기 전에, 경고 애니메이션 및 보스 출현 경고 만들기)

EasyCastleT 2023. 9. 20. 21:29

메테오 경고 애니메이션

여태까지, 메테오는 별도의 경고 없이, 화면밖의 랜덤 위치에서 생성되어 날아오고 있었습니다. 

보스가 살아있으면, 메테오 생성되지 않음

그래서 메테오를 대비하는 것이 힘들었습니다. 

그래서 메테오가 날아오는 경로를 미리 알려주는 애니메이션을 만들어 보려고 합니다. 

먼저 필요한 리소스들을 준비합니다. 

이렇게 위의 3개의 리소스를 활용하여, 애니메이션을 만들었습니다. 

그리고 메테오가 날아오는 경고소리도 있기에, 그 소리에 맞추어서 애니메이션을 만들었습니다. 

총 1초 분량의 소리입니다. 그래서 소리에 맞추어서 애니메이션도 1초로 맞추어 만들어 주었습니다. 

만든 경고 애니메이션

그리고 살짝의 편법을 사용했습니다.  이러면 별도의 코드를 수정할 필요가 적어져 선택했습니다.

그래서 이 애니메이션을 미리 만들어둔 메테오 프리팹에 연결하였습니다.

그리고 경고 애니메이션의 애니메이션 이벤트를 등록하고

메테오 스크립트 일부분

애니메이션이 끝나면, 대리자가 호출이 되어, meteoMove를 true로 만들고, 메테오 경고 오브젝트를 비활성화하고

메테오가 발사됩니다.

실제 실행한 장면

보스 출현 경고 애니메이션

이 애니메이션은 UI 상에서의 애니메이션입니다. 

먼저 양 옆의 경고 라인을 움직이기 위해, 전에 만들어둔 배경 스크롤링 스크립트를 응용하여,

라인을 움직이게 만들었습니다. 

AlertLineScrolling

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AlertLineScrolling : MonoBehaviour
{
    private enum eType
    {
        Left,Right
    }
    [SerializeField] private eType type;
    [SerializeField] private float scrollSpeed = 0.5f;
    [SerializeField] private float endPosY; //전환되는 좌표
    Vector3 startPos;
    // Start is called before the first frame update
    void Start()
    {
        this.startPos = this.GetComponent<RectTransform>().anchoredPosition;
    }

    // Update is called once per frame
    void Update()
    {
        RectTransform rectTransform = GetComponent<RectTransform>();
        if(this.type == eType.Left)
        {
            rectTransform.anchoredPosition = new Vector2(rectTransform.anchoredPosition.x,
           rectTransform.anchoredPosition.y + scrollSpeed);
        }
        else if(this.type == eType.Right)
        {
            rectTransform.anchoredPosition = new Vector2(rectTransform.anchoredPosition.x,
           rectTransform.anchoredPosition.y - scrollSpeed);
        }
        this.SelfComeback(rectTransform);
    }

    private void SelfComeback(RectTransform rect)
    {
        if(this.type == eType.Right)
        {
            if (rect.anchoredPosition.y < endPosY)
            {
                rect.anchoredPosition = this.startPos;
            }
        }
        else if(this.type == eType.Left)
        {
            if (rect.anchoredPosition.y > endPosY)
            {
                rect.anchoredPosition = this.startPos;
            }
        }
        
    }
}

UI상에서 움직여야 하기에, RectTransform을 사용합니다. 

각 라인의 인스펙터 정보

이렇게 옆의 라인을 움직이게 하는 것은 구현했습니다. 

이제 텍스트들과 보스 실루엣을 구현해보겠습니다.

이 2가지 리소스를 통해 만들었습니다. 

만든 애니메이션

그리고 이 애니메이션에도 애니메이션 이벤트를 등록하고

게임 메인에서

토벌 점수가 3만점이 넘어가면, 지금 만든 경고 애니메이션이 나오고, 애니메이션이 끝나면

보스를 소환합니다. 아래는 이 결과입니다. 

이렇게 경고 애니메이션들을 구현완료했습니다.