유니티 강좌2014. 7. 10. 15:01

 

(3)  Atlas 만들기

 

 

 ‘NGUI Control Sample’프로젝트의 Assets 폴더 안에 Webtoon Image라는 이름으로 폴더를 생성

합니다. 그리고 앞서서 다운받았던 WebToon.zip 파일의 압축을 풀어서 Webtoon Image 폴더에

넣어줍니다.

 

 

[그림 8-2]

 

 

 

그리고 유니티로 다시 돌아와보면, 잠시 로딩이 일어나고, Project창의 내용이 다음과 같이 바뀐 것을

수 있습니다.

 

 

[그림 8-3]

 

 

 

 

Project 창에 추가된 WebToon Image 8장을 모두 선택합니다.

그리고 상단에 있는 NGUI > Atlas Maker 메뉴를 클릭해서 Atlas Maker 창을 오픈합니다.

 

 

 

 

[그림 8-4]

 

 

 

Atlas Maker 창에서는 가장 최근에 작업에 사용되었던 Atlas의 이름이 적혀있는 채로 오픈

되는 경우가 많습니다.

이 때, 실수로 Create 버튼을 눌러서 기존에 있는 Atlas에 덮어쓰기 하는 사고가 일어나지

않도록 주의해야 합니다.

따라서, 먼저 SciFi Atlas라고 적혀있는 이름을 WebToonUI로 변경시켜줍니다.

 

 

 

[그림 8-5]

 

 

 

 

그리고 Create 버튼을 누르면, 현재 선택된 WebToon Image 8장을 포함한 ‘WebToonUI’

Atlas Project창에 생성된 것을 확인할 수 있습니다.

 

 

[그림 8-6]

 

 

 

Posted by 알 수 없는 사용자
유니티 강좌2014. 3. 19. 06:00

5) Finite State Machine(FSM)


PlayMaker는 비주얼 프로그래밍 방식 중에서 Finite State Machine(FSM-유한 상태 기계)방식의 프로그래밍 기법을 사용합니다. 수학이나 과학에서 사용하는 조금 어려운 개념입니다.


FSM을 쉽게 이해하기 위해 먼저 상태라는 개념을 알아봅시다.

상태란, 시간의 선상 위에서 어떠한 사물이나 존재가 취하고 있는 모양, 형편을 말합니다.


앞서 예를 들었던 자판기의 행동에서 상태를 찾아보자면,

소비자가 돈을 넣어주기를 기다리는 상태가 있고,

돈이 들어왔을 때 돈의 가격을 int 변수에 저장하고 제품들의 버튼 상태를 On시킨 후,

돈이 얼마나 들어 오는지, 많은 돈이 들어오는지,

거스름돈 반환 레버가 돌려지는지 체크하는 상태가 있으며,

제품을 선택한 뒤에 소비자가 또 다른 제품을 선택하는지,

거스름돈 레버를 돌리는지 체크하는 상태가 있습니다.


이러한 각각의 상태들은 상태가 유지되는 동안 해야 될 일들이 있으며, 그 일의 처리에 따라서 어떻게 상태들 간의 흐름이 다음으로 이어질 지가 결정됩니다.

   

이 상태(State)가 특정하게 제한된 것을 유한상태(Finite State)라 하며, 정해진 절차에 따라서 반복적으로 그 일을 수행하는 것을 기계(Machine)라고 합니다. 즉 FSM은 어떤 특정한 상태에서 정해진 일을 수행하는 것을 말합니다.


이것은 플레이메이커가 기존의 텍스트 프로그램이나 다른 비주얼 프로그램과 차별되는 중요한 특징입니다. 논리전개의 방법을 제한함으로써 오히려 분석과 이해를 쉽게 할 수 있습니다. 즉 마음대로(자유도가 높은) 만드는 텍스트 프로그래밍이나 비주얼 프로그래밍과 다르게 플레이메이커는 플로우 차트(Flow chart)처럼 제한된 상태로써 논리를 전개합니다. 이러한 프로그래밍 기법으로 인하여 다른 사람이 봐도 쉽게 이해할 수 있는 효과를 갖게 되는 것입니다.

 

말이 어렵나요? 그림으로 표현하자면 [그림 3-11]과 같습니다.



[그림 3-11]


이처럼 FSM은 각 객체 별로 존재하면서 그 안에 다양한 상태들을 담고 있으며, 각각의 상태들 안에는 그 상태에서 수행해야 하는 액션이 담겨 있습니다.


FSM이 들어있는 객체에 적절한 FSM 구성을 해주는 것도 중요하지만, 상태의 안에 그 상태에서만 수행해야 할 액션들을 구성하는 것도 매우 중요한 일입니다.


예를 들어 앞서 보았던 자판기의 FSM 구조를 처음 만들어보면서 '들어온 돈의 액수를 파악한다.' 라는 상태까지만 만들고 그 안에 필요이상의 액션이 들어가면 어떻게 될까요?


[그림 3-12]

분명히 상태는 들어온 돈의 액수를 파악하는 상태이지만, 그 안에서 액션들이 수행하고 있는 부분은 레버를 돌려서 돈이 나가는 것까지 들어있습니다.


이런 경우, 만약 소비자가 돈을 자판기에 넣었을 경우, 돈이 들어는 순간 프로그램이 액션들을 처리하면서 아래와 같은 일이 일어나게 됩니다.

   

①들어온 돈의 액수를 int 변수에 담고, 제품 버튼들의 FSM을 On 시킨다.

→ 돈의 액수 500을 int에 값에 저장.

제품 버튼들의 FSM On.

   

②돈이 들어오면 Red('int값을 더한다.' 상태)로.

→ ERROR: 이벤트에 연결된 상태가 존재하지 않습니다.

   

③반환 레버가 돌려지면 Blue('돈을 반환한다.' 상태)로.

→ ERROR: 이벤트에 연결된 상태가 존재하지 않습니다.

   

④int값을 체크해서 동일한 값으로 돈을 내보낸다.

→ int값을 체크한다.(int 값은 500이다.)

500원을 내보낸다.

int값을 0으로 변경한다.

   

'돈이 들어오길 기다린다.' 상태에서 돈을 넣는 것을 확인하고 '들어온 액수를 파악한다.' 상태로 들어오는 순간, 회색으로 보이는 글씨들은 에러로 인해 처리되지 못하고 남은 액션들이 프로그램으로 처리됩니다. 결과적으로 말하자면, 자판기에 500원을 넣으면 바로 500원이 반환되어 나오는 상황이 되어버리는 것입니다.


이런 예를 보면서 황당하게 느끼거나, '이런 말도 안 되는 실수를 누가해?' 라고 생각하는 분들이 있을지도 모르지만, 이와 같은 실수는 프로그램을 전문적으로 배워보지 않았거나, 배웠더라도 겉핥기 수준으로 배워본 프로그램의 초보자들이 쉽게 저지르는 오류입니다.


이런 황당한 경우를 겪지 않으려면 상태의 개념을 잘 이해하고, 하나의 상태에서 할 수 있는 행동과 할 수 없는 행동에 대해서 잘 구분 지을 줄 알아야 하며, 그것을 바탕으로 본격적으로 프로그램을 짜기 전에, 설계부터 논리적으로 구상을 해본 후 작업에 착수하는 것이 좋습니다


다음 강좌에서는 PlayMaker 사용에 대해 알아보겠습니다.


APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-1]

스마트 앱 개발 학원 국비지원 안내

스카이 아카데미 취업 정보 - 선데이토즈 이야기

미래창조과학부 창조경제 실현

스마트아카데미 책 소개 - 개발자, 나를 말하다

창조경제시대 왜 코딩교육인가 - 스마트 아카데미

스마트아카데미-시설 소개

스마트 앱 전문 교육기관 스마트아카데미가 추천하는 안드로이드앱(1)


Posted by 알 수 없는 사용자
유니티 강좌2014. 3. 12. 06:00

비주얼 프로그래밍이란?


비주얼 프로그래밍을 이해하기 위하여서는 다 알겠지만 컴퓨터가 어떻게 구성되어 있는지 또 어떤 과정을 통해서 구동되는지 먼저 알아보겠습니다.

   

(1) 컴퓨터가 하는 일

1) 입력(Input)

키보드, 마우스, 조이스틱 등의

입력기기를 통해서 처리.



  2) 연산(Calculation)

CPU, GPU 등에서 처리.



  3) 제어(Control)

연산 순서 등을 제어.

   

  4) 기억(Memory)

램, 하드 디스크, USB 등에서 처리.



   

 5) 출력(Output)

모니터, 프린터 등에서 처리.



   

컴퓨터는 이러한 부품들로 구성되어 역할이 나누어져 있습니다. 이들을 자신이 원하는 데로 동작시키기 위해서는 컴퓨터가 이해할 수 있는 말로 명령을 입력해야 합니다. 이 때 명령을 컴퓨터가 수행할 수 있도록 잘 관리해 놓는 과정이 프로그래밍입니다.

   

   

(2) 프로그래밍의 과정

 - 입력(Input)

키보드 및 마우스 등을 통한 입력처리

또는 이 과정을 통해 미리 입력된 파일



 - 연산(CPU)

사용자가 요구하는 각종 계산 작업

조건에 따른 처리

반복 처리


 - 기억장치(Memory)

메모리 사용: 변수 사용

하드 디스크 사용: 파일 읽기/저장



- 출력(Output)

렌더링

텍스트 출력

기기 진동 효과 등


다음번 강좌에서는 Data Type에 대해 알아보도록 하겠습니다.


APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-1]

APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-2]

APP 개발 온라인 강좌 제1강 - 모바일 개발 환경과 Tool 소개 [1-3]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-1]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-2-1]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-3,4] -씬 만들기와 오프젝트 만들기

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-5] -큐브(상자)씬 만들기

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-6~7] - 물리 컴퍼넌트 구성하기


   

Posted by 알 수 없는 사용자
유니티 강좌2014. 3. 10. 06:00

6)물리 컴포넌트 구성하기


이제 큐브에 물리 컴포넌트를 넣어보도록 하겠습니다.

큐브에 물리 컴포넌트를 넣기에 앞서 먼저 큐브가 물리작용을 일으킬 수 있는 조건을 충족시키기 위해서 플랜을 생성하여 바닥의 역할을 하게 바닥에 깔아보도록 하겠습니다.

   

- GameObject > Create Other > Plane를 사용해서 플랜을 하나 생성해주세요.

그리고 Inspector창에서 아래의 그림과 같이 Transform 정보를 깔끔하게 다듬어줍니다.



플랜을 정렬하고 나면, 아래의 그림과 같이 큐브와 플랜이 맞물려 있는 상태가 되는데, 이는 큐브와 플랜 모두가 Y축 포지션 좌표가 0이라서 나타나는 현상입니다.



이러한 문제를 고치기 위해서, 큐브들의 Y축 좌표를 2로 만들어 줍니다.



그리고 플레이 버튼 을 눌러보세요.

   

위의 그림처럼 아무런 미동도 없이 3개의 오브젝트가 화면에 잘 보이고 있다면, 정상입니다. 혹시, 이것저것 연습을 하면서 지우지 못한 컴포넌트가 있어서 오브젝트들이 움직임을 보인다거나, 위치나 회전 값이 이상해지는 현상이 나타난다면 앞으로 가셔서 다시 차근히 위의 그림처럼 화면이 구성되게 세팅해주세요.

   

이제 본격적으로 큐브에 물리 컴포넌트를 넣어보겠습니다.

-'Cube'오브젝트를 선택한 다음, Inspector 창에서 Add Component > Physics > Rigidbody를 클릭해서 'Cube'에 Rigidbody 컴포넌트를 추가합니다.



Rigidbody는 생성과 동시에 자동으로 Use Gravity가 체크가 되어 있어, 큐브에 중력이 적용되도록 만드는 것을 볼 수 있습니다.

- 플레이 버튼을 눌러서 Rigidbody 컴포넌트로 인해 큐브가 어떻게 움직이는지 확인해봅시다.



위의 그림과 같이 'Cube' 오브젝트가 플랜 위로 떨어졌다면, 정상적으로 Rigidbody가 적용된 것 입니다.

※ Rigidbody에서 Mass(무게), Drag(저항), Angular Drag(공기저항)의 값을 바꿔보고 Is Kinematic(물리작용 제외) 체크를 해보고, 풀어보면서 플레이 버튼을 눌러봅시다.

   

그리고 그런 행동에 따라 큐브가 어떤 물리적 속성을 가지게 되는지 확인해봅시다.

   

-이제 그 옆에 있는 'Cube1'에도 Rigidbody를 넣어봅시다.

그리고 플레이를 눌러봅시다.



플레이 화면에서 위의 그림과 같이 'Cube1'이 Plane을 뚫고 내려가는 것을 볼 수 있습니다.

왜 그럴까요?

잘 모르겠다면, 두 개의 큐브의 컴포넌트 상태를 비교해보면 정답을 알 수 있습니다.

   

'Cube'는 충돌 체 역할을 하는 Collider가 있지만, 'Cube1'은 없는 것을 확인할 수 있습니다. 따라서, 'Cube1'에도 Box Collider를 생성해서 충돌체가 존재하도록 해줍니다.

   

그리고 다시 플레이 버튼을 눌러서 확인을 합니다.



상위 그림과 같이 두 개의 큐브가 떨어져서 플랜 위에 멈춰있다면, 정상으로 수정이 된 것입니다.

   

7)컴포넌트에 대한 개념 정리


앞서서 우리는 다양한 컴포넌트를 만들어 봤습니다.

카메라 컴포넌트, 모델 형태 컴포넌트, 모델 렌더링 컴포넌트, 충돌 컴포넌트, 물리 컴포넌트……

이처럼 컴포넌트는 게임 오브젝트라는 그릇 안에서 다양한 형태로 존재하며, 씬에서 오브젝트의 활동, 또는 씬에서 일어나는 특수한 이벤트 등을 관리하는 역할을 합니다.




APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-1]

APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-2]

APP 개발 온라인 강좌 제1강 - 모바일 개발 환경과 Tool 소개 [1-3]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-1]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-2-1]

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-3,4] -씬 만들기와 오프젝트 만들기

APP 개발 온라인 강좌 제2강 - 유니티의 기본 구성 및 조작법 [2-5] -큐브(상자)씬 만들기


Posted by 알 수 없는 사용자