強火で進め

このブログではプログラム関連の記事を中心に書いてます。

フィールドに投影するタイプのカーソル

この様なフィールドに投影するタイプのカーソルの作り方の解説。

青い丸がカーソルです。カーソルで指定した位置にプレイヤーの移動をさせる様なゲームで使う事を想定したカーソルです。

これは先日の「第5回 UnityのためのCGとか勉強会」で教わった方法です。とても良いアイディアだったのでここに作り方をまとめておきます。

これは「Blob Shadow Projector」を使って実装して有ります。その為、まずはProjectorsというパッケージをImportします。

次にそのImportしたものの中から「Blob Shadow Projector」というPrefabをHierarchyにドラッグします。

「Blob Shadow Projector」のInpectorを確認するとCookieという項目が有ります。これが投影される画像となります。透過したい部分はアルファで抜いている画像を準備します。

今回はこの様な青い丸の画像を使いました。白い色の部分は実際にはアルファで透過されている部分となっています。

設定は取り敢えずこの様にしておきます。

SceneにTerrainを配置→山を作成→山の斜面にカーソルが投影される位置に「Blob Shadow Projector」を移動させてみます。

この時、山の斜面に投影されたカーソルの描画が汚い場合には。「Aniso Level」の値を増やしてみて下さい。大体は2に上げる位で大丈夫だと思います。なお、ここでの変更は「Apply」ボタンを押すまで反映されないのでこまめに押しながら描画状態を確認して下さい。

このままでは投影された画像が実際のマウスカーソルの動きに追随しないので以下の様なプログラムを「Blob Shadow Projector」に追加しました。CustomCursorなど分り易いファイル名のJavaScriptファイルを作成し、「Blob Shadow Projector」に追加して下さい。

#pragma strict


function Start () {
}

function Update () {
    var hit : RaycastHit;
    var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, hit)) {
    	transform.position = hit.point + new Vector3(0, 4, 0);
    }
}

プログラムの処理としてはマウスカーソルの位置からRayを飛ばし、ヒットした位置求めます。そのヒットした位置からちょっとだけ+Y方向(ここでは 4 )の位置に「Blob Shadow Projector」の位置を移動させる事でヒットした位置にカーソル画像を投影させています。

シーンに置いてあるオブジェクトが多い場合には本来投影させたい地面以外にも投影される様な事が有ります。その様な場合には前のエントリーで紹介した投影対象から除外する設定を行なって下さい。

これで完成です。完成したものはこの様な動作となります。

なお、完全にTerrainしか使用しない場合にはRaycastを使わずにTerrain.activeTerrain.SampleHeight()で位置を取得する事も可能です。