1
我的3D項目出現問題。描述目的是相當複雜的,所以我儘量把它抽象到最低限度。 我有一個現場的統一計劃,我把它帶到全屏(1920 x 1200)的視頻流。一位用戶點擊屏幕將協調發送到統一應用程序。如何將Raycast方向設置爲90度而不是通過相機
發送座標:
// relative coord
float x = mouse_x/1920.0f;
float y = mouse_y/1200.0f;
接收機是統一的應用程序,這改掉,使它的一個三維座標,並發現牆壁或障礙物放置的標記。
1. Attempt
// 1268 x 720 receiver viewport size
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Position.x * 1268.0f, Position.y * 720.0f, 0));
2. Attempt
// * 1268 not necessary
Vector3 far = Camera.main.ViewportToWorldPoint(new Vector3(fix.Position.x, fix.Position.y, 1));
Vector3 near = Camera.main.ViewportToWorldPoint(new Vector3(fix.Position.x, fix.Position.y, 0));
Vector3 dir = far - near;
dir.Normalize();
Ray ray = new Ray(near, dir);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo))
{
// place mark
}
兩個嘗試結果以同樣的方式。如果座標位於中心附近,那麼它也位於接收器的中心。但是它越走越邊緣,它將離它應該的位置越來越遠。圖片顯示了我的想法。紅圈是當前的行爲,綠色是我期待的。我寧願從屏幕到牆壁有90度的光線,而不是通過凸輪。 我真的不知道該怎麼辦。提前感謝您的幫助。
視口是不是*物理空間*實體,使圖你是混亂的。您需要指定一個*投影平面*距離,它是從相機位置到平面的垂直距離。你想要光線開始 – meowgoesthedog