2016-06-22 3 views
1

내 게임에는 총알이 분사되는 총이 있습니다. 총알과의 충돌로 GameObject를 파괴하려고합니다. 총알은 하나의 gameObject (Capsule)을 기반으로합니다. 지금까지이 두 스크립트를 시도했다 :총알로 총을 맞았을 때 오브젝트가 파괴되지 않습니다. - UNITY3D C#

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 

void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(col.gameObject); 
    } 
} 
} 

과 :

using UnityEngine; 
using System.Collections; 

public class whenshot : MonoBehaviour { 


void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.name == "Bullet") 
    { 
     Destroy(this); //the difference between the two is that I changed "col.gameObject" to "this" 
    } 
} 
} 

나는 물체를 촬영하고 있습니다 만 그 자체를 파괴/사라지고 아닙니다. 이 문제를 어떻게 해결할 수 있습니까? Visual

+0

원래 코드가 맞았던 개체가 아니라 총알을 파괴 한 것처럼 보입니다. –

+0

다음 코드 줄을 함수의 맨 위에 추가하고 다시 시도 할 때 로그에 표시되는 내용을 알려줍니다. Debug.Log ("name :"+ col.gameObject.name);','Debug. 로그 메시지를받지 못하면 Log ("matches :"+ (col.gameObject.name == "Bullet"). ToString()); –

+0

@SCottChamberlain 로그가 콘솔 아래에 있으면 로그 메시지가 표시되지 않습니다. –

답변

0

이 내가 다시 잠시 만든 2D 게임에서 예입니다,하지만 난이 도움이 될 생각 : 도움이된다면

여기에 시각적이다.

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.tag == "Destroyable") 
    { 
     Destroy(other.gameObject); 
    } 
} 

나는 선수가 바로 3D 충돌 장치 및 트리거로 전환, 그들에게 많은 시간을 촬영 할 때 특정 블록을 파괴하기 위해 사용하지만, 나중에에 대한 트릭을 (내가 희망 ^^)해야한다.

편집 :이 스크립트는

+0

여기가 나는 코드를 잘못 수행 한 수, 작동하지 않았다 .gameObject); } } } Collider 또는 트리거를 사용해야합니까? –

+0

코드가 총알을 파괴하는 것처럼 보입니다. 당신이 촬영하는 대상 물체를 파괴해야합니다. "적"또는 무엇인가를 차단하는 태그를 달고 충돌시 두 가지를 모두 파괴 해보십시오. – K0D3R

+0

다른 코드를 제공 할 수 있습니까? 죄송합니다. 3 일 전에 Unity를 시작 했으므로 저는 꽤 새로 왔습니다. –

4

this 호출자 (this is basic OOP)의 객체 인스턴스를 참조 조립식 글 머리 기호, 즉, whenshot에 부착하지 gameObject해야합니다. 따라서 두 번째 예제는 실제로 첨부 된 gameObject에서 스크립트의 인스턴스를 생성하는 것입니다.

제 스크립트

기술적 미세하고, 작동한다,이 조건이 충족 제공 :

  1. 어느 발사체 (탄환) 또는 대상 (또는 둘 다) 비 운동 강체 요소가 붙어있다. (Unity docs.)
  2. 둘 다 3D Collider 구성 요소가 있습니다.
  3. 각 각 의 이름입니다. 대상과 충돌하는 bullet gameObject는 정확히 "불릿"입니다.
  4. 모든 발사체 객체는이 스크립트를 구성 요소로 사용합니다.

제안

사용 팹 및 태그 : 원시 당신의 총알을하고 조립식으로 저장합니다. "Bullet"이라는 프리 패브에 태그를 추가하십시오. 대상에 대해 동일한 작업을 수행하고 "대상"으로 태그를 지정합니다. 플레이어에 "플레이어"라고 태그하십시오. "gunController"에서 bullet 프리 패브에 대한 참조를 설정하고 사용중인 모든 트리거에서 총알을 인스턴스화합니다. 글 머리표의 스크립트에서 == 대신 CompareTag("Target")을 사용하고 대상 gameObject와 this.gameObject를 모두 삭제하십시오.

위의 것은 원하는 동작입니다. 그렇다면 충돌과 파괴 사이에 지연이 없기 때문에 물리적 시뮬레이션을 할 필요가 없습니다. 탄환/표적과 다른 물리학 적 상호 작용이 없으면 강체가없는 표식을 방아쇠로 표시하십시오.

유니티 튜토리얼을 통해 이동 강한 제안.

0

그래, 알아 냈으니 이상하게 들리지만 분명히 총알이 너무 빨리 움직이고있는 것 같아. "Bullet_Forward_Force"플로트를 약 150 피트로 천천히 움직여서 작동시켜야했다. 그래도 대답하는 모두에게 감사드립니다.

0

나는 대답을 할 것이다 이렇게 말씀 드릴 수 없습니다 :

당신은 continious 동적으로 충돌 감지 설정, 총알 빨리 갈 수 있습니다.

거의 100 %의 성공률을 보입니다.

+0

감사합니다, 할 수있을 때 해보겠습니다. –

관련 문제