2013-03-15 3 views
1

그래서 현재 unity3D를 사용하여 게임 프로젝트를 진행 중이며이 이상한 오류가 발생했습니다.유니티로 발사체를 촬영하면 항상 null 예외가 반환됩니다.

저는 발사체를 인스턴스화하고 앞으로 쏘려고합니다.

if (Input.GetButtonUp("Fire1")){ 
     Vector3 frontDir = transform.TransformDirection(Vector3.forward * arrowShotForce); 

     if (chosenProj){ 
      Rigidbody shotProj = Instantiate(chosenProj, transform.position, transform.rotation) as Rigidbody; 
      shotProj.AddForce(frontDir); 
     } 
    } 

내가 스크립트를 재생하려고, 그것은 shotProj.AddForce (frontDir)에서 오류를 얻을 수NullReferenceException이 말 : 여기 내 업데이트 코드의 개체 참조가 개체의 인스턴스로 설정되지 않았습니다

'selectedProj'게임 객체를 선택하고 발사체 모델을 할당했지만 여전히이 오류가 있습니다. 발사체는 앞으로 날지 않을 것이고 나는 한 달 동안 화합으로 일했기 때문에 나는 너무 바보 같다고 느낀다.

왜 그런지? 마지막 줄에 NullReferenceException를 얻을 수

THX의 B4

답변

4

귀하의 코드 : 마지막 줄 무언가에

Rigidbody shotProj = Instantiate(
    chosenProj, transform.position, transform.rotation) 
    as Rigidbody; 
shotProj.AddForce(frontDir); 

null이거나 그렇지 않으면 예외를 얻을 것입니다. frontDirVector3 값 유형이므로 null 일 수있는 유일한 참조 유형은 shotProj입니다.

어떻게 될까요 null? 음, Instantiate()의 반환 값을 Rigidbody으로 캐스팅 할 수없는 경우 as Rigidbody 표현식은 null을 반환합니다.


그래서, 나는 당신의 chosenProj하지RigidBody이라고 결론 지었다. 강체 컴포넌트가있는 것은 실제로는 GameObject입니다. RigidBody를 얻으려면이 사용

GameObject shotProj = (GameObject)Instantiate(chosenProj, transform.position, transform.rotation); 
shotProj.rigidbody.AddForce(frontDir); 

GameObject class 문서는 게임 오브젝트에서 구성 요소를하는 방법에 대한 더 많은 정보를 가지고있다.

+0

OMG 그래서 그것이 작동하지 않습니다 ... THX 많이 Virtlink, 선택한 대답 가치가 .... – Jason