기록 보관소

[Unity/유니티] 입문: 델타 타임[B8]~물체 움직여보기[B10] 본문

유니티 프로젝트/유니티 3D 입문 : 공 굴리기

[Unity/유니티] 입문: 델타 타임[B8]~물체 움직여보기[B10]

JongHoon 2022. 1. 6. 23:14

개요

유니티 입문/독학을 위해서 아래 링크의 골드메탈님의 영상들을 하루에 2~3개정도 보고, 각 영상별로 진행 상황 사진 또는 캡처를 올리고 배웠던 점을 요약해서 적는다.

https://youtube.com/playlist?list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2 

 

유니티 강좌 기초 채널 Basic

유니티 개발을 처음 시작하시는 입문자 분들을 위한 기초 채널. [ 프로젝트 ] B00 ~ B12 (BE1) : 유니티 필수 기초 B13 ~ B19 (BE2) : 2D 플랫포머 B20 ~ B26 (BE3) : 2D 탑다운 대화형 RPG B27 ~ B37 (BE4) : 2D 종스크롤

www.youtube.com


이동 거리를 공평하게, 델타 타임[B8]

01.델타 타임이란?

  • Time.deltaTime : 이전 프레임의 완료까지 걸린 시간(1프레임에 사용된 시간). 게임 진행을 주변 환경(컴퓨터 성능)에 영향을 받지 않게 하기 위해서 있다. 따라서 deltaTime 값은 프레임이 적으면 커지고, 프레임이 많으면 작아져서 같은 값을 출력한다.

02.Time.deltaTime 사용하는 방법

  • Translate : 벡터에 곱하기. ex) transform.Translate(Vec * Time.deltaTime);
  • Vector 함수 : 시간 매개변수에 곱하기. ex) Vector3.Lerp(Vec1, Vec2, T * Time.deltaTime);

 


실제와 같은 물체를 만들기[B9]

  • 진행하기 전 세팅하기

이번 강의를 진행하기 위해 오브젝트 Sphere(구)를 만들었다.

참고로 이번 강의는 프로그래밍 없이 오브젝트의 Inspector 창의 컴포넌트들을 활용해서 진행되었다.

01.중력 적용하기

  • RigidBody : 물리효과를 받기 위한 컴포넌트. 오브젝트에 추가하게되면 중력의 영향을 받는다.

Rigidbody 컴포넌트 추가
Rigidbody를 추가하고 실행하니 오브젝트가 아래로 떨어졌다.

02.충돌 영역 정하기

  • Collider : 물리효과를 받기 위한 컴포넌트. 오브젝트의 충돌 범위를 설정한다. 즉, 충돌 기준은 보이는 오브젝트의 크기에 따르는것이 아니라, Collider에 따른다.

Sphere 오브젝트 Inspector 창에 있는 Collider
구를 둘러싼 연두색 선이 Collider.
Collider를 비활성화하고 실행하니 바닥을 뚫고 계속해서 내려간다.
Collider의 radius를 1로 늘리고 활성화해서 실행하니 공중에 떠있다.

03.RigidBody 설정

  • RigidBody의 구성

예시용 캡처
Inspector 창의 Rigidbody

  • Mass : 수치가 높을수록 충돌이 무거워진다. 오브젝트의 무게라고 보면 된다. 만약 위 예시 캡처에서 위의 오브젝트의 Mass 값을 1에서 1000으로 늘리면, 아래 오브젝트는 튕겨져 나가고 위 오브젝트는 바닥 가운데에 가만히 있게된다. 참고로 떨어지는 속도에는 영향을 주지 않는다.
  • Use Gravity : 중력 사용 여부. 기본적으로 컴포넌트 추가시 체크되어 있다.
  • Is Kinematic : 외부 물리 효과 무시 여부. 만약 위의 예시 캡처에서, 아래 오브젝트가 Is Kinematic이 켜져있다면, 아래 오브젝트는 움직이지 않고 위에서 떨어진 오브젝트만 튕겨져 나가게된다. Mass 값과는 상관없이 작용한다.

04.재질 만들기

  • Material : 오브젝트의 표면 재질을 결정하는 컴포넌트

오브젝트 생성시 Default-Material로 설정되어 있다.
Default-Material은 따로 편집이 불가능하다.

  • 새로운 Material 만들기

Project 창에서 우클릭 - Create - Material로 만들 수 있다.
새로운 Material 생성. 이름은 영상처럼 MyBall로 바꾸었다.
MyBall의 Inspector창. 오른쪽 컬러 편집은 Albedo를 클릭하면 띄워지며, 색상을 변경할 수 있다.
Material MyBall을 위쪽 공에 넣어 적용시켰다.

   -재질 편집은 새로 생성하고, 적용해야 가능하다. 적용하려면 Inspector창 아래쪽 'Add Component' 버튼 아래에 드래그&드랍하면 적용할 수 있다.

  • Material의 Inspector창

Metalic 1

   -Metalic : 금속 재질 수치

Smoothness 0의 모습

   -Smoothness : 빛 반사 수치

바닥 오브젝트에 Texture 넣기

   -이미지를 오브젝트에 씌우고 싶다면, Project에 해당 이미지를 넣고 재질의 Albedo 항목쪽 체크박스에 끌어 넣으면 된다.

Tiling을 2x2로 늘렸을때의 모습

   -Tiling : 텍스쳐 반복 타일 개수. 참고로 소수도 입력가능하나 텍스쳐가 그만큼 잘려서 보인다.

Emission을 체크하고, HDR 박스를 클릭하면 오른쪽의 창을 이용해서 밝기를 조정할 수 있다. 밝기를 올리니 텍스쳐가 보이지 않는다.

   -Emission : 텍스쳐 발광(밝기) 조절. 재질의 밝기가 밝아질뿐, 물리적으로 밝아지는 것은 아니다.

05.물리 재질 만들기

  • Physic Material 만들기

Project 창에서 우클릭 - Create - Physic Material로 만들 수 있다.
Physic Material 생성 직후의 모습. 이름은 영상처럼 MyBall로 변경하였다.

  • Physic Material : 탄성과 마찰을 다루는 물리적인 재질.

적용하면 Collider의 Material에 들어있다.
Physic Material의 Inspector창

   -Bounciness : 탄성력. 높을수록 많이 튀어오른다. 0~1까지 설정할 수 있다.

   -Bounce Combine : 다음 탄성을 계산하는 방식. 처음 튀어오른 다음, 이후 튀어오르기를 어떻게할 것인지 정한다.

   -Friction : 마찰력. 낮을수록 많이 미끄러진다. Static은 정지했을 때, Dynamic은 움직일 때의 마찰력이다.

   -Friction Combine : 다음 마찰력을 계산하는 방식.


힘을 이용하여 물체 움직여보기[B10]

01.컴포넌트 가져오기

  • 스크립트 만들기

스크립트 파일

   -GetComponent<T>() : 자신의 T타입 컴포넌트를 가져온다. 참고로 2D에 3D 컴포넌트를 넣거나, 그 반대로 해도 작동 되지 않는다.

02.물체 속도 설정해서 움직이기

  • 속력 바꾸기

스크립트 파일
실행 전 모습
실행 후 주어진 벡터 값으로 튀어올랐다.
이후 굴러가다가 떨어지는 모습.

   -.velocity : 현재 이동속도. 위의 스크립트처럼 좌표 외에도 rigid.velocity = Vector3.right; 나 Vector3.left;로 사용하면 오른쪽이나 왼쪽으로 속도를 받고 움직일 수 있다. 참고로, 만약 RigidBody 관련 코드를 Update에 넣고싶다면, Update말고 FixedUpdate에 작성하는 것이 좋다고 한다.

03.물체에 힘을 가해서 움직이기

  • 힘으로 밀기

스크립트 파일
실행 후 스페이스 바를 누르자 위쪽으로 튀어오른다.

   -.AddForce(Vec) : Vec의 방향과 크기로 힘을 준다. Mass(무게)값이 클수록 움직이는데 더 많은 힘이 필요하다. ForceMode를 매개변수로 쓸 수 있다. 위 스크립트 파일에서 계속 스페이스바를 누르면, AddForce의 힘 방향으로 계속 속도 velocity가 증가하게 된다. (실행 캡처 콘솔 창 참고)

   -ForceMode : 힘을 주는 방식. 가속과 무게를 반영한다. Acceleration, Force, Impurse, VelocityChange가 존재한다. 주로 Impurse를 많이 사용한다고 한다.

04.버튼 입력으로 움직이기

  • 버튼 입력으로 공굴리기

스크립트 파일
실행 후 W, A, S, D키를 활용해서 빨간색 공을 떨어뜨리는 모습.

05.회전력을 주어 움직이기

  • 회전력

스크립트 파일
실행 후 위쪽을 축으로 삼아 계속 시계방향으로 돌고 있다.

   -.AddTorque(Vec) : Vec 방향을 축으로 회전력이 생긴다. Vec를 축으로 삼기때문에, 이동 방향에 주의해야한다.