2016-02-21 63 views
2

我覺得我只是在解決這個問題時遇到了一個心理障礙,所以我想我會檢查我的代碼的建議。生成過程網格時發生旋轉問題

我試圖生成一個相當簡單/一致的形狀的道路網。問題是,在使用Transform.forward和Transform.right命令從中心調整點時,它不會正確旋轉。

以下是我正在如何計算所述頂點的簡化版本(斜率和傾斜已被移除):

CreateRoadPiece (Transform _transform, Vector3 center) 
    { 
     Vector3 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11; 

     p0 = center + _transform.forward - (_transform.right * 5.0f); 
     p1 = center + _transform.forward + (_transform.right * 5.0f); 

     p2 = center + (_transform.right * 5.0f); 
     p3 = center - (_transform.right * 5.0f); 

     p4 = center - _transform.forward - (_transform.right * 5.0f); 
     p5 = center - _transform.forward + (_transform.right * 5.0f); 

     p6 = p0; 
     p7 = p1; 
     p8 = p2; 
     p9 = p3; 
     p10 = p4; 
     p11 = p5; 

     p0.y -= 0.1f; 
     p1.y -= 0.1f; 
     p2.y -= 0.1f; 
     p3.y -= 0.1f; 
     p4.y -= 0.1f; 
     p5.y -= 0.1f; 

     p6.y += 0.1f; 
     p7.y += 0.1f; 
     p8.y += 0.1f; 
     p9.y += 0.1f; 
     p10.y += 0.1f; 
     p11.y += 0.1f; 
    } 

的_transform是與網狀部件的目的和它的旋轉,並且定位成面對方向路條應該鋪開。

路段是10個單位寬,0.2個單位高,2個單位深。

我假設使用transform.forward和transform.right會解決旋轉問題,但也許我失去了一些東西?

面對Z +時,這一切都沒有問題。

感謝您的任何意見。

+0

爲什麼會有人投票關閉這個?這是一週內唯一的Unity3D問題 – Fattie

回答

0

我終於想出了一個解決方案。我發現計算結果(大部分)是正確的,但是定位是關閉的。它主要是在上面的計算中以及中心變量中拋出Transform.TransformPoint和所有變體(Direction,Vector和它們的逆),但是我最終設法達到了我需要的東西。

CreateRoadPiece (Transform _transform, Vector3 center, byte unitDirection) 
{ 

     Vector3 transformForward = _transform.TransformDirection(_transform.forward); 
     Vector3 transformRight = _transform.TransformDirection(_transform.right); 

     if(unitDirection == 1 || unitDirection == 3) 
     { 
      transformForward = -transformForward; 
      transformRight = -transformRight; 
     } 

     p0 = (center + (transformForward + (-transformRight * 5.0f))); 
     p1 = (center + (transformForward + (transformRight * 5.0f))); 
     p2 = (center + (transformRight * 5.0f)); 
     p3 = (center + (-transformRight * 5.0f)); 
     p4 = (center + (-transformForward + (-transformRight * 5.0f))); 
     p5 = (center + (-transformForward + (transformRight * 5.0f))); 
} 

統一的網格系統,似乎只有在世界空間中工作,但我用其他的檢查變換的旋轉(主要是創建路徑時通信方向)。因此,這種解決方案似乎解決我的安置問題相當不錯(我也是用:

_transform.InverseTransformPoint (center); 

當我中心值發送到這個功能

編輯:

修改的代碼略有就是我當前的解決方案是unitDirection是一個字節值,用於判斷旋轉是0(0),90(1),180(2)還是270(3)(所有片段只旋轉90度以使組合更簡單) ))順序在90度和270度旋轉時相反,因此對transformForward和transformRight進行的調整將所有內容都放在了應有的位置。