GameForFun

블로그 이미지
by PforPepsi

TAG CLOUD

  • Total hit
  • Today hit
  • Yesterday hit

먼저 유니티란?

- 유니티는 게임 엔진입니다.  


는 장난반, 진담 반.    여튼 CBES의 기법을 사용하여 만든 게임엔진입니다.


CBES(Component Based Entity System)

- CBES란 무엇이냐....

해석해보면,  부품(component)를 중심으로한 개체(Entity) 시스템이라고 합니다.


예를 들어보록 하죠. 레고조립을 예로 들어보죠....

당신이  레고 부품들을 이용해서 로봇을 만든다고 칩시다.


로봇의 큰 부품을   팔, 몸통, 머리, 다리, 무기 크게 분류해보죠.

그럼 당신은 로봇을 어떻게 만듭니까?


각각 부분에 맞는 부품을 넣죠?   

이와 같습니다.


Unity에서는 GameObject라는 그릇에 Component들을 집어넣습니다.

이 오브젝트에는 물리효과가 적용되니까 '물리효과 부품'을 넣자

이 오브젝트는 빛이 나야되니까 '빛을 내는 부품'을 넣도록 하자.


이러한 형식으로 하나의 Game Object를 생성합니다.


Compont의 범위와 종류

 유니티에서 어느 범위까지 Component로 취급하는지, 그리고 무슨 부품들이 존재하는지 알아보도록 하겠습니다.


Transform - 게임 오브젝트의 위치정보를 담는것입니다.

위치를 Vector3에 담아놓고, 방향등의 추가적인 정보도 존재합니다.

이 정보는 무조건들어 있는 정보입니다.

http://unity3d.com/support/documentation/ScriptReference/Transform.html


Collider -  이 부품은 충돌을 체크하기 위한 부품입니다. 

말씀드리지만 "충돌"만입니다.  충돌할 경우의 물리적인 효과는 아무것도 없습니다.

collider와 같이 충돌을 체크하는 것들은 많이 존재함으로, 다음번 글에서 다루도록 하겠습니다.

http://unity3d.com/support/documentation/ScriptReference/Collider.html


Animation - 애니메이션을 플레이해주는 기능을 지닌 부품입니다.


아..... 다 말해줄 수는 없을 것 같아요... 너무 많거든요? 그래서 컴포넌트의 종류는 이만하고 가장 중요한걸 이야기 하도록 하죠.


그것은 바로 Script의 존재입니다.

 Script(스크립트)란 자기가 직접 정의한 부품을 말하는 것입니다.


예를들어, 음..... 나는 이 검에 불효과를 넣겠어!!!!. 라고 하면,  불 효과를 스크립트로 작성하여 게임 오브젝트에 붙여주시면 됩니다.

유니티는 스크립트를 javascript/C#/boo 이 세가지로 제작할 수 있게 하는데.. 저는 C#으로 설명할 것입니다.


Unity는 사용자가 직접 정의한 부품들도 Component로 취급하게 해주어, 아주 대단한 일을 할 수 있게 만들어 줍니다.


Component 관련 함수들(C# 으로 설명합니다)

- 컴포넌트 관련 함수들은 다음과 같은 것들이 존재합니다.


1.GetComponent  //  http://unity3d.com/support/documentation/ScriptReference/Component.html

이는 게임 오브젝트에 속해있는 부품 하나를 가져옵니다.


ex) 현재 오브젝트에 있는 Collider라는 정보를 가져오는 스크립트를 짜봅시다.


1
Collider col = GetComponent<Collider>();


2. GetComponent(s)InChildren

- 괄호친 것은 있어도되고 없어도 됩니다.

하면 복수로 불러와요


예를 봐봅시다


Collider[] col = GetComponentsInChildren<Collider>();

위의 코드를 치면 Collider라는 컴포넌트들을 리스트로 만들어서 반환을 해줍니다.


3. 컴포넌트의 추가와 삭제

- 레고에서 부품을 추가하고 제거 할 수 있듯이, 유니티에서도 부품을 동적으로 추가/제거 할 수 있습니다.

부품을 추가/제거하기 위한 코드는 다음과 같습니다.

1
2
3
4
5
//추가하는 방법
gameObject.AddComponent("Component Name");
 
//제거하는 방법
Destroy(gameObject.GetComponent<Component Name>());


Destroy같은 경우는 모든 파괴에 사용이 됩니다.


Script를 컴포넌트로써 활용하기

- 위에서 언급했듯이  스크립트 또한 하나의 부품으로 취급됩니다.

이 말은 즊!!!!! 한 스크립트에서 다른스크립트의 정보를 가져와 함수를 실행 할 수 있다는 이야기입니다.

뭐 간단히 가정을 하도록하죠.


ScriptA - 나는 플레이어를 죽게 만들 수 있지. 그러나 PlayerHp라는 정보가 필요해

ScriptB - 나는 플레이어의 PlayerHP를 관리하는 스크립트다. PlayerHp는 GetHp()라는 함수로 얻을 수 있어.


지금 상황에서는 ScriptA가 ScriptB의 함수를 실행해야 하는 경우죠. 이런 경우는 다음의 코드로 실행 할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//ScriptB의 구현
public class ScriptB : MonoBehavior
{
private float PlayerHP;
 
void Update()
{
//hp처리
}
 
public GetHp()
{
return PlayerHp;
}
}
 
//ScriptA 의 구현
 public class ScriptA : MonoBehavior
{
private ScriptB script; //요렇게 자료형을 스크립트 이름으로 해주어야 합니다.
 
void Start()
{
script = GetComponent<ScriptB>();//두 스크립트는 같은 오브젝트의 부품이니까, GetComponent<스크립트 이름>으로 가져옵니다.
}
 
void Update()
{
if(script.GetHp() < 0) // 요렇게 합니다
{
//나 죽었어요 처리
}
}
}


이는 두개의 스크립트가 같은 오브젝트에 있을 경우에만 사용이 가능합니다.

다른 방법으로 스크립트의 함수를 실행 할 수 있지만 다음 글에서 설명하도록 하겠습니다.


http://unity3d.com/support/documentation/ScriptReference/Component.html



'[Unity3D]' 카테고리의 다른 글

[Unity] Network 정리  (2) 2012.03.25
[Unity] 정리들  (0) 2012.03.25
[Unity] 최적화  (1) 2012.03.24
[Unity] Ray의 사용  (0) 2012.03.24
[Unity] 인자 전달 방법  (0) 2012.03.24
AND

ARTICLE CATEGORY

목록들 (118)
[Unity3D] (39)
그래픽관련 (13)
잉여잉여 (25)
프로그래밍 (27)
노래♬ (3)
Game_Design(기획) (3)

RECENT ARTICLE

RECENT COMMENT

RECENT TRACKBACK

CALENDAR

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

ARCHIVE