본문 바로가기

미피의 작업실/게임 제작기

컴맹이 게임 만드는 이야기#3(캐릭터 걷기 모션, 비쥬얼스튜디오 스크립트 자동완성/Top down 2D RPG)

 

<캐릭터 걷기 모션>

//캐릭터 애니메이션, 코드

 

 

우선 난 Top down 2D RPG 형식의 게임을 만들고 싶어서 그런 자료 위주로 찾았다

기본적으로 캐릭터 움직임을 만들기 위해서 이곳저곳 강좌 찾아보면서 나한테 맞는 코드들을 짜맞춰서 만들었다

어떤 코드를 선택했는지 어떻게 짜맞췄는지 정리해놓으려고 한다

나중에 내가 까먹을 수도 있으니까ㅋㅋ

 

 

우선 기본적인 움직임은 Brackeys 영상을 참고했다. 이 쌤 뭔가 사람이 해맑고 자료 찾다가 자주 봐서 그런지 내적 친밀감 에베레스트급

나중에 다시 참고하기 위해 중요한 내용만 빼냈다

혹시 몰라 말하지만 내가 아래 쓴 것들을 그대로 복붙하면 전혀 실행되지 않을거다...

함수 같은 거 다 빼고 보기 쉽게 적어놓은 거라 희희


        public float moveSpeed = 5f; 
        Vector2 movement; 

        public Rigidbody2D RB; 
        public Animator Anim; 

 

        movement.x = Input.GetAxisRaw("Horizontal"); 
        movement.y = Input.GetAxisRaw("Vertical"); 

        Anim.SetFloat("moveX", movement.x); 
        Anim.SetFloat("moveY", movement.y); 
        Anim.SetFloat("Speed", movement.sqrMagnitude); 

 

        RB.MovePosition(RB.position + movement * moveSpeed * Time.fixedDeltaTime);


Animator에서 Speed는 왜 넣는건지 계속 긴가민가했는데... 여전히 모르겠다

Speed는 Blend Tree에서 각 상태로 Transition할 때 쓰는 Float이다

Transition 가능하게 값을 주는 거 같은데(조건에 Speed를 0.01보다 많게, 적게, 이렇게 설정되어 있다)

왜 sqrMagnitude일까... 이게 뭘까?

 

 

 

그런데 이 영상에 나온대로만 하면 캐릭터가 움직인 뒤 멈추면 다시 앞을 바라본다

움직이던 방향을 계속 보고 있어야 자연스러울 것 같아 추가한 다른 코드


        if (Input.GetAxisRaw("Horizontal") == 1 || Input.GetAxisRaw("Horizontal") == -1 || Input.GetAxisRaw("Vertical") == 1 || Input.GetAxisRaw("Vertical") == -1) 
        { 
           Anim.SetFloat("lastMoveX", movement.x); 
           Anim.SetFloat("lastMoveY", movement.y);            
        }


몇 가지 방법을 찾았었는데 그 중에서 사용한 건 이 코드다

코드는 이 쌤 영상 참고했다 ↓

 

 

 

 

 

그리고 달리는 것도 넣고 싶어서..ㅋㅋ 또 찾은 자료

할 줄 아는 건 없으면서 욕심만 많다

 

 

이 쌤은 영어지옥에서 찾은 귀한 한국쌤에다가 중간중간 코드 뜻도 설명해주고... 덕분에 스크립트 이해하는 데 너무 도움됐다ㅠㅠ 

내가 코드를 이것저것 섞어서 쓰다보니 이 쌤이 알려준 그대로 쓰기는 힘들어서 내 스크립트에 맞게 조금 수정했다


 if (Input.GetAxisRaw("Horizontal") != 0 || Input.GetAxisRaw("Vertical") != 0) 
        { 
            if (Input.GetKey(KeyCode.LeftShift)) 
            { 
                applyRunSpeed = runSpeed; 
            } 
            else 
                applyRunSpeed = 0;

 

RB.MovePosition(RB.position + movement * (moveSpeed + applyRunSpeed) * Time.fixedDeltaTime);


영상에서 하는 것처럼 원래 있던 속도 코드에도 달리기속도(applyRunSpeed)를 추가해줬다

이젠 시프트키 누르면 속도가 더 빨라진다 홀홀~

 

 

달리기 모션도 바꾸고 싶은데 아직 모르겠다...

내가 코드 짜보고 있긴 한데 결과물이 안 나온다 

 

3D나 2D 횡스크롤 느낌의 게임에선 Trigger나 bool로 각 Blend Tree를 쉽게 왔다갔다 하는 거 같은데

Top down은 x, y 값 2개를 관리하다보니 트리거를 어떻게 써야될지 모르겠다 나의 한계ㅠㅠ

자료 찾아보면 있을까...

 

 

 

 

일단은 캐릭터 모션 설정은 여기까지!

 

지금 어느정도 코드 구조를 알고 보니까 이해도 잘 되고 쉬운거였구나 하는데

처음 이거 따라했을 땐 내가 뭘 적고 있는지도 몰랐고, 그래서 오타도 엄청 났다

그저 화면에 나온 그대로 베낄 뿐...

 

근데 자료 찾으면서 여러 사람들이 쓴 코드를 비교해보고 반복되는 코드들을 보면서 왜 여기서 이 코드를 썼는지 눈치껏 알게 되고, 대충 감이 오는 것들 하나 둘씩 검색해서 찾다보니 구조가 어느정도 읽히기 시작했다

 

 

 

 

<유니티 비쥬얼스튜디오 연동>

//스크립트 자동완성하는 법

 

난 아직 코드 아는 게 별로 없어서 유튜브에서 강좌를 보고 따라하는 경우가 많다

그런데 영상에서 쌤들은 스크립트 작성할 때 코드가 자동으로 딱 완성되던데 나는 일일히 쓰다보니 오타가 날 때도 있고, 쓰고, 확인하고, 쓰고, 확인하고... 정신이 없었다

그래서 나도 자동완성 하고 싶다~ 해서 찾아보다가 발견한 글

 

[UNITY TIP] 유니티(Unity)에서 비쥬얼 스튜디오(Visual Studio) C# 서식 및 인텔리센스(IntelliSense) 자동완성 안될 때 방법

안녕하세요 철사마입니다. 오늘은 PC를 새로 세팅하고 유니티를 설치한 후에 전에 생기지 않았던 문제가 생겨 해결 방법 정리해 보았습니다. 윈도우로 유니티에서 스크립트를 편집하면 보통 Visual Studio + C#..

samablog.tistory.com

이렇게 자동완성되는 기능을 인텔리센스(IntelliSense)라고 하나보다. 새로 알았다

 

그리고 블로그 글을 보니 내가 비쥬얼스튜디오 깔 때 잘못 깔았나부다

블로그에서 말한 대로 하니까 깔린 거 삭제하고 다시 재설치한다 헛헛... 넘 오래 걸려...

깔고 나서 유니티랑 스크립트 열어보니 자동완성된다!! 

 

 

비쥬얼 스튜디오 깔 때, 유니티랑 연동해서 스크립트 자동 완성하게 하려면 꼭 Unity를 사용한 게임 개발 항목을 선택해야한다!

 

거진 두 달 동안 일일히 타이핑했던 컴알못의 깊은 깨달음...

혼자 하다보니 이런 깨알팁이 너무 반갑다