3Dプロジェクトに問題があります。目的を説明するのはかなり複雑ですので、私はそれを抽象的に最小限にしようとしています。 私はフルスクリーン(1920 x 1200)にするユニティプログラムのライブビデオストリームを持っています。 1人のユーザがスクリーンをクリックしてコーディネートを統一アプリに送る。カメラではなくレイキャスト方向を90度に設定する方法
送信COORDS:
// relative coord
float x = mouse_x/1920.0f;
float y = mouse_y/1200.0f;
受信機は、3Dがそれの座標を作るためにtrys壁やマークを配置する障害物を発見統一アプリケーションです。
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