見出し画像

ミニゲーム集(Unity)

チーム開発実習でやりきれなかったことを今できる範囲でやりきったものが、「NUL'S GAME」という私のミニゲーム集です。

タイトル画面

チーム開発実習の時に起きたメインタイトル画面のズレは、こちらのゲーム集では起きない状態にできました。Panelを駆使したことで最大化しても自分の実行環境ではズレが起きないようになっています。

スクリーンショット 2020-09-03 12.02.00

タイトル画面前のロゴの表示の仕方もゲームっぽく表現することができました。

各ゲームについて

「NOVEL」「SWIM」「RUN」の3つのゲームを用意しました。

「NOVEL」は、ノベルゲーム・アドベンチャーゲームに分類されるものです。これは「【C#】Unity 2Dでできるだけ簡単にアドベンチャーゲーム(ノベルゲーム)を作る その1」、「uGUIでノベルゲームのようなものを作る、その1 UIの表現と文字表現」、「Unityで外部テキストを読んで表示するノベルが作りたい」の記事を参考にサンプルを作りました。ちゃんとしたものを作るには時間がかなり必要だったのでとても簡易です。

スクリーンショット 2020-09-03 12.08.33

猫耳の女の子の表情が変わるのですが、spriteでのアニメーションを作ってそれっぽくなっているだけで、言葉や時間などとは関係なく表情が変わります。本当なら画像の差し替えなども設定できるはずなのですが、調べてもわからずこういった代案となりました。

「SWIM」は、横スクロールのアクションゲームです。ユニティちゃんを使った2Dゲームの課題が出た時に作ったものを縦横比を変え、より遊びやすく改良したものです。

スクリーンショット 2020-09-03 12.13.27

ユニティちゃんを傾けて手足をジタバタさせるアニメーションにすることで泳いでるかのように見せています。スペースキーで浮上できるので地面に接地しないように操作しながら300枚あるコインのうち何枚取れるかを遊ぶゲームです。チーム開発実習の時作ったゲームの応用でコインの取得音も聞こえるようにできました。同じく応用でタイトルやリトライの為のボタンなども用意できました。

「RUN」は、これも横スクロールのアクションゲームで2Dのゲームです。思うように走らせることができず(おそらくTileMapとして作成した画像に問題があると考えています)、摩擦を減らすことで代替案としていたのですが、そのせいで左の柱にジャンプし続けると滑るように登れてしまい画面外へ出てしまうことができました。この不具合については、positonがいくつ未満ならジャンプを出来なくするとすることで対処できたと思います。

スクリーンショット 2020-09-03 12.26.25

ユニティちゃんが都内を走り回って落ちているお金を交番に届けにいく、という世界観で作りました。YouTubeの動画のように見せるためフレームをつけています。このフレームもユニティちゃんの動きに連動して動いていきます。下の真ん中にある数字は、左が経過時間で右が取得金額です。これはこのゲームのタイトル画面にハイスコアとして表示されます。

スクリーンショット 2020-09-03 12.33.15

ハイスコアはそれぞれ経過時間・取得金額の最高記録順になっているので、時間と金額は紐づけられていません。改良点のひとつであると思います。

クリア演出

3つのゲームを遊ぶとクリア画面に遷移するようにしてあるのは、チーム開発実習の時のクリア演出と同じです。

スクリーンショット 2020-09-03 12.37.54

メインタイトル画面でも追加しましたが、クリア画面にもパーティクルを飛ばして気持ち豪華にしました。クリア演出はそれが以外はほぼ変更点はありません。

「RUN」のタイトル画面のコード

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GiftyChanTitleController : MonoBehaviour
{
	public Text HiscoreTimeLabel;
	public Text HiscoreMoneyLabel;

	float step_time;
	bool isCliked = false;

	void Start()
	{
		step_time = 0.0f; //経過時間初期化
	}

	void Update()
	{
		if (isCliked == true)
		{
			//経過時間をカウント
			step_time += Time.deltaTime;
		}
		if (step_time >= 1.3f)
		{
			SceneManager.LoadScene("Stage1-01");
		}
	}
	void Awake()
	{
		ShowHiscore();
	}

	public void OnStartButtonClicked()
	{
		isCliked = true;
	}

	void ShowHiscore()
	{
		int[] moneyHiscore = GiftyGameController.GetMoneyHiscore();
		TimeSpan[] timeHiscore = GiftyGameController.GetTimeHiscore();

		HiscoreTimeLabel.text = "";
		HiscoreMoneyLabel.text = "";

		for (int i = 0; i < 3; i++)
		{
			HiscoreTimeLabel.text += timeHiscore[i].Minutes.ToString("00") + ":" + timeHiscore[i].Seconds.ToString("00") + "." + timeHiscore[i].Milliseconds.ToString("000") + "\n";
			HiscoreMoneyLabel.text += string.Format("{0:#,0} yen", moneyHiscore[i]) + "\n";

		}
	}
}

終わりに

チーム開発実習でやりきれなかったことはほとんどやることができたと思います。今回は作るのが楽しくてハマってしまった2Dゲームをメインに作りましたが、3Dゲームも色々と作って学んでいきたいと思います。

ノベルゲームもいつかちゃんとしたものを作りたいなぁと思っています。

まだまだプログラミングの勉強は続けます。まずはC#を。

良ければサポートよろしくお願いします!いただいたサポートは愛猫姉妹のごはんとおやつ代に使わせていただきます♡♡