2015-06-14 32 views
1

編寫一個C#腳本,允許玩家用簡單的塊構造。出於這個原因,我從播放器中向前發射了一個光線。當射線擊中某個物體時 - 我得到collison的世界座標與hit.point 如果我在該座標上實例化一個構造塊 - 它將被創建與其他物體重疊。我必須改變座標。Unity3D Raycasting

enter image description here

我怎樣才能奠定如上面的圖片中的點?這將允許我計算創建的塊的座標

回答

3

您可以將RaycastHit的point屬性沿着相交面的法線移至塊的範圍(寬度的一半;如果是單位立方體,則爲0.5f) ;是這樣的:

if (Input.GetMouseButtonDown (0)) { 
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    RaycastHit hit; 
    if (Physics.Raycast (ray, out hit)) { 
     Instantiate (prefab, hit.point + hit.normal * blockExtent, hit.transform.rotation); 
    } 
} 

這將在光線投射的交點實例化新的塊(你需要計算的相交面的中心,如果你想他們精確地對齊),並繼承的旋轉相交的GameObject。

請注意,這不會阻止新塊在現有塊內產卵;它會阻止它在你射出的區塊內產卵。

+0

hit.point + hit.normal我試過這個。它適用於其他立方體,但不適用于飛機或其他大型物體。 – Bob

+0

哦......它的工作原理。我困惑了一下。我已經試過這個了,但是它在 – Bob

+0

之前沒有用過預製的範圍(或其他計算出的偏移量)?公平地說,你的問題特別是關於街區,而不是飛機或其他類型的物體。 – Problematic