mayonage-koboの日記

我ら真夜中ゲーム工房の進捗と、ゲーム開発のメモを残しておくブログ

Grow 背景の物体をそれっぽく動かす(2015/01/17)

hisojiです。

今回は背景を一枚絵じゃなくて複数画像でそれっぽく見せるようなことをします。(Unity 4.5.5f1)

今までは背景を素材からお借りしつつ自然を感じながら作っていたんですが、そろそろ背景を作らないといけなくなりました。
で、一緒に作ってる雀荘さんが「背景を分けましょう」みたいなことを言い出したんですね。
最近のゲームでは使われているらしいです。へー。

それでこんなものを作りました。gifで。
f:id:mayonage-kobo:20150118212552g:plain

奥行きが出ていたりするんじゃあないでしょうかたぶん。
奥の柱みたいな画像と花の画像をそれっぽく動かしてます。

どうやってしてるかというと、キャラのx軸の進み具合によって位置を変えているんですね。
ただ奥側のオブジェクトほど位置の変化を小さくしています。
理論とか分からないけど現実でも奥側の風景ほど視点の変化が小さいからじゃないんですかね、空とか。

現時点のありのままのコード。

...

public GameObject back;
public GameObject lotus;
public GameObject lotus2;
public GameObject chara;
		
void Update (){
	float x = chara.transform.position.x;
	setBack (back.transform,0.1f,x);
	setBack (lotus.transform,0.2f,x);
	setBack (lotus2.transform,0.2f,x,50);
}

void setBack(Transform t,float z,float x,float offset = 1){
	t.position = new Vector3(x - (x-offset)*z,t.position.y,t.position.z);
}

setBackという何とも言えない名前の関数でフレーム毎に新しいVector3を代入してしまいます。zが奥行きを表す係数みたいなもので、xが基準値みたいなもので、キャラのx位置。offsetがオブジェクトの実際の位置みたいな。みたいな感じです。

ただこれたくさんオブジェクト作った時どうすればいいか考えてないんですよね。どのくらい置くのかも不明ですが。
あとは実際の位置が判断しづらいです。offset*z計算すればいいけどもう少し上手い具合に書いた方がいい気がします。

そういえば背景こんな感じにグリグリ動かしてるflashがあったんですよ。もう忘れたんですが。
奥行きの層を大量につくって動かしたらそれだけでも面白そうですね。