Unity | 클론코딩 중 알게 된 키워드, 함수

Clean·2025년 4월 13일

Unity

목록 보기
2/24

유니티 수동설치도 확인할겸 에디터에 익숙해지기 위해

골드메탈님의 2D 종스크롤 슈팅게임을 만들어봤다.

게임을 만드는 과정이야 유튜브에 있고 따라하는 것 뿐이니

과정보다는 알게된 키워드함수들을 간단하게 작성할 예정이다.


Input

Input.GetAxisRaw("Horizontal")

좌우 방향키 또는 'A' / 'D' 키 입력 시
오른쪽(D, →)은 1, 왼쪽(A, ←)은 -1,
아무 키도 안 누르면 0 반환


Input.GetAxisRaw("Vertical")

위아래 방향키 또는 'W' / 'S' 키 입력 시
위쪽(W, ↑)은 1, 아래쪽(S, ↓)은 -1,
아무 키도 안 누르면 0 반환

  • 콘솔은 위로 이동시 Y가 -가 됐지만 유니티는 +가 되어야 한다.

GetAxis(string)

즉시 1, 0, -1을 반환하는 GetAxisRaw와 달리 GetAxis는 1 ~ -1 의 사이의 값을 반환한다.

  • ex) D키 누르면 0 > 0.1 > 0.3 > 0.5 > 0.7 > 1 순으로 변한다.

GetButtonDown(string), GetButton(string), GetButtonUp(string)

GetButtonDown은 키를 눌렀을 때 1번
GetButton은 키를 누르는 중일 때 계속
GetButtonUp은 키를 뗐을 때 1번

GetButtonInputManager에 등록되어있는 키입력을 받는다.
string을 받다보니 사용하기에 오타가 난다거나 InputManager에 등록해야하는 불편함이 있을 것 같다.

  • ex) Input.GetButtonDown("Jump")

GetKeyDown(KeyCode), GetKey(KeyCode), GetKeyUp(KeyCode)

GetKeyDown은 키를 눌렀을 때 1번
GetKey은 키를 누르는 중일 때 계속
GetKeyUp은 키를 뗐을 때 1번

GetKeyKeyCode.Space 같이 KeyCode의 키입력을 받는다.
KeyCode.로 자동완성이 되다보니 사용하기엔 편해보인다.

  • ex) Input.GetKeyDown(KeyCode.Space)

Time

Time.deltaTime

이전 프레임을 완료하는 데 걸린 시간
프레임 수가 낮을수록 값은 커지고, 프레임 수가 높을수록 작아진다.

즉, deltaTime은 프레임이 다르더라도 결과를 동일하게 만들기 위해 사용한다.

  • ex) 10프레임이면 Update() 가 10번 실행된다는 뜻이다.

Rigidbody

BodyType을 보면 3종류가 있다.

Dynamic (동적)

질량(Mass)나 중력(Gravity), 힘(AddForce, velocity) 등 모든 물리 영향을 받는다.

RigidBody를 Dynamic으로 해두면 다른 물체와 부딪쳤을 때 밀려나거나 하는 물리운동을 한다.
즉, 물리엔진의 영향이 제일 크다.


Kinematic (운동학적)

물리운동을 스크립트에 의해 하지만, 충돌은 감지한다.

즉, Dynamic과 달리 부딪쳤을 때 충돌은 감지하지만 밀려나지 않는다.


Static (정적)

이동도 회전도 없고 충돌 감지만 할 수 있다.


AddForce()

Rigidbody를 가지고 있는 게임 오브젝트에 (방향과 힘, 힘의 특징) 으로 이해했다.

위의 AddForce(Vector2.up * 10, ForceMode2D.Impulse)

Vector2.up = (0, 1) 니까 10을 곱하면 (0, 10)고, 그 힘과 방향을 ForceMode2D로 힘을 가하는?

즉, 위쪽 방향으로 10의 힘을 가한다는 의미다.

ForceMode2D는 좀 알아볼 필요가 있을 것 같다.


velocity

velocity는 간단히 말하자면 그 방향으로 일정한 속도로 이동한다.

velocity = Vector3.down * 1.5f 는 아래방향으로 1.5의 속도로 일정하게 이동한다는 뜻이다.

AddForce가 힘을 가하는 거라면, velocity는 속도를 지정해주는 방식으로 이해했다.


Instantiate()

Instantiate(Prefab);
Instantiate(Prefab, Position, Rotaion);
Instantiate(Prefab, Parent);

Instantiate는 기본적으로 많이 오버로딩되어 있지만

기본적으로는 프리팹을 인수로 게임오브젝트를 생성하는 함수다.


Invoke()

Invoke(string 함수명, float 시간) 는 string으로 된 함수를 float 시간 후에 실행하는 함수다.

Thread.Sleep 가 동기적인 딜레이면 Invoke는 비동기적인 딜레이라고 이해했다.


Transform

자주 사용하는 SpriteRendererRigidbody는 필드에 선언하고 Awake()에서 초기화하지만,

유니티 게임오브젝트는 기본적으로 Transform이 있다보니 초기화하지 않고 사용할 수 있다.


오랜만에 사용해보니 편하다고 해야 할지, 어렵다고 해야 할지 애매한 느낌이다.

다만, 콘솔 때에 비해 구현할 수 있는 방법이나 사용할 수 있는 기능의 폭이 훨씬 넓어진 건 확실하다.

무엇보다 시각적으로 확인이 가능하다 보니, 콘솔 때 느꼈던 답답함이나 아쉬움은 거의 없었다.

오히려 직관적?이라 더 편하게 느껴지기도 했다.

0개의 댓글