2017-08-07 61 views
0

相機正在投射光線到任何其他物體。 我想測量特定對象(screen3D)的生命值(x,y,z)。 這裏是我的代碼測量特定對象的光線投射點

public class EyeTrackingPoint : MonoBehaviour { 
public float sphereRadius=250.0f; 
public GameObject screen3D; 
public Vector3 ScreenPosition; 
private void Update() 
{ 
    RaycastHit hit; 
    Camera cam = Camera.main; 
    Ray ray = new Ray(cam.transform.position, cam.transform.rotation * Vector3.forward * sphereRadius); 
    if(Physics.Raycast(ray, out hit) || hit.collider.gameObject.Equals(screen3D)) 
    { 
     Debug.Log(hit.point); 
    } 
} 

}

但是,我得到空引用異常錯誤。我該怎麼做才能解決我的錯誤。 的NullReferenceException:未將對象引用設置到對象 EyeTrackingPoint.Update的一個實例()(在資產/ EyeTrackingPoint.cs:14)

EyetrackingPoint.cs:14

if(Physics.Raycast(ray, out hit) || hit.collider.gameObject.Equals(screen3D)) 

謝謝您的閱讀。

回答

1

它與||有關。那應該是&&而不是||

||表示即使Physics.Raycast(ray, out hit)false,也會檢查下一個條件hit.collider.gameObject.Equals(screen3D)

如果Physics.Raycast(ray, out hit)falsehit.collider.gameObject.Equals(screen3D)被執行時,hit變量將是無效,當您嘗試使用hit.collider你會得到空例外。

當您使用&&,hit.collider.gameObject.Equals(screen3D)將僅檢查如果Physics.Raycast(ray, out hit)true這是你想要的正確行爲。

所以,你應該這樣做:

if (Physics.Raycast(ray, out hit) && hit.collider.gameObject == screen3D) 
{ 
    Debug.Log(hit.point); 
} 

OR

if (Physics.Raycast(ray, out hit)) 
{ 
    if (hit.collider.gameObject == screen3D) 
    { 
     Debug.Log(hit.point); 
    } 
}