#はじめに
例えば、ゲームの作者がプレイヤーに対して
「左側にボタンあるよ! そっち向いて!!!」
と思っていたとします。
私は思いました。
なのでディスプレイに矢印を表示してプレイヤーの見る方向を誘導したいと思います。
※HTC VIVEを使って開発してます。
#スクリプト
矢印に赤い玉の方向を向いてもらうスクリプトです。
Transform.LookAt は、「あるオブジェクトの方向を向いてほしい!」という時に便利です。
矢印に下記スクリプトをアタッチして、Unityエディタから矢印の向き先となる赤い玉を指定します。
HTC VIVEの場合、矢印を [Camera Rig] 内の Camera の子階層に配置して位置を調整します。
using UnityEngine;
public class MyLookAtTarget : MonoBehaviour {
[SerializeField] private Transform target;
void Update ()
{
this.gameObject.transform.LookAt(target);
}
}
#シェーダー
カメラを動かしたとき、矢印の位置が床の奥にいったり、その他のオブジェクトの奥にいったとしても、矢印は常にカメラに表示されていてほしいです。
以下がそれを実現するシェーダーです。
シェーダー勉強中のため詳しくは語れません。コピペしたら使えるはずです。
(シェーダーで頑張らなくても、もう一台カメラを置いて、Culling Mask をいじってあげると同じようなことができるはずです。)
Shader "Costom/MyOverlayNoZTest"
{
Properties
{
_Color("Color", Color) = (1,1,1,1)
}
SubShader
{
Tags
{
"Queue" = "Overlay"
"RenderType" = "Transparent"
}
Lighting Off
ZTest Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata {
float4 vertex : POSITION;
fixed4 color : COLOR;
};
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
};
fixed4 _Color;
v2f vert(appdata IN) {
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.color = _Color;
return OUT;
}
fixed4 frag(v2f IN) : SV_Target
{
return _Color;
}
ENDCG
}
}
}
#おわりに
次回:視線誘導のための矢印をつくる②