파렌하이트 MYPI

파렌하이트
접속 : 3838   Lv. 55

Category

Profile

Counter

  • 오늘 : 309 명
  • 전체 : 115501 명
  • Mypi Ver. 0.3.1 β
[ㅋ개ㅋ소ㅋ리] [Unity] 이것으로만 3시간을 허비-_-; (0) 2012/06/30 PM 05:32
var enemy : GameObject[];
var rand;
var targeting : GameObject;

function Start () {

enemy = GameObject.FindGameObjectsWithTag("enemy");

rand = Random.Range(0, enemy.Length);

}


function Update () {

if(targeting == null){
enemy = GameObject.FindGameObjectsWithTag("enemy");

rand = Random.Range(0, enemy.Length);

}

if(enemy.Length > 0){
targeting = enemy[rand];

transform.LookAt(targeting.transform.p-osition);}
}


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

해당 오브젝트가 특정 오브젝트들 중 임의로 하나를 골라 방향을 주시합니다.

타 롤플레잉 게임과 같이 단일의 유저 캐릭터를 조종하여 플레이 한다고 가정한다면, 위의 코드는 더욱더 쉬워졌을지 모르겠습니다만, 불특정 다수의 유저 캐릭터. 예를 들어 유저 캐릭터 외 용병 npc라든지, 소환수 라든지를 고려하였습니다.

여기서는 enemy 태그를 달고 있는 모든 오브젝트를 향해 주시(LookAt)하는 것으로, 아군 캐릭터에 해당되겠지요.

제가 머리가 나빠서 그런건지 모르겠습니다만, 저 코딩을 하기위해 수십번 시행착오를 겪었습니다.
그리곤 마침내, 제가 원하는 결과가 나오니, 절로 흥이나는군요.ㅋㅋㅋ

var enemy : GameObject[];
// 적의 오브젝트
var rand;
// 랜덤 변수, 허나 아무것도 지정해주지 않아 값은 아마도 null
var targeting : GameObject;
// 타겟 오브젝트

function Start () {

enemy = GameObject.FindGameObjectsWithTag("enemy");

rand = Random.Range(0, enemy.Length);

}
// 게임 시작시 작동되는 함수로서, 제가 알기로 게임내 단 한번만 작동하는 것으로 압니다.
// enemy 태그를 달고 있는 오브젝트를 찾아냅니다.
// 임의 값 0부터 찾아낸 오브젝트의 갯수 까지의 임의 수를 얻어냅니다

function Update () {

if(targeting == null){
enemy = GameObject.FindGameObjectsWithTag("enemy");

rand = Random.Range(0, enemy.Length);

}

if(enemy.Length > 0){
targeting = enemy[rand];

transform.LookAt(targeting.transform.p-osition);}
}
//게임 내 프레임당 작동되는 함수로서, 매 순간마다 작동합니다.
// 위의 if문은 잠시 내버려두고 밑의 if문부터 설명하자면, enemy 태그를 달고 있는 오브젝트들의 숫자가 0보다 많을 경우. 즉, 적들이 전멸하지 않았을 경우 임의 적(enemy[rand])을 타겟으로 정합니다(targeting). lookat 이하의 괄호안의 타겟. 즉, 타겟으로 정한 적을 주시합니다. 이는 적의 위치가 바뀌어도, 위치에 따라 오브젝트를 주시합니다.
// 다시 위로 올라가서, 타겟의 값이 null(문자도 아니고, 숫자도 아닌 무의 값). 게임 내에서는 타겟으로 정한 적을 제거함을 의미합니다. 제거된 적은 게임 내에서 Destroy함수에 의해 삭제됩니다. 그리하여 적이 제거될 경우, enemy 태그를 가진 또다른 오브젝트(게임 내에선 적)를 찾아내어 enemy 변수에 지정해 줍니다.
// 이미 이야기했지만 이 함수는 매 프레임마다 반복되므로, 유저가 적을 제거했을 시, 적이 얼마나 남아있는 지를 판별하여 임의로 타겟을 설정해 줍니다.

막상 코딩을 마치고 보니 중간에 enemy = GameObject.FindGameObjectsWithTag("enemy"); 구문이 두 번 정도 들어가 있는 것이 별로 만족스럽진 않습니다.


ps. unity는 국내에 잘 알려져 있는 것 같습니다만, 정작 유용한 정보는 죄다 외국 포럼에 있는것 같더군요. 그 덕에 영어 공부를 게을리 한 점에 대해 깊은 후회를 하고 있습니다.

ps. transform.LookAt(targeting.transform.p-osition) 인데, 왜 중간에 ' - ' 하나가 더 들어갔는지-_-; 수정해도 안되네요

신고

 
X