【Unity】画面外のターゲットを追跡するカーソル
今回は画面外に移動したプレイヤーを追跡するカーソルを作ってみます。
画面外と画面内の判定
まず、キャラクターが画面外に移動した際の判定を行います。
やり方は色々とありますが、面倒くさいのでプレイヤーのViewPortがRect(0, 0, 1, 1)内に居るかどうかで判断してみます。
Viewport座標はスクリーン座標を0~1で正規化するので、とりあえず0以下・1以上の場合は画面外と判断出来ます。
アイコンにキャラクターを追跡させる
次にアイコンにキャラクターを追跡させます。
配置すべきUIの位置はRect.NormalizedToPointで画面のサイズを取得して割り出します。その際、画面外に移動したViewport座標は、Clampで0-1の範囲に抑えます。
但しそのままだとUIが半分画面外に出てしまうので、UIのサイズだけRectのサイズを小さくして、UIがはみ出ないようにします。
追跡するアイコンにターゲットを映す
アイコンに追跡する対象を映してみます。
やり方は単純で、
まずは追跡する対象の子オブジェクトとしてカメラを持たせます。AudioSourceやGUILayer等の不要なコンポーネントは外しておくと良さそうです。また、ターゲットが映る位置に調整しておきます。
次にターゲットを表示するRenderTextureのアセットを作成しカメラに設定します。
これで、RenderTextureに常にターゲットが描画されます。
あとはアイコン側の設定です。
アイコンをImageで描画していたらRawImageに変更(一旦RemoveしてAdd Component)します。後はRawImageコンポーネントのTextureに先ほど設定したRenderTextureを設定すればOKです。
丸でくりぬきたい場合は、Maskも設定します。
なお、RenderTextureを設定したカメラのBackgroundにアルファが設定されていると透けます。RenderTextureを使用する場合は注意です。
後は対象に向けてUIを回したりする等、色々と面白い事ができるかもしれません。
画面外にあるターゲットを追跡するアイコン pic.twitter.com/RSQRfVt4fV
— 椿 (@tsubaki_t1) 2016年4月25日