2013-12-07 2 views
0

내 Unity3D 게임에서 나는 주변을 날아 다니며 작은 부하를 낳는 UFO 적들을 가지고 있습니다. 나는 작은 부하보다 죽이는 것을 더 힘들게하고 싶었습니다. 그래서 그들의 주요 스크립트에서 몇 가지 건강 기능을 넣었습니다. 나는 이것을 플레이어가 UFO를 충분히 쏘면 UFO가 파괴 될 것입니다. (한번 쏘지 말고 멍청 아! 없어졌습니다.) 1 인칭 슈팅 게임이며 어떤 이유로 작동하지 않습니다. 더 오랜 시간 지속되면 게임이 중단되고 회색 화면이 표시됩니다. 일부 스크립트 포럼을 살펴본 결과 아직 답변을 찾지 못했습니다. 내가 어째서 왜 작동하지 않는지 확신 할 수 없기 때문에 변수를 어딘가에서 오용했을 수도있다. (C#과 자바 스크립트가 아닌)적의 생명력 감소 스크립트

var UFOspeed : float = 0.2f; //the speed of it's flight 

    var UFOmovement = true; 
    var UFOmovement2 = false; 
    var UFOhealth = 10; //this is the amount of health I added. I'm unsure if in JS you have to put .0f at the end of numbers unless if it's a float. 


    function Start() 
    { 
    UFOmove(); 
    } 

    function Update() //this update just changes the direction of the movement of the UFO 
    { 
     if(UFOmovement == true && UFOmovement2 == false) 
     { 
      this.transform.position.x += UFOspeed; 
     } 

     if(UFOmovement == true && UFOmovement2 == true) 
     { 
      this.transform.position.z += UFOspeed; 
     } 

     if(UFOmovement == false && UFOmovement2 == true) 
     { 
      this.transform.position.x -= UFOspeed; 
     } 

     if(UFOmovement == false && UFOmovement2 == false) 
     { 
      this.transform.position.z -= UFOspeed; 
     } 
    } 



    function UFOmove() //UFO movement 
    { 
     for(i=1;i>0;i++) 
     { 

    yield WaitForSeconds(1); 

    UFOmovement2 = true; 

    yield WaitForSeconds(1); 

    UFOmovement = false; 

    yield WaitForSeconds(1); 

    UFOmovement2 = false; 

    yield WaitForSeconds(1); 

    UFOmovement = true; 

    } 
    } 

     //This is where I have the bullet collision 

     function OnCollisionEnter(collision : Collision) { 
     if (collision.gameObject.tag == "Bullet") //if the tagged object is Bullet 
     { 
      UFOhealth = UFOhealth - 1; //takes away from the health I put above 
     } 

     if (UFOhealth <=0) 
     { 
      Destroy(collision.gameObject, 3.0); 
     } 
    } 

도움 주셔서 감사합니다.

답변

1

나는 결코 unity3d를 사용하지 않았지만, 코드를 보면 두 가지 주요 문제점을 볼 수있다.

OnCollisionEnter 함수에서 충돌이 총알과 맞는지 확인하고 있습니다. 그렇다면 UFO 건강 상태에서 1을 공제합니다. 여태까지는 그런대로 잘됐다.

그렇다면 건강 상태가 0인지 여부를 확인하고, 그렇다면 총알을 파괴합니다. 대신, 나는 총알이 UFO의 건강과 상관없이 (즉, 총알이 모두 파괴 된 후) 파괴되어야한다고 제안 할 것입니다. 또한 UFO 상태가 0으로 떨어지면 실제 UFO 객체를 파괴해야합니다. 이 복사 - 붙여 넣기에 대한 아니라고

function OnCollisionEnter(collision : Collision) { 
    if (collision.gameObject.tag == "Bullet") //if the tagged object is Bullet 
    { 
     UFOhealth = UFOhealth - 1; //takes away from the health I put above 
     Destroy(collision.gameObject); 
    } 

    if (UFOhealth <=0) 
    { 
     Destroy(UFOobject, 3.0); 
    } 
} 

참고하지만, 당신에게 내가 당신의 실수가 생각하는 곳의 아이디어를주고 : 그래서 코드는 다음과 같이 될 것입니다.

+0

네가 맞아! 나는 그것을 놓쳤다. JS에서는 Destroy (this.gameObject, 3.0);를 작성합니다. UFO를 파괴하라. 유감스럽게도 UFO는 1 타격 후에도 계속 삭제됩니다. 적어도 게임은 더 이상 충돌을 일으키지 않습니다. (어딘가 구문 오류 일 수 있습니다.)하지만이 비트를 직접 알아낼 수 있기를 바랍니다. 총알을 파괴하라는 제안은 정말 좋은 생각이었습니다! – user3037531