2016-06-23 2 views
0

Unity3dでは、マウスをクリックする場所を「見る」ようにスプライトを取得しようとしています。 This similar questionは私の質問に答えていません。なぜならlibgdxのためであり、JavaではC#ではないからです。このother questionも同様ですが、Unity3dではなくXNAに関係しています。 Unityドキュメントの例オイラーとクォータニオンの回転に関するドキュメンテーションは、非インタラクティブな回転に焦点が当てられているようです。Unity3d:スプライトポイントをマウスクリックする方法は?

レイキャスティングは可能な解決策の一部である可能性がありますが、私は使用していないコライダーで最も効果的な印象を受けました。私は今、かなり困惑しており、経験豊富な人がいます。

2dスプライトで3d環境での2dクリックを処理/理解していない可能性もあります。私は、スプライトを2次元で回転させたいだけです。

もう一度、マウスの右ボタンをクリックしながらマウスの位置を取得し、GameObjectとマウスのクリックの間の角度を計算し、オブジェクトをマウスクリックでポイントします。それはマウスの位置は、カメラの視野の中心に、スプライトが唯一のポイントは写真で明らかではない、とされていないがenter image description here :mgearの答え@

using UnityEngine; 
using System.Collections; 

public class LookAtClickPoint2d : MonoBehaviour { 

    public Vector3 mousePosition; 

    private Camera cam; 

    // Use this for initialization 
    void Start() 
    { 
     cam = Camera.main; 
    } 

    // Update is called once per frame 
    void Update() 
    { 

     mousePosition = cam.ScreenToWorldPoint(Input.mousePosition); 
     Vector3 targetDir = mousePosition - transform.position; 

     if (Input.GetMouseButton (1)) 
     { 
      //transform.Rotate(targetDir); /*<---This is @joeblow's suggestion.*/ 
      /*below is @mgear's suggestion*/ 
      Vector3 perpendicular = Vector3.Cross(transform.position-mousePosition, Vector3.forward); 
      transform.rotation = Quaternion.LookRotation(Vector3.forward, perpendicular); 
     } 
    } 
} 

は私にこれを取得します。

@ joeblow's answer gets this:enter image description here スプライトがマウスの位置を指している間、それらは垂直のままではありません。そして彼らは一度動くだけです!私の質問には答えられませんでした(私は何とかユニティが3d空間でマウスの位置を解釈しようとしていると思いますが、2次元ではありません)

+0

あなたのスプライトとマウスのクリック間の水平距離をyとし、垂直距離を 'Arctan(y/x)'とすると、回転をオンにしますあなたの 'transform.rotation' – Arijoon

+1

決して、いつまでも、四元数や回転に触れることはありません。 「回転」を使って回転させるだけです。単に角度を設定したいのであれば、.eulerAngles = – Fattie

答えて

関連する問題