상세 컨텐츠

본문 제목

[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor: Borybop)

24-25/Untiy

by 롱롱😋 2024. 10. 11. 12:33

본문

728x90

 Unity 2D 기초 

1. 게임오브젝트 이동 함수

transform.position

 이 함수를 이용해서 오브젝트를 이동시킬 수 있다.

 

 transform.position = transform.position + new Vector3(1, 0, 0) * 1;

위의 코드는 새로운 위치 = 현재 위치 + (방향 * 속도)라는 것을 의미한다. 그러면 이 오브젝트는 1만큼의 속도로 x축에 이동하게 된다.

기존의 오브젝트
코드가 실행된 뒤의 오브젝트

 코드에 작성한 것과 같이 1의 속도를 가지고 x축 방향으로 1만큼만 움직인 뒤 더는 움직이지 않는다.

 

 

Time.deltaTime

 이전 Update() 종료부터 다음 Update() 시작까지의 시간으로, 즉 업데이트 사이의 시간을 말한다. 사양이 좋을수록 Update()의 호출 횟수가 많아진다. 1분(60초)를 기준으로 계산하기 때문에 1분에 Update()가 60번 호출된다면 Time.deltaTime은 1이고 컴퓨터의 사양이 좋을수록 이 값이 낮아진다. 그러면 캐릭터의 움직임이 끊김없이 부드럽게 연결된다.

프레임 수에 따른 움직임의 차이

  • 캐릭터의 이동거리 = 방향 * 속도 * Time.deltaTime

 

Input.GetAxisRaw

 유니티에 미리 설정된 단축키를 이용하는 함수

edit - project settings - input manager에서 위아래양옆 총 4가지의 단축키를 설정할 수 있음.

  • Input.GetAxisRaw("Horizontal"); : 좌우로 이동
  • Input.GetAxisRaw("Vertical"); : 위아래로 이동

 

2. 게임오브젝트 물리와 충돌

Rigidbody2D 컴포넌트

 2차원 공간에서 오브젝트의 물리와 중력을 담당하는 컴포넌트이다.

  • Mass: 오브젝트의 질량
  • Linear Drag: 위치 움직임에 대한 마찰력
  • Angular Drag: 회전 움직임에 대한 마찰력
  • Gravity Scale: 오브젝트 중력 계수 (-9.81 * Gravity Scale)
  • Constraints: Freeze Position으로는 X, Y, Freeze Rotation으로는 Z를 선택할 수 있고, 선택된 축은 외부로부터 받은 물리력에 의해 이동 및 회전하지 않는다.

 

Collider2D 컴포넌트

 2차원 공간에서 오브젝트의 충돌 범위를 나타내는 컴포넌트로, 충돌 범위의 생김새나 특징에 따라 이름을 명명한다.

  • Box Collider 2D: 사각형 모양의 충돌 범위를 처리한다.
  • Circle Collider 2D: 원 모양의 충돌 범위로, 연산 속도가 가장 빠르다.
  • Edge Collider 2D: 점의 개수, 각 점의 위치를 설정할 수 있어 다양한 곡선 형태로 충돌 범위 표현 가능.
  • Polygon Collider 2D: 텍스쳐의 모양과 비슷한 형태로 충돌 범위를 생성. 
  • Capsule Collider 2D: 캡슐 모양의 충돌 범위 생성. 주로 사람 캐릭터에 주로 사용한다.
  • Composite Collider 2D: 다른 게임 오브젝트들의 Collider 2D들을 하나로 묶어주는 역할이다.

 서로 다른 두 오브젝트가 충돌하기 위해서는 두 오브젝트 모두 충돌 범위를 처리하는 Collider2D 컴포넌트를 가지고 있어야 하고, 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody2D 컴포넌트를 가지고 있어야 한다.

 

 

OnCollision2D 충돌 이벤트 함수

 물리적인 충돌과 충돌 이벤트 함수가 둘 다 호출되는 이벤트 함수

  • OnCollisionEnter2D(): 두 오브젝트가 충돌하는 순간에 한 번 호출된다.
  • OnCollisionStay2D(): 충돌 직후에 두 오브젝트가 맞닿아있는 동안 매 프레임마다 호출된다.
  • OnCollisionExit2D(): 두 오브젝트가 떨어져서 충돌이 종료되는 순간에 한 번 호출된다.

 

3. 오일러와 쿼터니온

 게임 오브젝트의 회전 정도를 나타내고 연산하는 방식에는 오일러와 쿼터니온이 있다.

 

Euler 오일러

 3차원의 3개 각도를 표현하기 위해 사용하는 3x3 크기의 행렬

회전 순서에 따라 결과가 달라진다! 그러므로 회전 순서에 주의해야 한다.

 

Quaternion 쿼터니온

 4개의 -1~1값을 가지는데, 이는 3개의 벡터 요소와 하나의 스칼라 요소로 구성된다.

  오일러 방식 쿼터니온 방식
장점 0~360도의 일반적인 각도를 표현할 수 있음 연산속도가 빠르고, 짐벌락 현상이 발생하지 않음
단점 지속적으로 회전하는 연산을 할 때 연산속도가 느리고, 짐벌락 현상*이 발생할 수 있음 일반적인 각도 방식을 사용하지 않아 특정 각도를 표현하기 어려움

 

 *짐벌락 현상: 세 개의 축이 독립적이지 않고 서로 종속되는 관계를 가지고 있기 때문에 발생하는 문제인데, 회전 연산 도중 축이 하나 사라져 3차원의 오브젝트가 일그러지는 현상을 말한다.

오일러 각과 오일러 각을 기반으로 만든 짐벌

 

 짐벌이란 단일 축을 중심으로 물체가 회전할 수 있도록 만들어진 구조물이다.

안쪽 고리가 여러 방향으로 회전하는 이유는 고리가 종속 관계를 형성하기 때문이다. 즉 한 고리의 회전이 안쪽 고리의 회전에 영향을 주며 고리의 회전으로 인해 의도치 않게 두 개 이상의 고리가 겹치게 되면 한 축의 회전각이 소실되는데 우리는 이것을 짐벌락이라 한다. 따라서 x축을 회전하면 y축과 z축이 회전하고 y축을 회전하면 x축 z축이 회전하게 된다!


해당 포스트는 고박사, [ 따라하면서 배우는 고박사의 유니티 기초[유니티 2D 기초 (Unity 2D Basic)] ], (2020, 07월 06일), 인프런 강의, '좋아하는 일, 잘하는 일, 그 사이 어딘가', [[Unity] 짐벌락과 오일러 각 그리고 쿼터니언 ], (2021, 12월 4일)을 참고하여 작성하였습니다.

 

 

Corner Unity

Editor : 보리밥

728x90

관련글 더보기