지금까지는 유니티에서 제공되는 컴포넌트만 사용해봤었는데요.

게임오브젝트에 어떤 컴포넌트가 추가되는지에 따라서 그 게임오브젝트의 역할이 달라졌습니다.

유니티에서 컴포넌트를 직접 구현하고 싶을때에는 스크립트라는 것을 이용하는데요.

스크립트는 C#, ,javascript 등의 프로그램언어로 원하는 기능을 구현하게 됩니다. 혹시나 프로그래밍을 모르시더라도 걱정하지 마세요.

C#은 따로 강의가 제공되니 C#강의와 왔다갔다 하시면 됩니다.

 

그럼 본격적으로 스크립트를 만드는 방법에 대해서 알아보겠습니다.

우선 프로젝트 뷰에서 우클릭을 누르고 Create -> C# Script를 눌러줍니다.

그리고 스크립트 파일의 이름은 Ball 이라고 정해주겠습니다.

 

 

C# Script 파일을 더블클릭하면 Visual Studio 가 실행되는데요. Visual Studio는 프로그램을 작성하기위한 외부 프로그램입니다.

이제 스크립트를 확인해 보겠습니다.

 

 

우선 Ball 이라는 클래스가 보입니다. 클래스는 코드를 모아놓는 기본단위라고 기억하면 됩니다.

옆의 MonoBehaviour 는 유니티에서 클래스를 만들면 기본적으로 적어주어야 하는 코드라고 알고 있으면 됩니다.

그리고 void Start() 안에 코드를 작성하면 게임이 시작될 때 한번 실행되고

    void Update() 안에 코드를 작성하면 매 프레임마다 실행됩니다.

프레임은 영화에서 사용하던 용어인데요. 여러장의 사진을 빨리 넘겨서 보여주면 영화나 만화가 되죠? 그 여러장의 사진 한장한장을 프레임이라고 하는데요 유니티에서 공이 굴러가는것도 사실 매 프레임마다 공의 위치를 옮겨서 화면에 그려줘서 구현이 되는겁니다.

void Update() 에 코드를 넣으면 그 코드가 매 프레임마다 실행되면서 다양한 게임의 로직을 구현할 수 있습니다.

 

우선은 Start() 와 Update() 가 어떻게 동작하는지 알아보기 위해서 로그를 한번 찍어보겠습니다.

먼저 Start() 안에 Debug.Log("Start"); 를 입력해줍니다.

 

이렇게 입력을 해주고 저장을 해줍니다. 저장은 컨트롤S를 누르시거나 저장아이콘을 누르시면 됩니다.

위 코드는 Start라는 문자열을 콘솔에 찍어라 라고 하는겁니다.

 

 <<<< 저장하기

 

그리고 유니티로 돌아와서 게임을 실행해서 확인해 보겠습니다.

로그를 보기위해서 콘솔창을 열어줘야하는데요 콘솔창은 유니티의 메뉴에 window를 누르면 맨 아래에 console이 있습니다.

혹시나 못찾으시는 분들은 컨트롤+쉬프트+c 를 눌러주면 콘솔창을 볼 수 있습니다.

콘솔창이 나타났다면 게임을 실행해볼까요?

 

<5.콘솔창>

 

실행했더니 아무것도 나오지 않았네요. 사실 스크립트를 게임 오브젝트에 적용을 해줘야 스크립트가 실행이 됩니다.

그래서 Ball 스크립트를 눌러 끌고가서 게임오브젝트 Ball에 놓아줍니다. 그럼 Ball에 스크립트가 적용된게 보입니다.

스크립트는 원하는 게임오브젝트에 추가해주면 됩니다. 그리고 추가한 스크립트는 언제든지 삭제가 가능합니다.

그리고 실행을 하면 콘솔창에 Start가 게임시작할때 한번 찍히는게 보일겁니다.

 

<6.볼슼적용>

 

이번에는 Update() 에도 로그를 찍게 만들어 보겠습니다. 그런데 Update()는 매 프레임마다 실행된다고 했었죠? 

그래서 count라는 변수를 하나 선언해서 몇번이나 실행되는지 확인해 보겠습니다.

 

<7.Update>

 

콘솔 뷰를 보면 Clear가 있는데 Clear를 누르면 콘솔창이 깨끗하게 정리됩니다.

그리고 Clear on Play를 누르면 실행할 때 마다 콘솔창을 깨끗하게 만든후 실행하게 됩니다.

그럼 실행해 보겠습니다.

 

<8.Update>

 

콘솔을 보시면 맨처음에 스타트가 호출되고 Update옆의 숫자가 증가하면서 출력되는걸 확인해 볼 수 있습니다.

 

스크립트를 만드는 방법이었습니다.

 

끝!

 


이번에는 유니티에서 물리엔진을 적용해보겠습니다.

사용할 것은 RigidBody와 Physic Material 그리고 Collider에 차례대로 알아보겠습니다.

일단은 물리엔진을 적용할 간단한 프로젝트를 하나 만들어볼건데요 땅을 만들어서 공이 튕기도록 만들어 볼겁니다.

프로젝트를 생성하고 큐브를 하나 만들어줍니다.

[메뉴] GameObject -> 3D Object -> Cube 를 선택해줍니다.

이름은 Ground로 변경해줍니다. 그리고 X값과 Z값을 키워서 늘려줘서 땅의 모양처럼 만들어줍니다.

그리고 공이 굴러가도록 Rotation값을 수정해줘서 경사진땅을 만들어 줍니다.

이번에는 굴러갈 공을 만들어 보겠습니다.

[메뉴] GameObject -> 3D Object -> Sphere 를 선택해줍니다.

이름은 Ball로 수정해줍니다.

이름은 Ball로 변경해줍니다. 그리고 Position에 X값과 Y값을 수정해서 굴러갈 위치에 둡니다.

그리고 Rigidbody라는 컴포넌트를 하나 추가해줍니다. Rigidbody에 대해서는 아래에서 설명해드리겠습니다.

여기까지 잘 따라오셨다면 게임뷰에 아래와 같은 모습을 볼 수 있습니다.

혹시라도 조금 달라서 똑같게 보고 싶다 하시는 분은 카메라의 값들을 수정하시길 바랍니다.

카메라의 Position을 0 6 -26 으로 수정해주시면 됩니다. 자 그럼 재생을 한번 해보겠습니다.

공이 아주 잘~ 굴러갑니다!!! 처음 적용해보는거라 신기하네요.

잘 굴러갔나요? 그럼 이제 Rigidbody에 대해서 알아보겠습니다.

공이 아래로 굴러가기 위해서는 공에 중력과 같은 힘이 있어야 움직이겠죠?

그래서 중력과 같은 물리법칙을 유니티에서는 Rigidbody라는 컴포넌트를 통해서 구현합니다.

그런데 왜 Rigidbody를 공에만 추가했을까요???

Rigidbody를 Ground에도 적용을 시키게 되면 Ground도 중력때문에 공과 같이 아래로 떨어지게 됩니다.

Rigidbody에서 특정 물체가 중력에 영향을 안받게 하기 위해서는 Use Gravity라는 속성의 체크를 해제해주시면 됩니다.

그럼 Use Gravity를 해제하면 무중력 상태와 같이 동작한다는 뜻이지 물리법칙을 받지 않는다는 뜻은 아닙니다.

그래서 실행하면 공에 맞은 Ground가 회전하면서 아래로 떨어지는걸 볼 수 있습니다.

제가 원하는건 설정한 땅 위에서 공이 굴러가길 원한 것이기 때문에 Ground에 Rigidbody컴포넌트는 삭제해줍니다.

 

그럼 이번에는 Physic Material을 알아볼건데요.

Physic Meterial은 물리동작을 할 때 물체가 어떤 물성을 갖는지를 결정해주는데요 정할 수 있는 값은 4가지 입니다.

1.Bounciness : 얼마나 튀어오르는가에 대한 것입니다.

2.Static Fiction : 마찰력인데요. 멈춰있는 상태에서 움직이기 시작하려면 어느정도의 힘이 가해져야 하는가에 대한 값입니다.

3.Dynamic Fiction : 움직이는 중에 마찰력이 어느정도 될 것인가에 대한 값입니다.

4.Fiction Combine : 마찰력이란 것은 두 물체가 있어야지만 마찰력이 생기는거죠? 그래서 공과 그라운드가 부딪혔을 때 마찰력이 생기는 겁니다.

   이 때 공의 마찰력이 있을 것이고 그라운드의 마찰력이 있을텐데 어떤 값을 적용할지의 대한 선택입니다.

5.Bounce Combine : 마찬가지로 두 물체가 부딪혔을 때 어떤 Bounciness의 값을 쓸지에대한 것입니다.

Physic Material을 만드는 방법은 Project뷰에서 우클릭을 누르고 Create -> Physic Material을 눌러 만들어줍니다. 이름은 Bouncy라고 설정해주겠습니다.

그리고 Bounciness의 값을 1로 설정해줍니다. 그리고 이제 Bouncy파일을 드래그해서 Ball에 놓아주면 Ball에 Bouncy가 적용됩니다.

적용된 모습은 다음의 Collider를 보면서 확인해 보겠습니다.

 

Collider는 번역하면 충돌체라고 하는데요 말그대로 충돌이 발생했는지를 감지해주는 역할을 합니다.

그래서 만약 Collider 컴포넌트를 삭제시키게 되면 물체와 충돌을 일으키지 않게 되고 통과하게 됩니다.

즉, Rigidbody에서 물리를 적용할 때 공에 적용되는게 아니라 Collider에 의해 적용되는 겁니다.

그래서 Collider가 없으면 그라운드와 부딪히지 않고 그냥 떨어지게 되는겁니다.

Collider의 종류가 모양에 맞게 여러개가 있는데요

Collider를 지웠다가 새롭게 추가할 때 다른 모양의 Collider를 추가해주게 되면 생각했던것과 다른 물리가 적용될 수 있으니 추가 할 때 주의해야합니다.

예를 들어 지금 Ball에 Sphere Collider가 적용되어 있는데 이것을 Box Collider를 추가해보겠습니다.

원래있던 Sphere Collider컴포넌트를 삭제하고 Box Collider를 추가해주었습니다.

공을 잘 보면 겉에 초록색 테두리가 쳐져 있는게 보이는데요. Box형태의 Collider를 추가해줬기 때문에 박스형태의 충돌이 된다고 보여주는겁니다.

이 상태로 재생을 시켜보세요. 공이 잘 굴러가나요?  안굴러갑니다. 그냥 멈추네요.

충돌체가 더이상 동그란 공이 아니기 때문입니다. 그럼 Collider에서 설정할 수 있는 값들에 대해 보겠습니다.

 

Box Collider를 살펴보겠습니다.

Center의 값을 수정해서 충돌체의 위치를 지정할 수 있습니다.

지금은 공의 딱 맞게 되어 있지미나 수정하면 위치가 바뀌게 됩니다.

Size를 수정해서 충돌체의 크기를 수정할 수 있는데요

위의 초록 박스의 크기가 커지고 줄어들게 됩니다.

설정을 잘 못하게 되면 붕뜨거나 파묻히게 됩니다.

 

 

 

 

 

이상 유니티에서 물리엔진을 알아봤습니다.

 

끝!

안녕하세요 이번시간에는 컴포넌트라는것에 대해서 알아보도록 하겠습니다.

컴포넌트는 게임오브젝트의 성질을 정의해주는 역할을 하는데요


예를 한번 들어 볼까요?
하이에라키에서 메인카메라를 선택하고 인스펙터 창을보면 카메라라는 영역이 있죠?
메인 카메라라는 게임오브젝트가 카메라로서 역할을 할 수 있는 이유는 카메라라는 컴포넌트를 가지고 있기 때문입니다.
메인카메라라는 게임오브젝트에서 카메라라는 컴포넌트를 없애버리면 더 이상 카메라 역할을 못하는데요 컴포넌트를 없애기 위해서는 이 버튼을 누르고 리무브 컴포넌트(Remove Component) 를 누르면 됩니다.


그런데 에러메시지가 뜨네요.
GUILayer, FLareLayer 이 두가지가 카메라라는것에 의존적이라고 합니다. 인스펙터창 아래부분에 GUILayer와 FlareLayer가 있는데 이것을 먼저 제거해보겠습니다.


그다음 카메라를 없애볼까요?


카메라라는 컴포넌트가 없어지고 나니까 게임뷰에서 No camera라고 뜨네요. 카메라가 없기때문에 보여줄 화면이 없는거죠.

그럼 다시 카메라를 살려볼까요? 우선 메인카메라는 지워주도록 하겠습니다.

그리고 새로운 오브젝트를 만들어 볼건데요?
메뉴에서    GameObject -> Create Empty   를 눌러줍니다.
그리고 새로생긴 오브젝트의 인스펙터창에서 Add Component버튼을 눌러줍니다. 그러면 여러가지 컴포넌트를 검색할 수 있는데요 Camera 라고 검색을 해서 카메라를 추가해보겠습니다.

 

추가됨과 동시에 게임뷰에 다시 화면이 나오게됩니다.
카메라의 위치는 원하는 위치로 조정해서 맞춰주면 됩니다.

빈 게임오브젝트를 만들어서 카메라컴포넌트를 추가해주면 그 게임오브젝트는 이제부터 카메라가 동작하게 되는겁니다.

지금까지 보신것처럼 컴포넌트는 그 컴포넌트가 추가된 게임오브젝트의 성질을 결정하는 역할을 합니다.

끝!

유니티 게임 오브젝트 두번째 강의인데요.

저번 강의를 간단히 복습해보겠습니다.

 

게임 오브젝트 (Game Object)는 게임을 실행하면 나타나는 각각의 구성요소들을 가리킵니다.

그리고 오브젝트를 조작하는 법에 대해서 배웠었습니다.

 

오늘은 게임오브젝트를 조작하는 다른방법을 알아보겠습니다.

게임오브젝트 큐브를 하나 만들고 헤이에라키뷰에서 큐브를 선택합니다.

그러면 옆에 인스펙터 창에 큐브에 대한 정보들이 나타나게되는데요

 

 


인스펙터창을보면 Transform 이 있는데요 Transform은 큐브의 현재 위치를 나타내주는 XYZ값입니다.

XYZ의 값을 직접 수정해서 큐브의 위치를 옮길수도 있고 큐브를 선택하고 큐브의 화살표를 이용해 이동시켜도 XYZ의 값이 수정 됩니다. 그리고 Transform의 글자 X,Y,Z를 누르고 마우스를 좌우로 움직이면 XYZ의 값을 좀더 세밀하게 조작할 수 있습니다. 간단하죠?

 

이번에는 카메라와 라이트에 대해서 알아보겠습니다.

프로젝트를 처음만들면 Main Camera 와 Directional Light가 하이에라키에 기본적으로 포함되어 있는데요

아무래도 가장 필수적으로 필요한 요소기 때문이겠쬬?

유니티에서 게임을 만든다는건 씬에서 여러 게임 오브젝트를 구성해서 촬영세트장을 잘 만들고 거기에 플레이어라는 배우를 출연시켜서 카메라로 찍은다음에 게임으로 보는과정이라고 할 수 있습니다.

 

지금 씬에는 큐브 하나밖에 없지만 멋진 세트장이 만들어져 있다고 생각하고 카메라를 움직여 보겠습니다.

하이에라키에서 카메라를 더블클릭하고 줌아웃을 해보겠습니다.

 


줌아웃을 하다보면 피라미드를 옆으로 엎어놓은 모양을 볼 수 있습니다.
카메라는 피라미드안에 들어오는 영역을 찍어서 게임뷰에서 보여줍니다.
씬에서 오른쪽 아래를 보면 게임뷰에서 보일모습을 미리 보일 수도 있지만 게임뷰로 따로 볼 수도 있습니다.

 

 

 

지금 큐브가 카메라의 영역안에 있기 때문에 카메라에서는 큐브를 촬영한 모습을 게임뷰에 보여주고 있습니다.

카메라도 다른 게임오브젝트와 마찬가지로 위치를 움직일 수 있습니다.

다음은 라이트 인데요

모든 물체는 빛이 있어야 볼 수 있죠? 그래서 유니티에서는 다양한 조명방식을 제공하는데

이번에는 기본적으로 추가되어있는 디렉셔널 라이트에대해서 알아보겠습니다

 

 

디렉셔널라이트는 말 그대로 한쪽방향으로 빛을 쏘는건데요

유니티에서는 라이트의 빛을 반사하는 게임오브젝트를 카메라가 찍은화면을 가지고 게임뷰에서 보여줌으로써 우리는 게임화면을 만들어내게됩니다.

자 카메라 라이트 게임오브젝트의 관계를 이해하셨나요?

게임오브젝트에 대한 강의는 여기까지입니다.

유니티의 두번째강의는 유니티에서 게임오브젝트라고 불리는 것들에 대해서 알아보겠습니다.

 

게임 오브젝트(Game Object) : 게임을 실행하면 여러가지 구성요소들이 있는데요 플레이어가 있고 장애물도 있고 나무도 있습니다. 이런 하나하나를 유니티에서는 게임 오브젝트라고 부릅니다.

그럼 새로운 프로젝트를 만들고 시작하겠습니다. 새로운 프로젝트를 만들었다면 아래이미지와 같은 화면이 나옵니다.

 

<이미지>

 

하이에라키를 보면 두가지가 기본적으로 추가되어있습니다.

우선은 이 두가지는 두고 새로운 게임 오브젝트를 만들어 보겠습니다.

상단의 메뉴에서 GameObject -> 3D Object -> Cube 를 선택해줍니다.

그럼 화면에 큐브가 하나 생기는데요 새로운 오브젝트를 생성한 것입니다. 간단하죠?

그리고 하이에라키 뷰를 보면 큐브가 새로 생겼을 것입니다.

 

하이에라키 뷰는 게임 오브젝트의 목록이므로 새로운 게임 오브젝트가 생기면 목록에 표시해줍니다.

신 뷰 (#Scene) 에서는 큐브라는 게임 오브젝트의 실제 모양과 상태를 보여주고 있습니다.

각 화살표를 누르고 움직이면 화살표의 방향대로 큐브가 움직일 것입니다.

 

< 그림 2- 1> 신 뷰(#Scene) 에서 보이는 큐브의 모양

 

그리고 아래의 이미지<그림2-2>를 보면 왼쪽상단에 빨갛게 표시한 곳이 있습니다.

이 곳의 5개의 아이콘을 이용해서 게임 오브젝트의 위치, 회전, 모양 등을 변경할 수 있습니다.

그리고 각각의 아이콘들은 왼쪽에서 부터 단축키를 이용해서 qwer순으로 선택을 할 수 있습니다.

 

첫번째 아이콘 (Q)  :  손바닥 아이콘은 신(Scene)의 화면을 누르고 움직이면 화면이 원하는 방향으로 움직여집니다.

두번째 아이콘 (W)  :  두번째 아이콘을 누른상태에서 씬화면에서 드래그를 통해 게임오브젝트를 선택하거나 하이에라키 뷰에서 게임오브젝트를 선택하면 게임오브젝트에 빨강 파랑 초록색의 화살표가 나타나게 되는데요 이 화살표를 이용해서 게임오브젝트의 위치를 바꿀 수 있습니다.

 

세번째 아이콘 (E)  :  게임오브젝트를 선택하면 빨강 파랑 초록의 원이 그려지는데요. 원을 누르고 움직이면 원하는 방향으로 게임 오브젝트를 회전시킬 수 있습니다.

네번째 아이콘 (R) : 게임오브젝트를 선택하면 빨강 파랑 초록의 무언가가 생깁니다. 그 무언가를 누르고 드래그하면 오브젝트가 늘었다줄었다 합니다.

 

그리고 추가적으로 신뷰에서 알아두면 좋은 조작방법 두가지를 더 알려드리겠습니다.

1. 알트(Alt) 키를 누르고 화면을 움직이면 보는 방향이 바뀌게 됩니다.

2. 휠을 움직이면 줌아웃 줌인이 가능합니다.

 

그리고 각각의 아이콘들은 단축키가 있으니 누르기 귀찮다면 단축키를 외워사용하시면 더 편하게 이용할 수 있어요.

 

<그림 2-2> 신(#Scene) 뷰에서 사용하는 아이콘들 (왼쪽상단)

 

 

간단히 게임오브젝트가 무엇인지와 신뷰에서 게임오브젝트를 조작하는 방법을 알아봤는데요

게임오브젝트에 대한 내용이 조금 더 있습니다. 어렵지 않으니 천천히 따라해보세요.

 

끝!

안녕하세요 백자까입니다.

 

오늘은 유니티의 첫번째 강의인 만큼 유니티프로그램을 실행하면 안에 여러구성요소들이 존재하는데요.

 

각 구성요소들의 역할에 대해서 간단히 살펴보고자 합니다.

 

그럼 먼저 유니티를 실행시켜서 새프로젝트 생성을 해보겠습니다.

 

프로젝트명을 정한다음에 3D를 선택하고 Create project 버튼을 눌러 프로젝트를 생성해줍니다.

 

 

유니티에서는 화면을 구성하는 각 부분을 뷰라고 표현합니다.

 

가운데 위쪽을 보면   재생   일시정지  와 같은 아이콘을 이용해서 재생버튼을 눌러서 게임실행하는 걸 미리 볼수 있고 일시정지를 통해 멈출 수 있습니다.

 

씬 뷰 (Scene view) : 빨강

게임을 구성하는 구성요소들의 배치상태와 모습들을 볼 수 있는 화면입니다.

하이에라키뷰에서 원하는 요소를 누르면 그 요소의 위치로 카메라가 이동하고 게임요소의 배치상태를 변경할 수도 있습니다.

 

하이에라키 뷰 (Hierarchy view) : 주황

게임을 구성하는 요소들의 목록을 보여주는 뷰입니다.

 

게임 뷰 (Game view) : 초록

씬 뷰를 촬영해서 게임화변으로 볼 수 있는 곳입니다.

 

프로젝트 뷰 (Project view) : 파랑

프로젝트를 구성하는 파일들을 표시해줍니다.

 

위의 4가지 외에 보이지는 않지만 오브젝트를 클릭하면 인스펙터 뷰 (Inspector view)를 볼 수 있습니다.

 

인스펙터 뷰에서는 구성요소에 대한 세부적인 정보들을 볼 수 있습니다.

 

이상 유니티의 구성요소 입니다.

+ Recent posts