2014-10-19 11 views
1

안녕하세요 여러분, 여기 조금 붙어 있습니다. 내 gameObject Enemy Spawn을 임의의 시간에 사용합니다. 하지만 그 일은 5 초 동안 적에 게임을 시작하기를 원합니다. 문제는 제가 물체를 전혀 파괴 할 수 없다는 것입니다. 여기에 내가 시도하고 적 개체 파괴하는이 코드를 썼다 :유니티에서 클론을 파괴합니다.

public class SpawnManager : MonoBehaviour { 

public GameObject Enemy; 
public float mytimer; 
public float enemyHealth = 5.0f; 

void Start() 
{ 
    GameObject player = GameObject.Find("Player"); 
} 

void spawnEnemy() { 
    Transform enemy; 
    GameObject enemySpawnPoint = GameObject.Find("EnemySpawn"); 
    enemy = Instantiate(Enemy,enemySpawnPoint.transform.position,enemySpawnPoint.transform.rotation) as Transform; 
} 

void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.name == "EnemyTrigger") { 
     mytimer = Random.Range(0,10); 
     //Debug.Log("Now Destroying"); 
     Invoke("spawnEnemy", mytimer); 
     Debug.Log("Spawn Normal"); 

     if(Enemy.name == "BloodyMary(Clone"){ 
      Destroy(Enemy, enemyHealth); 
      Debug.Log("Now Destroying"); 
     } 
     } 
    } 

    } 

매번 내가 트리거로 실행이 급부상을 내가 파괴하려고 "BloodyMary (복제)". 어떤 충고? 라고

+0

제공된 답변 중 귀하의 질문에 올바르게 답변 했습니까? –

답변

1

코드 :

Invoke ("spawnEnemy", myTimer); 

는 꽃밥 적 클론을 생성하여 spawnEnemy() 함수를 호출한다. 또한 지연 타이머를 사용하여 전화를 겁니다.

다른 적을 원하지 않으면 코드 부분 만 제거하면됩니다.


또한 타이머로 파괴하고 있습니다. Destroy(Enemy)으로 즉시 파괴 할 수 있습니다.

+0

@Ghostdre 내 대답이 내 문제를 해결 한 경우 다른 사람들이 해결되었다는 사실을 알기 위해 받아 들일 수 있습니다. 내가하지 않았다면 알려줘. – FunctionR

+0

누구든지 내 대답에 투표 해 설명해주십시오. 유효한 포인트를 작성하면 기꺼이 내 대답을 삭제할 것입니다. 그러나 내 대답이 정확한지 알고 있습니다. – FunctionR

+1

이것이 투표의 가치가있는 방법을 모르겠다. 누가 그것을했는지는 확실하지 않지만 가장 작은 답변을 얻는 것이 좋습니다. 제가 말할 수있는 유일한 것은 질문이 5 초 후에 파괴된다는 것과 당신의 대답은 5 초마다 산란하는 것입니다. 과거에는 +1했습니다. –

2

내 눈에는 원수가 자신의 파괴를 다루는 것이 더 합리적 일 것입니다. 이것은 적군이 자신의 지속 시간에 책임이 있음을 의미합니다. 언제든지 현장에 적을 많이 가지고 있다면 더 합리적이라고 느낄 수 있습니다.

간단히 5 초를 기다린 다음 Destroy(gameObject) 함수를 호출하여 자체를 파괴하는 co-routine을 만듭니다. 그것은 조금 다음과 같이 보일 수 있습니다 :

IEnumerator DeathTimer(float duration) 
{ 
    yeild return new WaitForSeconds(duration); 
    Destroy(gameObject); 
} 

는 그런 다음 '시작() 메서드 내 나는 그 공동 루틴 (정상적인 방법으로하지)를 호출하는 것입니다. "당신이 다음"StopCoroutine ("methodName로);"호출 할 수 있습니다 (위와 같이) 문자열을 사용하여 공동 루틴을 호출하여 :

void Start() 
{ 
    // calls the coroutine to start 
    StartCoroutine("DeathTimer", duration); 
} 

참고 :이이 같은 것을 사용하여 수행 할 것 언제든지 코 루틴을 멈출 것입니다. 메서드 매개 변수를 StartCoroutine()에 전달하는 것보다 낫습니다.

이것은 당신의 spawner가 이제는 적의 산란에 대한 순전히 책임이 있고 그들이 너무 오래 지속되면 자신의 죽음에 대한 책임이 있음을 의미합니다. 그렇다면 당신은 spawner에서 다수의 적을 관리하려고하지 않으며 거기에서 그들을 추적하는 것에 대해 걱정할 필요가 없습니다.

나는 친구가 전에 비슷한 질문을하고 있었고 그는 이것을 사용했고 치료를했습니다.

+0

첫 번째 코드 스 니펫의 구문을 편집했는데 친구가 약간 벗어난 것을 지적했습니다. –