[Unity]:テキスチャのオフセットを動かして水面の動きを表現する

Standard Assetsに入っているWater(Basic)ではしっくり来なかったので、以下の無料アセットに含まれている水のテキスチャ(ノーマルマップ付き)を利用。

Prototype Textures by Dexsoft Games

PlaneなりCubeなり、水面にしたいオブジェクトを用意して、それに上記アセットに含まれているマテリアル「proto_water」を適用。

proto_water

このままでは動きが無いので、テキスチャのオフセットをずらして動く水面を表現する。
以下のスクリプトを作成して水面オブジェクトにアタッチする。

using UnityEngine;
using System.Collections;

public class Water : MonoBehaviour {
	void Update() {
		Vector2 offset = renderer.sharedMaterial.mainTextureOffset;
		offset.x = Mathf.Sin(Time.time * 2) * 0.01f;
		offset.y = Mathf.Repeat(offset.y - 0.001f, 1.0f);
		renderer.sharedMaterial.mainTextureOffset = offset;
		renderer.sharedMaterial.SetTextureOffset("_BumpMap", offset);
	}
}

マテリアルのテキスチャのオフセットを取得して、x,yそれぞれずらして再セットする。
ノーマルマップの方にも同じオフセットをそのままセット。

xに関しては-0.01〜0.01の範囲を約3.14秒間で往復する。
周期を変えたい場合はMathf.Sin()に与える引数を調整すると良い。
また、揺れ幅を変えたい場合はMathf.Sin()に掛けている0.01fの値を調整すると良い。

yに関しては毎フレーム0.001fずつ手前にずれるようにしてある。
本来ならdeltaTimeを使って調整すべきかもしれない。
必要無いかもしれないが、Mathf.Repeat()を使って、0.0f〜1.0fの間に収まるようにしている。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です