2017-11-12 4 views
0

私はUnityを使用してゲームを作っていますが、少し問題があります。私はワールドスペースでマウスの位置を知る必要があります。このコードを使用してマウス位置にGameObjectを設定しようとしています。 :ワールドスペースでマウス位置を取得

Vector3 p = Input.mousePosition; 
    Vector3 pos = Camera.main.ScreenToWorldPoint(p); 
    testGameObject.transform.position = pos; 

それはエディタで魔法のように動作しますが、exeファイル/ APKで、ゲームオブジェクトがマウスに従うdosn't:

Example 1

Example 2

マウスをたどるはずのGameObjectは円の中の "1"です

+1

あなたの主な問題は、2Dと3Dの違いを理解することです。マウスカーソルは2D平面(画面平面)上を移動しているため、実際の位置は実際にはありません(実際には、画面平面に限定した3番目の座標があります)。観客の目の(想像された)点から画面上のマウスカーソルの位置まで光線を撃つと、単一の点ではなくビームが得られます。これで、シーン内のすべてのオブジェクトとそのビームの交点を計算し、そのオブジェクトを画面に最も近いものにする必要があります。これには解析的ジオメトリが含まれます。 – Psi

+0

@Psi私は実際にはわかりませんが、 'Camera.main.ScreenToWorldPoint(p);'がレイを射撃せずに最初のヒットポイントを返すと驚いています。 – George

+0

@ George AFAIKは、実際のオブジェクトであれば、シーン内のどこに位置するかのようにマウスカーソルの3D位置を返します。しかし、これは画面平面上の3次元位置です。 マウスカーソルがどこを指しているかを知りたいときは、カーソルが特定の線に沿ったすべての点(目とカーソルの間の光線、無限に広がっている点)を指していると正確に言わなければなりません。 – Psi

答えて

0

魅力のようなエディタで動作する場合は、それをビルドする必要があります。

ビルドでは既に作業していますが、画面のクリック点に合わせてyorオブジェクトを正確に配置することが望ましいかもしれませんが、オブジェクトはカメラに近すぎて見えません。

多分、カメラからの位置の深さに問題があります。 マウスの位置に深さを追加するには

Vector3 p = Input.mousePosition; 
p.z = 20; 
Vector3 pos = Camera.main.ScreenToWorldPoint(p); 
testGameObject.transform.position = pos; 

のようなものを追加してみてください。それでもまだ動作しない場合、20から-20に変更してください。

+0

すでに深度を-100から100に変更しようとしましたが、オブジェクトの可視性を変更するものは何も変更されません。 XとYの位置は常に同じです... –

+0

シーンに複数のカメラがありますか?あなたのサークルオブジェクトを配置する場所 –

+0

私は自分のシーンに1台のカメラしか持っていません。サークルオブジェクトは他のGameObjectの子です。他のGameObjectの子ではありません。 –

関連する問題