次にマウスの入力方法について学びます。
右中左クリックについては前のページで取り扱ったので、ここでは座標の取得について取り扱います。


1. 準備

まず準備です。
テスト用に別の Script Graph を用意します。
さらに今回は球も 2 つシーン内に配置して下さい

Scripts フォルダの中に入り、空いている部分を右クリックしてメニューを表示し、Create → Visual Scripting → Script Graph を選ぶ
アセットフォルダ内に「New Script Graph」というアセットが出来るので「Mouse Script」に名前を変更する
ヒエラルキーの PROGRAM をクリックしてインスペクタを表示する
Script Machine の Graph の Control Script と書いてあるセルに Mouse Script をドロップする
ヒエラルキー右クリック → 3D Object → Sphere で球を新規作成し、名前を「TAMA1」、Position を (5,2,0)にする
もう一度ヒエラルキー右クリック → 3D Object → Sphere で球を新規作成し、名前を「TAMA2」、Position を (5,2,15)にする


2. スクリーン座標の取得

まずスクリーン座標、つまりゲーム画面上に表示されているカーソルの座標をピクセル値で取得してみます。

スクリーン座標を取得するユニットは Input Get Mouse Position ユニットです。
では図1を実行してみて下さい。
これだけで座標 (x,y,z) が取得できます。
なお原点は画面左下で、右上に行くほど座標が大きくなります。
また z の値は常に 0 となりますのでご注意下さい。


図1. スクリーン座標取得


3. ワールド座標への変換

ゲームオブジェクトがある空間の座標のことをワールド座標と言います。 カーソルの画面上の座標、つまりスクリーン座標が分かってもカーソルの下にあるゲームオブジェクトのワールド座標はそのままでは分かりません。

そこで Camera Screen To World Point ユニットを使ってスクリーン座標をワールド座標に変換します。
なおその際に使用しているカメラを指定する必要があります。
今回はメインカメラひとつしか使ってないので、Camera Get Main ユニットを使って指定します。

あとは Camera Screen To World Point ユニットにスクリーン座標を入力すれば OK なのですがひとつ落とし穴があります。
とりあえず以下の図2(失敗例)を実行して下さい。
多分変な値が出てくると思います。


図2. スクリーン座標をワールド座標に変換(失敗例)

これは Input Get Mouse Position ユニットで取得したスクリーン座標の z 座標が 0 だったことが原因で、正しく変換するためにはz 座標にカメラから測定平面までの距離を入れる必要があります(図3)


図3. 変換したいスクリーン座標の z にはメインカメラから測定平面までの距離を指定する

例えば図 4 を実行して下さい。


図4. スクリーン座標をワールド座標に変換(正しい例)

デフォルトではメインカメラの座標は(0,1,-10)なので、図 4 の様に Input Get Mouse Position の出力に (0,0,10) を足してあげると、z = -10 + 10 = 0 の位置にあるゲームオブジェクトの座標を正しく取得出来るようになります。
例えば TAMA1 の上にカーソルを持っていって見て下さい。
すると正しい座標 (5,2,0) が表示されると思います。

一方 TAMA2 の上にカーソルを持って行っても正しい座標は出てきません。
これはメインカメラから TAMA2 までの距離が 25 だからです。
そこで Vector3 の値 (0,0,10) を (0,0,25) に変更してから TAMA2 の上にカーソルを持っていくと正しい座標 (5,2,15) が表示されます。

なお今回はメインカメラを回転してないので簡単な計算で z の値を求められましたが、z はあくまでメインカメラから測定平面までの距離なので、実際の計算はメインカメラの Rotation の値も関わってきます。
例えばメインカメラの Rotation を(0,45,0)にしてから TAMA2 の上にカーソルを持っていって下さい。
変な座標値が表示されると思います。