テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】画面外のターゲットを追跡するカーソル

今回は画面外に移動したプレイヤーを追跡するカーソルを作ってみます。

f:id:tsubaki_t1:20160426233954g:plain

画面外と画面内の判定

まず、キャラクターが画面外に移動した際の判定を行います。
やり方は色々とありますが、面倒くさいのでプレイヤーのViewPortがRect(0, 0, 1, 1)内に居るかどうかで判断してみます。

Viewport座標はスクリーン座標を0~1で正規化するので、とりあえず0以下・1以上の場合は画面外と判断出来ます。

f:id:tsubaki_t1:20160426235054g:plain

gist.github.com

アイコンにキャラクターを追跡させる

次にアイコンにキャラクターを追跡させます。
配置すべきUIの位置はRect.NormalizedToPointで画面のサイズを取得して割り出します。その際、画面外に移動したViewport座標は、Clampで0-1の範囲に抑えます。

f:id:tsubaki_t1:20160426235901g:plain

但しそのままだとUIが半分画面外に出てしまうので、UIのサイズだけRectのサイズを小さくして、UIがはみ出ないようにします。

f:id:tsubaki_t1:20160427001218g:plain

gist.github.com

追跡するアイコンにターゲットを映す

アイコンに追跡する対象を映してみます。

やり方は単純で、
まずは追跡する対象の子オブジェクトとしてカメラを持たせます。AudioSourceやGUILayer等の不要なコンポーネントは外しておくと良さそうです。また、ターゲットが映る位置に調整しておきます。

次にターゲットを表示するRenderTextureのアセットを作成しカメラに設定します。

これで、RenderTextureに常にターゲットが描画されます。
f:id:tsubaki_t1:20160427002359p:plain

あとはアイコン側の設定です。

アイコンをImageで描画していたらRawImageに変更(一旦RemoveしてAdd Component)します。後はRawImageコンポーネントのTextureに先ほど設定したRenderTextureを設定すればOKです。

丸でくりぬきたい場合は、Maskも設定します。

 

なお、RenderTextureを設定したカメラのBackgroundにアルファが設定されていると透けます。RenderTextureを使用する場合は注意です。

f:id:tsubaki_t1:20160427003355p:plain

後は対象に向けてUIを回したりする等、色々と面白い事ができるかもしれません。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp