GameForFun

블로그 이미지
by PforPepsi

TAG CLOUD

  • Total hit
  • Today hit
  • Yesterday hit

이 글에서는 다양한(? 그래봤자 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