하..

파일이 싹 다 날라갔습니다..^^

다 만들어서 이렇게 게임 실행 파일로까지 만들고

마지막으로 작성했던 모든 코드를 GitHub에 게시하려다가

실수로 변경사항 전부 삭제를 눌러버려서..

작성했던 코드와 만들어 두었던 에셋들 전부 삭제됐어요..^^

 

GitHub 올리는 방법을 검색하면서 따라하던 도중에

너무 파일이 많다 싶어서 그냥 취소한다는 것이 이렇게 되어버렸네요 하하

VsCode에서 삭제되고 나서 유니티를 열어보니까 첫 메인 카메라만 뜨고 전부 사라져있더군요

눈물을 흘리면서 개발 파일 자체를 삭제했습니다..ㅎㅎ

 

전에 웹 개발 프로젝트 할때도 이클립스랑 GitHub 연동이 제일 어려웠는데

이번에도 GitHub를 제대로 다루지 못해서 문제네요 허허

새로운 에디터를 다룰 때마다 이러니 스트레스 받기는 하지만 

이것도 다 경험이려니 하고 수긍하려고요

 

차라리 잘됐다 싶은 게 처음부터 다시 만들면서 정리도 하고

조금씩 커밋하면 시간도 절약되고

그러면서 게임도 제 방식으로 조금 더 조정해보려 합니다

스크립트에서 키보드 조작키 접근하는 방법

목차


 

GetAxis(), GetButton(), GetKey()

 

키보드 조작키 접근 방법으로는 크게

Input 클래스의 GetAxis(), GetButton(), GetKey()로 3가지가 있습니다.

(Input 클래스 : 사용자 입력 메서드를 모아둔 클래스)

        // 방향키 위쪽을 누르면
        if (Input.GetKey(KeyCode.UpArrow)) {
 
            float verticalAxis = Input.GetAxis("Vertical");
            float verticalAxisRaw = Input.GetAxisRaw("Vertical");
            bool verticalButton = Input.GetButton("Vertical");
            bool verticalButtonDown = Input.GetButtonDown("Vertical");
            bool verticalButtonUp = Input.GetButtonUp("Vertical");
            bool verticalKey = Input.GetKey("up");
            bool verticalKeyDown = Input.GetKeyDown(KeyCode.UpArrow);
            bool verticalKeyUp = Input.GetKeyUp(KeyCode.UpArrow);

            Debug.Log("GetAxis : " + verticalAxis); // -1 ~ 1 사이 실수
            Debug.Log("GetAxisRaw : " + verticalAxisRaw); // 1
            Debug.Log("GetButton : " + verticalButton); // True
            Debug.Log("GetButtonDown : " + verticalButtonDown); // True
            Debug.Log("GetButtonUp : " + verticalButtonUp); // False
            Debug.Log("GetKey : " + verticalKey); // True
            Debug.Log("GetKeyDown : " + verticalKeyDown); // True
            Debug.Log("GetKeyUp : " + verticalKeyUp); // False
 
        } else {
 
            float verticalAxis = Input.GetAxis("Vertical");
            float verticalAxisRaw = Input.GetAxisRaw("Vertical");
            bool verticalButton = Input.GetButton("Vertical");
            bool verticalButtonDown = Input.GetButtonDown("Vertical");
            bool verticalButtonUp = Input.GetButtonUp("Vertical");
            bool verticalKey = Input.GetKey(KeyCode.UpArrow);
            bool verticalKeyDown = Input.GetKeyDown(KeyCode.UpArrow);
            bool verticalKeyUp = Input.GetKeyUp(KeyCode.UpArrow);

            Debug.Log("GetAxis : " + verticalAxis); // 0
            Debug.Log("GetAxisRaw : " + verticalAxisRaw); // 0
            Debug.Log("GetButton : " + verticalButton); // False
            Debug.Log("GetButtonDown : " + verticalButtonDown); // False
            Debug.Log("GetButtonUp : " + verticalButtonUp); // False
            Debug.Log("GetKey : " + verticalKey); // False
            Debug.Log("GetKeyDown : " + verticalKeyDown); // False
            Debug.Log("GetKeyUp : " + verticalKeyUp); // False
 
        }

GetAxis()는 결과값을 실수 타입(float)으로 반환하고

나머지 GetButton()과 GetKey()는 논리 타입(bool)으로 반환합니다.

 

GetAxis()의 매개변수에는 속성 이름으로 적고,

GetButton()과 GetKey()의 매개변수에는 KeyCode로 접근하거나 키 이름으로 적습니다.

 


 

GetAxis() 값 확인

GetAxis() 값 확인

GetAxis()는 -1~1 사이의 실수를 반환합니다.

오른쪽 로그 사진은 방향키 위 버튼, 아래 버튼을 차례로 누른 결과입니다.

 

위 버튼(양의 방향 버튼)을 누르면 0보다 크고 1보다 작은 값을 반환합니다.

아래 버튼(음의 방향 버튼)을 누르면 -1보다 크고 0보다 작은 값을 반환합니다.

버튼을 누르지 않으면 0을 반환합니다.

 

GetAxisAraw()는 GetAxis()와 같은 기능이지만 반환값이 -1, 0, 1로 고정되어 있습니다.

 


 

GetButton(), GetButtonDown(), GetButtonUp() 차이

GetButton(), GetButtonDown(), GetButtonUp() 차이

GetButton()은 해당 버튼을 누르고 있는 동안 true를 반환합니다.

GetButtonDown()은 해당 버튼을 눌렀을 때 true를 반환합니다.

GetButtonUp()은 해당 버튼을 떼었을 때 true를 반환합니다.

 

이는 GetKey(), GetKeyDown(), GetKeyUp()에도 동일하게 적용됩니다.


그러면 아래에서는 왜 GetButtonUP()과 GetKeyUp()이 False일까요.

그 이유는 위의 조건문 때문입니다.

해당 조건문은 버튼을 누른 상태가 전제가 되어야 로그값이 나오는데

-Up() 메서드 같은 경우에는 떼어야 true가 반환됩니다.

 

따라서 버튼은 뗀 순간 조건문이 적용이 되지 않기 때문에

true인 -Up() 메서드는 로그에 출력되지 않습니다.

 


 

KeyCode

KeyCode 자동완성 및 값

KeyCode는 GetKey()의 매개변수로 사용할 수 있는 실제 키 메서드입니다.

 

오른쪽 사진처럼 실제 KeyCode 메서드를 보면 각 변수가 정수로 초기화되어 있습니다.

따라서 KeyCode 변수는 int 타입으로

GetAxis()나 GetButton()의 매개변수로는 사용할 수 없습니다.

 

많이 사용하는 방향키는 UpArrow, DownArrow, RightArrow, LeftArrow이며

일반 w, a, s, d 키는 그대로 W, A, S, D 입니다.

 

더 많은 KeyCode 종류는 아래 링크를 확인해주세요.

https://docs.unity3d.com/kr/2022.3/ScriptReference/KeyCode.html

 

KeyCode - Unity 스크립팅 API

Key codes returned by Event.keyCode. These map directly to a physical key on the keyboard. If "Use Physical Keys" is enabled in Input Manager settings, these map directly to a physical key on the keyboard. If "Use Physical Keys" is disabled these map to la

docs.unity3d.com

 


 

근데 실제로 개발을 하다 보면

키보드를 한 번 눌렀는데 콘솔창에 나타나는

GetAxis(), GetButton(), GetKey()  로그는 여러 개가 나옵니다.

 

그 이유는 컴퓨터의 작업 처리는 사람의 속도보다 훨씬 빠르기 때문입니다.

우리는 한 번 누른 것 같지만 컴퓨터는 그 잠깐 눌렀다 뗀 시간 동안에도

버튼을 누른 상태로 인식하여 처리하기 때문에

누르고 있는 동안 출력되는 로그는 생각하는 것보다 여러 번 나오게 됩니다.

 


총정리

아래는 위의 내용들을 정리한 표입니다.

메서드 매개변수
(매개변수타입)
반환타입 반환값
GetAxis()  축 이름
(string)
float -1 < 실수 < 0 : 속성의 음의 방향 버튼
0 : 아무것도 누르지 않음
0 < 실수 < 1 : 속성의 양의 방향 버튼
GetAxisRaw() -1 : 속성의 음의 방향 버튼
0 : 아무것도 누르지 않음
1 : 속성의 양의 방향 버튼
GetButton() bool True : 해당 버튼을 누르고 있음
False : 해당 버튼을 누르고 있지 않음
GetButtonDown() True : 해당 버튼을 눌렀음
False : 해당 버튼을 누르지 않았음
GetButtonUp() True : 해당 버튼을 떼었음
False : 해당 버튼을 떼지 않았음 
GetKey() 실제 키 이름 /
KeyCode 변수
(string / int)
bool True : 해당 버튼을 누르고 있음
False : 해당 버튼을 누르고 있지 않음
GetKeyDown() True : 해당 버튼을 눌렀음
False : 해당 버튼을 누르지 않았음
GetKeyUp() True : 해당 버튼을 떼었음
False : 해당 버튼을 떼지 않았음 

 

 

이외의 조이스틱, 마우스 등을 다루는 함수는 아래 공식 링크를 확인해주세요.

 

UnityEngine.Input - Unity 스크립팅 API

Interface into the Input system.

docs.unity3d.com

 

 

잘못된 정보가 있으면 댓글로 피드백 부탁드립니다.

 감사합니다:)

PC 키보드 조작 설정

보통 PC 게임은 wasd키나 방향키, 스페이스 바, 마우스를 이용하여 조작을 하게 됩니다.

 

유니티에서는 이런 키들을 이용하여 캐릭터를 움직일 수 있게 하는

'입력 관리자(Input Manager)'라는 설정을 제공합니다.

여기서 가로 이동, 세로 이동, 점프, 제출, 취소 등의 작업을 원하는 키로 설정할 수 있습니다.

 

'입력 관리자 (Input Manager)' 경로
편집(Edit)  >  프로젝트 설정(Project Setting)  >  입력 관리자(Input Manager)

편집 > 프로젝트 설정 > 입력 관리자

 

각각의 축(이하 속성)을 열어보면 이름, 양의 방향버튼, 음의 방향 버튼, 출력, 민감도 등이 보입니다.

가로, 세로, 점프 설정 화면

 

각각의 속성에 대한 기능은 아래와 같습니다.

속성의 기능

대부분의 속성들은 Positive Button(양의 방향 버튼)을 기준으로 작동입니다.

예를 들어 오른쪽으로 움직이는 것을 d키로 지정하고 싶으면

Positive Button(양의 방향 버튼)에 'd'라고 적어주시면 됩니다.

 

또한 스크립트에서 속성에 접근(액세스)하기 위해서는 속성의 이름 및 키 이름을 사용합니다.

예시)

Input.GetButton("Jump")

Input.GetKey("up") / Input.GetKey(KeyCode.UpArrow)


참고자료

 

입력 관리자 - Unity 매뉴얼

Input Manager 창에서 프로젝트에 대한 입력 축 및 축과 관련된 행동을 정의할 수 있습니다. 액세스하려면 Unity의 메인 메뉴에서 Edit > Project Settings로 이동한 후 오른쪽 내비게이션에서 Input Manager를

docs.unity3d.com

 

잘못된 정보가 있으면 댓글로 피드백 부탁드립니다.

감사합니다:)

1년정도 여러 개발 공부를 하고 나니 내가 좋아하는 게임 개발에 흥미를 갖기 시작했다.

일단 나는 주로 MMORPG 장르의 온라인 게임을 하고 있고,

그 외에도 어드벤쳐, 시뮬레이션, 슈팅, 액션, 대전 등 장르를 가리지 않고 하는 편이다.

 

오래 알고 지낸 친구랑 뜻이 맞아 같이 게임을 개발하기로 하고

올해 하반기에 게임 출시를 목표로 6월 초부터 공부하기 시작했다.

 

사실 친구랑 나는 둘 다 게임 개발은 처음이라 막상 뭐부터 시작할 지 막막했다.

그래서 전체적인 컨셉과 스토리를 정한 후 각자 기초 강의를 보고(친구는 아트 담당, 나는 프로그래밍 담당) 공부한 다음 구체적인 계획을 세우기로 했다.

 

처음에는 유료 인터넷 강의를 들어볼까 했지만

맛보기용으로 무료 강의를 찾아서 들어본 후 결정하기로 했다.

 

그렇게 찾은 강의가 유튜브의 나도코딩님의 유니티 게임 개발 강의였다.

유니티로 5시간만에 간단한 2D 슈팅 게임을 구현하는 내용이다.

아래 링크를 통해 들을 수 있다.

[나도코딩] 유니티 무료 강의 (Crash Course) - 5시간 만에 게임 만드는 법 배우기: https://youtu.be/rJE6bhVUNhk?si=MrSWBzHigJoOO0l4

 

현재 나는 2/3정도 들은 상태이고, 

설명도 깔끔하고 강의를 이해하기 쉽게 진행하고 있어 어렵지 않게 따라갈 수 있었다.

 

유니티 입문은 이 강의를 통해 진행하고 있으며,

완강하면 다시 혼자 같은 내용을 개발하면서 이 블로그에 기술적 내용들을 정리할 예정이다.

+ Recent posts