ぼくの息抜き

ぼくの息抜き

気ままな二人が記事を書くことで息抜きしていくブログ

CSS MenuMaker

unityゲームプログラミング 雨を降らすゲームを作るPart11 -裏で放置できるように-

f:id:bokunoikinuki:20180621201305p:plain

前回までアップグレード関連を作り込んでいたが、少し気分を変えるために、裏で放置して帰ってきた時放置した時間によって少し報酬がもらえるようになる機能を実装しようと思う。

裏で放置できるように

放置ゲームが作れる参考書。

『unityの寺小屋』の内容を参考に自分の製作中放置ゲームRainGameでも放置できるようにする。

RainGameでポイントが得られるタイミング

RainGameではParticleの雨がなにかに接触した際にRPといったポイントが手に入る。

となると今思いつくRPの加算方法は

  • 放置時間に応じてまとめて雨を降らせる
  • 放置時間に応じてRPをただ加算するだけ

Particleの雨の降る時間の間のみRPを加算する仕様にしたい。

例えば1時間雨が降るなら最大1時間分の放置ボーナスをアプリ開いた時に加算する。

どうやって放置を認識するか

unityの寺小屋を参考にするとDateTime.UtcNowを使っている。

UpdateでDateTimeをいつもTimeSpan型の変数に突っ込んで変数に突っ込む前に10秒以上の差があれば雨の降る残りの時間を最大とし、ボーナスを付与する。

	// 放置管理
	DateTime lastTime;

	// Update is called once per frame
	void Update () {


		DateTime nowTime = DateTime.UtcNow;
		TimeSpan timeSpan = nowTime - lastTime;

		// ここに放置時間に比例したボーナス加算を記述

		lastTime = DateTime.UtcNow;

これでまず起動時に前回までの時間との差を取得できる。起動時はlastTimeに今の時間を常に上書きさせ続けられるが、アプリを閉じている状態では上書きされない。

上書きされてしまうならこれではできないがいったんこれでボーナス加算の部分も記述して試してみる。

	// 放置管理
	DateTime lastTime;

	// Use this for initialization
	void Start () {

		lastTime = DateTime.UtcNow;
		
	}
	
	// Update is called once per frame
	void Update () {


		DateTime nowTime = DateTime.UtcNow;
		TimeSpan timeSpan = nowTime - lastTime;

		if (timeSpan > TimeSpan.FromSeconds (1) ){
			print ("放置しましたね");
		}

		lastTime = DateTime.UtcNow;

Start()にlastTimeに今の時間を入れないと起動時にすぐ放置しましたねと言われてしまった。

1秒以上PC上でunityの再生画面から離れると『放置しましたね』と言われるプログラムができた。なんだか怖い。ホラーゲームが作れそうだ。

	// 放置管理
	DateTime lastTime;

	// Use this for initialization
	void Start () {

		// 変数初期化
		StartGame();
		lastTime = DateTime.UtcNow;

	}
	
	// Update is called once per frame
	void Update () {


		DateTime nowTime = DateTime.UtcNow;
		TimeSpan timeSpan = nowTime - lastTime;
		//print (timeSpan);
	

		if (timeSpan > TimeSpan.FromSeconds (1) && rainTime >= 0){
			print ("放置しましたね");
			int maxIdleTime = (int)rainTime;
			if (timeSpan > TimeSpan.FromSeconds (maxIdleTime)) {
				timeSpan = TimeSpan.FromSeconds (maxIdleTime);
				print (timeSpan);
			} 
			while (timeSpan >= TimeSpan.FromSeconds (0)) {
				timeSpan -= TimeSpan.FromSeconds(10);
				rainTime -= 10.0f;
				rainPoint += 10;
				print ("RP加算しました");
			}
		}
		lastTime = DateTime.UtcNow;

 

一瞬でポイントが加算されるのが気にくわないので、あとで変更する。

  • 放置ボーナスこれくらいでした
    ⇨滑らかにRPが増える。

という感じにする。

ただ、PC上ではうまく作動した。

案外簡単だった。androidでも作動するか一旦この状態で試すとしよう。

試してみたらできた!androidでもこの方法が使えるということだ。