次にマウスの入力方法について学びます。
右中左クリックについては前のページで取り扱ったので、ここでは座標の取得について取り扱います。
まず準備です。
テスト用に別の 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)にする
まずスクリーン座標、つまりゲーム画面上に表示されているカーソルの座標をピクセル値で取得してみます。
スクリーン座標を取得するユニットは Input Get Mouse Position ユニットです。
では図1を実行してみて下さい。
これだけで座標 (x,y,z) が取得できます。
なお原点は画面左下で、右上に行くほど座標が大きくなります。
また z の値は常に 0 となりますのでご注意下さい。
ゲームオブジェクトがある空間の座標のことをワールド座標と言います。 カーソルの画面上の座標、つまりスクリーン座標が分かってもカーソルの下にあるゲームオブジェクトのワールド座標はそのままでは分かりません。
そこで Camera Screen To World Point ユニットを使ってスクリーン座標をワールド座標に変換します。
なおその際に使用しているカメラを指定する必要があります。
今回はメインカメラひとつしか使ってないので、Camera Get Main ユニットを使って指定します。
あとは Camera Screen To World Point ユニットにスクリーン座標を入力すれば OK なのですがひとつ落とし穴があります。
とりあえず以下の図2(失敗例)を実行して下さい。
多分変な値が出てくると思います。
これは Input Get Mouse Position ユニットで取得したスクリーン座標の z 座標が 0 だったことが原因で、正しく変換するためにはz 座標にカメラから測定平面までの距離を入れる必要があります(図3)。
例えば図 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 の上にカーソルを持っていって下さい。
変な座標値が表示されると思います。