Unity/베어유 : 어몽어스 개발 노트

[12강] 미션 애니메이션 제작하기

서니션 2023. 1. 14. 20:40
728x90
반응형

미션 버튼이 활성화 되는 기능과

미션 버튼을 눌렀을 때 미션 창 UI가 올라오는 애니메이션 만든는 방법을 배움

 

캐릭터를 더블클릭해서 캔버스 안에 버튼을 만들어준다

Use 이미지를 넣어준다

 

크기는 이렇게 설정한다

그리고 아래 Button에 있는 Interactable은 체크 해제한다

 

playerCtrl.cs 를 열어주고

using UnityEngine.UI;

를 맨위에 선언해준다

 

public Button btn; 으로 가져오고

private void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag == "Mission")
    {
        btn.interactable = true;
    }
}

private void OnTriggerExit2D(Collider2D col)
{
    if (col.tag == "Mission")
    {
        btn.interactable = false;
    }
}

수정 및 추가해준다

 

코코넛과 가까워지면 USE가 활성화 되고, 멀어지면 비활성화 되는 것을 확인할 수 있다

 

이번에는 Mission 창 UI를 만들어본다

 

Canvas를 MissionUI로 이름을 바꿔주고 

다음과 같이 설정해준다

 

Cancel

Mission UI의 Animation을 만들어준다

Down과 Up을 만들어주었는데

Up은 y가 0

Down은 -1000을 적어준다

 

이 때 주의해야 할 점

무턱대고 왼쪽에 적는게 아니라

애니메이션 보면 저 세로로 흰 줄... 저거를 끝 부분에 이동시켜서 -1000의 값을 입력시켜야 한다!!

 

Mission_Idle_Down Animation은 처음과 끝 부분 둘 다 -1000의 y값을 입력시켜준다

처음부터 끝까지 가만히 있는 애니메이션이다

Mission_Up 올라오는 애니메이션은

처음 y값을 -1000으로 하고 끝 값을 0으로 둔다

 

그리고 내려가는 애니메이션과 올라가는 애니메이션은 LoopTime을 꺼주어야함

Idle은 가만히 있는 애들이라 상관없는데 올라오고 내려가는거는 한 번씩만 실행될 것이기 때문이다

 

Mission_Idle_Down을 Default로 설정해준다

내려가 있는 상태가 기본이기 때문이다

 

이런 식으로 Transition을 연결해준다

 

내려갔다 올라가는 중간에 Has Exit Time은 꺼주기

딜레이는 최대한 줄여주고

isUp일 때 true로

올라갔다 내려가는 것도 똑같이하고 isUp일 때 false로 조정

 

이제.. 애니메이션을 넣어주기 위한 스크립트를 작성한다

 

Mission1.cs 를 만들어서

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

public class Mission1 : MonoBehaviour
{
    Animator anim;
    PlayerCtrl playerCtrl_script;
    void Start()
    {
        anim = GetComponentInChildren<Animator>();
    }
    
    // 미션 시작
    public void MissionStart()
    {
        anim.SetBool("isUp",true);
        playerCtrl_script = FindObjectOfType<PlayerCtrl>();
    }
    
    // 엑스버튼 누르면 호출
    public void MissionCancle()
    {
        anim.SetBool("isUp",false);
        playerCtrl_script.MissionEnd();
    }
}

PlayerCtrl.cs에도

GameObject coll; // 미션 아이템 저장

를 작성해주고 아래에 수정 및 작성해준다

private void OnTriggerEnter2D(Collider2D col)
{
    if (col.tag == "Mission")
    {
        coll = col.gameObject;
        btn.interactable = true;
    }
}

private void OnTriggerExit2D(Collider2D col)
{
    if (col.tag == "Mission")
    {
        coll = null;
        btn.interactable = false;
    }
}

// 버튼 누르면 호출
public void ClickButton()
{
    // MissionStart를 호출
    coll.SendMessage("MissionStart");

    isCantMove = true;
    btn.interactable = false;
}

// 미션 종료하면 호출
public void MissionEnd()
{
    isCantMove = false; 
}

코코넛에가서 USE버튼을 누르면 애니메이션이 잘 작동하는 것을 확인 가능하다

 

현재까지 했던 것을 동영상으로 짧게 녹화해보았다.

 

 


역시 코드 작성이 많고 이것저것 만졌던 것이 많아서

아마 정리했던 글 중에 스크롤이 제일 긴 것 같다..

아직 코드 작성의 정의를 잘 모르겠어서 이해한 후 다음 강의를 들어야겠다.

728x90
반응형