はるのゲーム開発メモ

自分の勉強の成果などをメモ代わりにします

UnityのShader勉強6 時間を操る

お疲れ様です。

今回はTime.deltaTimeのように時間を使って動作を変えるシェーダーをおさらいします。

 

参考:

docs.unity3d.com

 

っていうか全部マニュアルに書いてあるんだよね。

まぁ知識の定着のために書こう。

 

Shader内で使える時間は

_Time ステージの読み込みからの時間:(t/20,t,t2,t3)
_SinTime 時間の正弦:(t/8,t/4,t2,t)
_CosTime 時間の余弦:(t/8,t/4,t2,t))
unity_DeltaTime デルタ時間:(dt、1/dt、smoothDt、1/smoothDt)

になります。

使い方はこれらを普通にfloatとして使うだけです。

特別なにかインクルードする必要はありません。

 

簡単にuvスクロールだけします。

前回書いたコードのvert関数を少し書き換えます。

v2f vert (appdata v)
{
	v2f o;
	float4 vec = v.vertex;
	o.vertex = UnityObjectToClipPos(vec);
	o.uv = TRANSFORM_TEX(v.texcoord, _Texture);
	o.uv.x += _Time.y;
	return o;
}

 

テクスチャがスクロールするアニメーションができました。

uv.xに時間を加算しているだけです。

xyzによって速度が変わります。目的に応じて使い分けたり、乗算してください。

 

往復したい場合は_SinTimeと_CosTimeが有効です。

そのまま使ってもよいのですが加速と減速を行っているため一定速度では往復しません。

unity_DeltaTimeについては使い道がまだわかりません。

 

メモ:

組み込み関数を使うことで、_SinTimer、_CosTimerを表現できます。

Sin(_Time.x)、Cos(_Time.x)と書くことで往復します。このようにかいてあるブログも多いのですが_SinTimer、_CosTimerを使ったほうが楽でいいと思う。

使える組み込み関数については

組み込み関数 (DirectX HLSL)

色々便利な関数があるので使っていこう。

 

終わりに

短いですが時間のおさらいでした。

組み込み関数については、あとで便利なやつをまとめてみたいです。

 

次回はステンシルです。