libro
www.tuyano.com
C#ではじめるUnityプログラミング入門

マウス操作とスクリーン座標 (2/4)

作成:2014-09-15 09:49
更新:2014-09-15 09:49

■マウスの位置とスクリーン座標

続いて、マウスポインタの位置についてです。マウスポインタの位置も、Inputクラスのメソッドで得ることができます。「mousePosition」というプロパティです。
Vector3 変数 = Input.mousePosition;
このようにして、現在のマウスの位置をVector3インスタンスとして取り出すことができます。この中からxとyの値を取り出せばいいわけですね。

問題は、こうして取り出される値は、シーン上の位置ではない、という点です。これは、「スクリーン上の位置(スクリーン座標)」なのです。

Unityのマウス位置で注意すべきは、「マウスポインタは、シーン空間の中にはない」という点です。シーンは3次元空間ですが、それが実際に表示されるスクリーンは2次元であり、この2次元平面上にマウスポインタはあります。ですからmousePositionで得られるVector3は、シーンの3次元空間上にある位置を示すものではない、という点に注意する必要があります。


■GUITextにマウス位置を表示する

実際に、mouseuPositionの値を確認してみましょう。シーンに、GUITextを1つ作成して下さい。Unity 4.5までは<GameObject>メニューから作成できます。Unity 4.6は、<GameObject>メニューから<Create Empty>で空のゲームオブジェクトを作り、これを選択して<Component>メニューの<Rendering>から<GUIText>を選んで組み込みます。作成したGUITextゲームオブジェクトの名前は「message」に変更し、表示位置やフォントサイズ、カラーなどを調整してうまく画面にテキストが表示されるようにしておきましょう。

下のリストは、マウスポインタの位置を調べて、「messageguiTextに表示するものです。ここでは以下のようにしてマウスポインタの位置を表示しています。

・まず、Input.mousePositionの値をVector3変数に取り出し、その中のx, yの値を調べてテキストにまとめます。

GameObject.Findメソッドを使い、GUITextのゲームオブジェクトを取り出します。このFindは、引数に指定した名前のゲームオブジェクトを検索して返すものです。

GUITextコンポーネントのオブジェクトは、ゲームオブジェクトの「guiText」プロパティで得られます。また表示されているテキストは、そのオブジェクトの「text」プロパティで設定されます。

GameObject.Findで取り出したゲームオブジェクトのguiText.textにテキストを設定すれば、マウスポインタの位置情報が表示されます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

    void Update () {
        transform.Rotate(1,1,1);
        Vector3 pos = Input.mousePosition;
        string res = "x:" + pos.x + ", y:" + pos.y;
        GameObject msg = GameObject.Find("message");
        Debug.Log(msg);
        msg.guiText.text = res;
    }

※関連コンテンツ

「C#ではじめるUnityプログラミング入門」に戻る