2017-11-18 76 views
0

我深化發展汽車發動機劇本,我想用光線投射避開障礙物。問題是,當我把光線投射它指向(0,0,0)世界座標,雖然我所提到的方向,從我的對象是向前。在Unity3d,我的光線投射始終指向(0,0,0)世界座標

public float sensorLength = 10f; 
public float frontSensorPosition = 3.65f; // distance from the center of 
                //the car to its front 
public float frontSideSensorPosition = 1.1f; 

private void FixedUpdate() { 
    Sensors(); 
    ApplySteer(); 
    Drive(); 
    CheckWayPointDistance(); 
} 
private void Sensors() 
{ 
    RaycastHit hit; 
    Vector3 sensorStartPos = transform.position; 
    sensorStartPos.z += frontSensorPosition; 
    Vector3 fwd = transform.TransformDirection(Vector3.forward); 

    if (Physics.Raycast(sensorStartPos, fwd, out hit, sensorLength)) 
    { 

    } 
    Debug.DrawLine(sensorStartPos, hit.point, Color.green); 
} 

輸出是這樣的: https://i.imgsafe.org/00/0038d11730.png

回答

1

你的代碼,似乎罰款,除非你試圖從開始POS畫線到零點的世界空間,這是爲什麼送花兒給人0,0, 0?因爲你還沒有碰到了什麼東西呢,如果光線投射沒有擊中任何東西hit.point將保持0,0,0

調試行的好辦法是,通過檢查「是我們碰到了什麼東西?」

這裏是完整的例子

private void Sensors() 
{ 
    RaycastHit hit; 
    Vector3 sensorStartPos = transform.position; 
    sensorStartPos.z += frontSensorPosition; 
    Vector3 fwd = transform.TransformDirection(Vector3.forward); 

    if (Physics.Raycast(sensorStartPos, fwd, out hit, sensorLength)) 
    { 
     //if it a surface, then Draw Red line to the hit point 
     Debug.DrawLine(sensorStartPos, hit.point, Color.red); 
    } else 
    { 
     //If don't hit, then draw Green line to the direction we are sensing, 
     //Note hit.point will remain 0,0,0 at this point, because we don't hit anything 
     //So you cannot use hit.point 
     Debug.DrawLine(sensorStartPos, sensorStartPos + (fwd * sensorLength), Color.green); 
    } 
} 

它將汲取綠線,如果它沒有命中,但因爲它仍然是零,我們不使用hit.point。

,打 時,請告訴我,如果這個工作,或者說如果沒有

+0

我甚至都不需要我的編輯知道,這個工程將畫紅線。 – Draco18s

+0

不幸的是,還有另一個問題。 –

+0

我用障礙物包圍了我的車,看是否顯示它碰到了水手。並最終沒有看到碰撞。 布爾障礙物= Physics.Raycast(sensorStartPos,FWD,出命中,sensorLength); 的debug.log( 「OBSTACLE:」 +障礙); 它始終顯示錯誤。 –