ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 슈팅게임 제작(2)
    실습/슈팅 2024. 3. 9. 03:10

    이번엔 Player의 이동방향에 따라 달라질 애니메이션을 만들어보자

    자를 이미지 원본을 선택한뒤 Sprite Mode - Multiple 선택후 Sprite Editor를 클릭한다 

    일정한 간격으로 똑같이 잘라줘야 하니 Slice - Type - Grid By Cell Size를 선택한뒤 적절한 사이즈와 간격을 입력한다

    그리고 Apply를 눌러 일정하게 잘 잘린것을 확인한다 

    성공적으로 잘렸다면 이렇게 프레임별로 이미지가 나눠진다

    이제 이렇게 나뉜 이미지를 가지고 Play에게 적용시켜보자

     

    Player를 선택해준뒤 Window - Animation - Animation

    Animation창이 뜨면 Create - 파일저장할 경로/이름 지정

    이름에 맞는 이미지 드래그하여 넣어주고 이미지 사이 일정한 간격을 줄 Samples는

    직접 재생을 해보며 자연스럽게 느껴질 정도로 조절해준다

     

    새로운 클립을 만들땐 애니메이션 이름을 클릭한뒤 Create New Clip을 눌러주면 된다.

    이런식으로 idle, Left, Right 총 3가지 상태의 애니메이션을 만들어주자

     

    이제 Player를 활성화한뒤 Window - Animation - Animator에 들어가면 Animator창을 띄울수 있다

    물론 아까 저장한 경로로 들어가도 하단에 보이듯 파일을 볼수 있다

     

    오브젝트를 우클릭한뒤 Make Transition으로 연결선을 만들수 있고,

    언제든지 내가 버튼을 누르는것에 따라 가만히 있다가도,왼쪽으로 가다가도, 오른쪽으로도 갈 수 있으니

    오른쪽 이미지처럼 각각 서로가 이어지게 트랜지션을 만들어주자

     

    이제 파라미터에 쓰일 변수를 만들어야하는데 원래는 IsLeftButtonDown, IsRightButtonDown

    이런식으로 Bool타입을 만들어 조절을 할까 싶었는데 생각해보니 어차피 좌우 이동에만 필요한 애니메이션이라면

    Int 타입으로 만들어준뒤 1,0,-1 이 3가지 상태로 조절할 수 있었다

     

    idle 상태에서 Left 애니메이션으로 전환하는것을 예로 들어보겠다

    우선 Has Exit Time 체크해제 뒤 Transition Duration을 0으로 줄여 바로바로 애니메이션이 변환될수 있게 한다

     

    그리고 중요한것. Conditions에서 Input의 값이 -1과 같아진다면 애니메이션이 Left로 변한다는 조건을 걸어주자

    이렇게 나머지 5개의 조건도 알맞게 걸어주었다면 애니메이션을 사용할 모든 준비가 끝났다

    이제 Player 스크립트에서 파라미터만 건드려주자

     

    우선 아까 Player를 선택하고 Animation을 만들어주었기에 당연히 Animation 컴포넌트가 추가되었다

    public class PlayerControl : MonoBehaviour
    {
        public float speed ;
        public bool TopTouch;
        public bool BottomTouch;
        public bool LeftTouch;
        public bool RightTouch;
        Animation anim;
        private void Start()
        {
            anim = GetComponent<Animation>();
        }

    애니메이션 컴포넌트부터 추가시켜주자

     

     void Update()
        {
            float x = Input.GetAxisRaw("Horizontal");
            if ((RightTouch && x == 1) || (LeftTouch && x == -1))
                x = 0;
            
            float y = Input.GetAxisRaw("Vertical");
            if ((TopTouch && y == 1) || (BottomTouch && y == -1))
                y = 0;
            
            transform.Translate(new Vector3(x, y, 0) * speed * Time.deltaTime);
                
                
            //추가된 내용
            if (Input.GetButtonDown("Horizontal") ||
                Input.GetButtonUp("Horizontal"))
            {
                anim.SetInteger("Input", (int)x);
            }
        }

    그리고 Update 메서드안에 이것만 추가해주면 된다

    x축 방향버튼을 누르거나 뗀 순간 "Input"이라는 파라미터 값에 x값을 넣어준다

     

    그리고 여기서 쓰이는 핵심함수는 SetInteger. 그리고 애니메이션 컴포넌트에서 온 파라미터이니 앞에는 anim을 붙여준다

    x는 float 타입으로 선언이 되었지만 SetInteger는 float 타입이 들어와 int값을 결정해줄수 없다

    그러니 앞에 (int)를 붙여 강제 형변환을 해준다

     

     if (Input.GetButtonDown("Horizontal") ||
                Input.GetButtonUp("Horizontal"))

     

    굳이 버튼을 누를때뿐만 아니라 때는것도 조건문안에 넣는 이유는 Input이 0이여야지만 하는 idle을 위해서이다

     

     

     

    '실습 > 슈팅' 카테고리의 다른 글

    슈팅게임 제작(3)  (2) 2024.03.13
    슈팅게임 제작(1)  (0) 2024.03.08
Designed by Tistory.