GameForFun

블로그 이미지
by PforPepsi

TAG CLOUD

  • Total hit
  • Today hit
  • Yesterday hit

이번 글에서는 3D MAX를 이용해서 캐릭터를 모델링하는법에 대해 알아보도록 하죠.



먼저 3DMAX 를 키세요




그 뒤 위와 같은 그림 2장을 준비합니다.   하나는 앞모습이고, 하나는 옆모습이에요.

++++++ 시점은                                                                                                요기 밑에 큐브를 잡고 돌리시면 되요.

3D MAX에서 Plane 2장을 생성해줍니다.

그런 다음에 그냥 그림 그리신거 끌어다가 넣으시면 되요..

만일 안보이신다!!! 그럼 돌려주세요 Rotate로. 이게 뒷면이면 투명하게 보여서... 양면 설정하는법을 까먹었네요 

저희는 캐릭터가 둥글둥글하니까 그냥 구를 생성하고 시작하도록 하죠. 

Geometry에서 -> Sphere 선택 -> 생성;;;;;;  쉽죠!?


정면과 옆면을 보면서 크기를 맞춰줍니다. Scale버튼을 이용하세요

그런 다음!(여기부터가 중요)

구를 선택하여 Edit Mesh라는 것을 추가해줍니다. 빨간색 화살표가 표시하는것 누르시면 있어요.

Edit Mesh는 5가지를 조종할수 있습니다. Vertex, Line, triangle, polygon, object요.. 주로 쓰는건 vertex,line, polygon이에요.

1. 여튼 Polygon을 선택해서

2. 구의 반쪽을 지워버립니다.


쉽죠잉?

그 다음 남은 반쪽을 선택하고 . 위의 화살표 2번이 가르키는 Mirror을 선택합니다.

Mirror에는 4종류가 있는데, No Clone은 그냥 뒤집는거고요, Copy는 그냥 해당 아이템을 복사, Instance는 복사하되 원래것을 건드리면 복사된것도 바뀌고요(맞나?), Reference는 복사된것과 원본이 서로에게 영향을 미칩니다.

여튼 reference로 복사해줍니다. 

그 뒤, Polygon을 선택한뒤에 팔모양을 만들것입니다. 

그림의 팔의 크기에 맞게, 적당히 폴리곤 몇개를 선택해서 구멍을 냅시다.(요것도 정면과 측면을 보면서 맞추세요/ )
대충 구멍을 뻥!!!!

그 다음 뚫린 구멍의 테두리를 Line을 선택한뒤 선택합니다. 컨트롤 누르시고 선택하시면 다중 선택이 됩니다.

그 다음!!!!! Shift를 누르고 Move로 쭉 드래그하시면 이렇게 되요!

놀랍죠!? ㅡ.ㅡ;;

계속 해서 적당히 팔모양을 맞추고 이제 팔의 면을 닫아야되는데, 

닫는것은 wield라는 명령어를 씁니다.(화살표 2번)  -> 요놈은 인접한 vertex들을 하나로 합쳐버립니다.

팔 끝부분에서 한번더 폴리곤을 생성하시고(Shift + Move) 

1. 점을 Scale로 가깝게 만들어줍니다.

2. 충분히 가깝게 하고 wield를 누르시면 vertex들이 하나로 합쳐집니다.


나머지 다르는 빠르게 완성해봤어요.
여기서 반쪽을 지웁니다.

나머지 반쪽을 선택하시고 Mirror -> Copy로 생성합니다.

한쪽을 선택하시고 오른쪽 창에 Attach라는 것이 존재하는데 

1. Attach를 누르시고

2. 나머지 반쪽을 선택합니다.

이제 그 두 오브젝트는 하나로 합쳐졌습니다.


Vertex를 이용해서 중앙의 점들을 하나로 이어주세요. 




-끝-


참 쉽죠잉

'그래픽관련' 카테고리의 다른 글

재질의 종류  (0) 2012.07.05
Sprite  (0) 2012.04.25
3D MAX에서 뼈대 설정해주기  (0) 2012.04.08
3D MAX 하이 폴리곤에서 노말맵 뽑아내기  (0) 2012.04.08
3D MAX UVMAP 펼치는법  (0) 2012.04.08
AND

Unity에서는 ray라는것을 제공합니다.  ray를 사용하면 내가 화면에서 어떤 아이템을 클릭했는가를 쉽게 알 수 있게 해줍니다.


그럼 먼저


Ray 란 무엇인가?

-> Ray를 번역하면 '광선'이죠?  ray는 말 그대로 광선을 뜻합니다.


시작점 : Origin

방향 : Direction


이 두가지를 가진 오브젝트로써, 시작점으로부터 방향으로 쭉 선을 그어주는 놈입니다.


Ray의 사용

-  ray는 다음과 같은 곳에 쓰일 것입니다. 

1. 게임에서 내 캐릭터를, 내가 클릭한 곳으로 이동시키고 싶다

2. 게임 화면에서 어떤 오브젝트를 클릭했는지 알고 싶다.

----------------------------------제가 현재까지 사용한 정도------------------------------------------------------------------


Ray 관련 중요 메쏘드

- 그럼 Ray와 관련된 중요 메쏘드들을 살펴봅시다.


1. Camera.ScreenToRay(pixelwidth, pixelHeight)  //(http://unity3d.com/support/documentation/ScriptReference/Camera.ScreenPointToRay.html)

- 이 메쏘드는 카메라를 origin으로 삼고, 인자로 받을 픽셀로부터 자동으로 방향을 결졍해주는 함수입니다.


즉, 이 메쏘드는 위에서 언급한 2가지의 경우를 처리하기 위해 필수인 요소입니다.



2. Plane.Raycast(Ray _r, out float _f) //(http://unity3d.com/support/documentation/ScriptReference/Plane.Raycast.html)

- 이 메쏘드는 특정 평면과 Ray와의 충돌을 체크하여  Ray의 Origin으로부터 충돌지점까지의 거리를 _f에 저장하여 줍니다.


응용.

- 위의 두가지를 응용하면 Ray의 사용 1번을 구현할 수 있습니다.

1
2
3
4
5
6
7
8
9
Plane zeroPlane = new Plane(Vector3.up, Vector3.zero);
float distance;
Vector3 pos;
Ray ray = MainCamera.ScreenPointToRay(Input.mousePosition);
 
if(zeroPlane.Raycast(ray,out distance))
{
pos = ray.origin + ray.direction * distance;
}


위의 코드를 살펴보면, zeroPlane이라는 y축의 값이 0인 평면과, MainCamera에서 쏜 Ray를 

zeroPlane.Raycast(ray,out distance))를 통해 처리하고있습니다.

실제 충돌 좌표를 구하는 작업은  8번째 줄입니다.

Vector3 pos에 ray의 원점, 그리고 ray의 방향(노말 벡터)에 거리를 곱해서 구한 것입니다.


3. Physics.Raycast  //http://unity3d.com/support/documentation/ScriptReference/Physics.Raycast.html

- 이 함수는 오버로딩(?)이 되어있습니다. 함수는 기본적으로 충돌하면 참을 반환합니다.

1. (vector3 중심, vector3 방향, float 최대 거리, layermask(?)) (Ray ray, float 거리, layermask)

-> 이 함수는 최대 거리 안에 Collider와 충돌을 하면 true값을 반환해 줍니다.

2. (vector3 중심, vector3 방향, out RaycastHit _r, float 거리, layermask), (Ray ray,out RaycastHit _r, float 거리, layermask)

-> 이 함수를 사용하여 어떤 오브젝트에 가장 먼저 충돌했는지 알 수 있습니다. 그리고 이것을 이해하기 위해서는 

RaycastHit이라는 놈을 알아야 합니다.


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

ray와 충돌한 오브젝트의 정보를 담기 위한 자료입니다.

이를 통해, 

충돌한 지점 point, 

충돌한 지점의 노말 벡터 ,normal

거리 ,distance

충돌된 오브젝트, collider ->요놈이 필요해요

rigidbody

transform


위의 것 외에도 더 있지만, 제가 모르기에 설명 안합니다.


응용

-> 이제 1번과 3번을 응용하여 내가 어떤 오브젝트를 선택했는지 알 수 있습니다.

1
2
3
4
5
6
7
Ray ray = MainCamera.ScreenToRay(Input.mouseposition);
RaycastHit hit;
 
if(Physics.Raycast(ray,out hit))
{
 Debug.Log(hit.collider.name);
}


위의 코드를 그대로 해보면 자신이 클릭한 collider의 이름이 출력되는것이 보일것입니다.


 ---------------------------------------------------------------------------------------------------------------------------------------

저는 카메라에만 사용하였지만, ray는 특정 방향으로 오브젝트가 충돌했을 경우를 체크하기에 유용함으로 쓰기 나름입니다.

 


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

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

이 글에서는 다양한(? 그래봤자 3가지정도)방법을 이용하여 인자를 전달하는 방법을 알아보도록 하겠습니다.

 

1. 그냥 Public  변수의 선언

- 가장 간단한 방법입니다.

스크립트에 public float life; 와 같은것을 해준다면, 게임 오브젝트를 클릭했을 때  Inspector 창에서 수정이 가능한 형태로 나옵니다.


2. SendMessage의 사용

- 별로 추천하지 않는 방법입니다. GameObject.Sendmessage("Method Name",인자); 를 통해 지정한 GameObject가 포함한 스크립트에 MethodName이 있다면 그 함수를 실행합니다..  단점은...... 인자를 한개밖에 못넘겨요..........(틀렸으면 댓글좀요)


예)

Box라는 이름의 게임 오브젝트는 ScriptA라는 스크립트를 컴포넌트로 가지고 있다.

ScriptA라는 스크립트는 Method(float 인자) 라는 함수를 가지고 있다. 


그러면 외부에서 Box에 존재하는 Method를 실행하고 싶다면 다음과 같은 코드를 사용합니다.

1
GameObject.Find("Box").SendMessage("Method", 1.0f);


3. ScriptName을 통해 함수 실행 
-> 이게 개인적으로 제일 좋은것이라 생각함요. 

1
2
3
4
var Script : ScriptName;
 
Script = GetComponent(ScriptName);
Script.Method();

이 방식을 통해서 해당 게임 오브젝트에 존재하는 스크립트의 함수를 실행 할 수 있다. 

따라서 이를 응용하여 다른 게임 오브젝트의 함수를 실행한다고 치자. 

상황

-  총알(Trigger)이 날아가 어떤 플레이어를 맞춘다 그리고 총알을 맞은 플레이어는 죽는다.. 

알아둘 것 

1. 총알은 Trigger이므로 OnTriggerEnter에 처리를 한다. 
2. 플레이어의 메쏘드 IsDead()는 플레이어의 상태를 죽음으로 바꿔주고, State라는 스크립트 파일의 메쏘드이다. 

1
2
3
4
5
6
7
//script for 총알
void OnTriggerEnter(Collider col)
{
 GameObject player = col.gameObject// 맞은 플레이어는 col로 받아들여진다. col.gameObject 를 통해 해당 플레이어의 게임 오브젝트를 player에 저장한다.
 State Script = player.GetComponent<State>();
 Script.IsDead(); //플레이어의 상태가 죽음으로 바뀜
}
이러한 방법으로 게임오브젝트에 다가가 특정스크립트의 메쏘드를 실행 할 수 있다.


'[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/05   »
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

ARCHIVE