Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

This post is Private. Only a writer or those who know its URL can access this post.

posted at

updated at

Unity発展編 〜星集めゲームを作ろう〜

はじめに

この記事では、Unityというゲーム開発エンジンを使って、「星集めゲーム」を作っていきます。具体的には、「盤面の端っこにある星をどれだけ速く集められるかを競うゲーム」です。

【このコースの全体像】
1. Unity入門編 〜インストールしてみよう〜
2. Unity基礎編 〜ボールを動かしてみよう〜
3. Unity発展編 〜星集めゲームを作ろう〜

コンテンツ

1. プロジェクトの確認

1. Unity入門編 〜インストールしてみよう〜】を参考にして環境構築・プロジェクト作成を行い、【2. Unity基礎編 〜ボールを動かしてみよう〜】にて、ボールを矢印キーで動かせるようにできていることを前提としています。

Unityで実行して、矢印キーで動かせるかまず確認しましょう。

sc45.png

2. 星オブジェクトの生成

次に、メインとなる星のオブジェクトを生成してみましょう。

今回は、簡易的に作成するために、Cubeに星のエフェクトをつけることで、星っぽさを出しました。

Hierarchy > Create > 3D Object > Cubeを選択します。
Unity発展1.png

すると、以下のようにCubeが現れると思います。

Unity発展2.png

このオブジェクトを盤面の端に動かしましょう。

私は、Position(位置)を(4, 0.5, -4)の位置に動かしました。

Unity発展3.png

3. 星エフェクトの追加

続いて、Hierarchy > Create > Effects > Particle Systemをクリックしましょう。

Unity発展4.png

すると、以下のように星が出てくると思います。

Unity発展5.png

続いて、このエフェクト(Particle System)を星オブジェクト(Cube)の中にドラッグ&ドロップで入れます。

Unity発展6.png

星オブジェクト(Cube)の中央からエフェクト(Particle System)を出したいため、エフェクト(Particle System)のpositionを(0, 0, 0)にしましょう。

Unity発展7.png

そして、以下のように自由に星エフェクト(Particle System)の設定を調整しましょう。

Unity発展9.png

最後に、星オブジェクト(Cube)の大きさを調整しましょう。

Unity発展10.png

3. ボールと星オブジェクトの接触判定の追加

続いて、ボールが星オブジェクトに触れたら消える処理を書いていきます。

まず、星オブジェクトにTagを追加していきましょう。
以下のようにCubeを選択して、Tag > Add Tagを選択します。

Unity発展11.png

すると、Tagの管理画面が出てくるため、+ボタンをクリックします。

Unity発展12.png

そして、Starと入力して、Saveをクリックします。

Unity発展13.png

すると、Starというタグが追加されたことがわかります。

Unity発展14.png

もう一度Cubeを選択して、TagをStarにします。

Unity発展15.png

以下のようにTagStarになれば、タグ付け成功です!

Unity発展16.png

タグが設定できたら、ボールオブジェクト(Sphere)において、Add Component > new script > get_star > Create and Addをして、スクリプトを生成します。

Unity発展17.png

get_star.csというファイルが以下のように生成されたら、ファイルをVisual Studioなどで開いてみましょう。

Unity発展18.png

以下のようにStarタグに触れた時、星オブジェクトを削除するというコードを書きましょう。
もしも書き終わったら、保存・ビルドをして、エラーがないか確認しましょう。

Unity発展19.png

get_star.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class get_star : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

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

    }

    void OnTriggerEnter(Collider star)
    {
        if(star.gameObject.tag == "Star")
        {
            Destroy(star.gameObject);
        }
    }
}

そしたら、当たり判定を有効にするために、Unity上で星オブジェクト(Cube)のBox Collider というComponentのIs Triggerというチェックボックスをチェックしましょう。もしもチェックが入れられたら、実行してみましょう。

Unity発展20.png

以下のように出ているオブジェクトに向かって、ボールを動かします。

Unity発展21.png

星オブジェクトが消えたら成功です!
うまく星オブジェクトを取ることができたら、停止しましょう。

Unity発展22.png

4. タイムアタック機能の作成

続いて、Hierarchy > Create > UI > Textを選択して、いきましょう。

Unity発展23.png

UIのテキストが追加されたか確認するために、一度実行しましょう。

Unity発展24.png

下部に小さなテキストが見えると思います。初めは中央から離れた場所に生成されます。

Unity発展25.png

Textのコンポーネントの設定を変えて、ちょうどいい大きさなどにしましょう。

Unity発展26.png

Add Component > new script > time_attack > Create and Addという順で、タイムアタック用のスクリプトをUIのテキストに生成して、追加します。

Unity発展27.png

以下のようにtime_attack.csというファイルが生成されているか確認しましょう。
もしも生成に成功したら、ファイルを開き、コーディングしていきましょう。

Unity発展28.png

続いて、以下のように時間に伴って、タイムが増えて、それを表示するスクリプトを書きます。

Unity発展29.png

time_attack.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class time_attack : MonoBehaviour
{
    float time;

    // Start is called before the first frame update
    void Start()
    {
        time = 0.0f;
    }

    // Update is called once per frame
    void Update()
    {
        time += Time.deltaTime;
        gameObject.GetComponent<Text>().text = time.ToString("F2");
    }
}

保存・ビルドして、エラーが出なければ、Unityで確認していきましょう。

Unity発展30.png

しっかりと時間が増えて、テキストが更新されれば成功です!

Unity発展31.png

最後に、Starタグのついたオブジェクトを全て回収したら、時間が止まるようにしたいと思います。
以下のようにコードを編集しましょう。

Unity発展32.png

time_attack.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class time_attack : MonoBehaviour
{
    float time;
    public GameObject[] starObj;

    // Start is called before the first frame update
    void Start()
    {
        time = 0.0f;
    }

    // Update is called once per frame
    void Update()
    {
        starObj = GameObject.FindGameObjectsWithTag("Star");
        if (starObj.Length != 0) {
            time += Time.deltaTime;
            gameObject.GetComponent<Text>().text = time.ToString("F2");
        }
    }
}

編集し終わったら、実行してチェックしましょう。
もしも時間がしっかりと止まれば成功です!

Unity発展30.png

5. リスタートボタンの作成

続いて、ゲームをもう一度遊ぶためのリスタートボタンを作成していきましょう。

Create > UI > Buttonから新しいボタンを追加します。

Unity発展33.png

以下のようにボタンが表示されれば成功です。

Unity発展34.png

ボタンを右下などに動かして、好きな位置に配置しましょう。

Unity発展35.png

Buttonの中のTextを選択して、文字やフォントを好きなように編集しましょう。
Unity発展37.png

リスタートボタンが押されたら、リスタートするスクリプトを生成しましょう。

Buttonオブジェクトを選択して、Add Component > new script > restart > Create and Addから新しいスクリプトを生成して、追加しましょう。

Unity発展38.png

以下のようにスクリプトが生成されたら成功です。

Unity発展39.png

次に、現在編集しているゲームのSceneを再ロードするため、Sceneの名前をわかりやすい名前に変更しましょう。
デフォルトでは、SampleSceneになっていると思います。

Unity発展40.png

これをGameSceneに変更しましょう。

Unity発展41.png

これで準備完了です。
以下のようにrestart.csを開いて、コーディングしていきましょう。

Unity発展42.png

以下のようにボタンがクリックされたら、GameSceneをリロードするというようなスクリプトを書きましょう。

Unity発展43.png

restart.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class restart : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        gameObject.GetComponent<Button>().onClick.AddListener(RestartGame);
    }

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

    }

    void RestartGame()
    {
        SceneManager.LoadScene("GameScene");
    }
}

それでは、Unityを実行して、リスタートされるか確認しましょう。

6. 星オブジェクトの複製と配置

最後に、星オブジェクトを好きな個数だけ好きな位置に配置して、完成です。
以下のようにCubeを右クリックして、Duplicateを選ぶと、複製することができます。

Unity発展45.png

以下のようにCube(1)が生成されたでしょうか?
CubeCube(1)が同じ位置にあるため、おそらくゲーム画面ではオブジェクト自体は増えているように見えないかもしれません。

Unity発展46.png

私は、以下のように3回複製しました。

Unity発展47.png

そして、以下のように重なっているため、位置を調整しましょう。

Unity発展48.png

私は以下のように4つの角に動かしました。

最後に、実行して確認していきましょう。

Unity発展50.png

もしも

  1. 星オブジェクトが複数出てきて、
  2. 全て回収して、時間がとまって、
  3. Restartボタンを押して、もう一度遊べるようになったら、

大成功です!

おわりに

お疲れ様でした!

これで、Unityコースは修了です。

ここまで取り組んでいただき、ありがとうございました。

ぜひたくさんアレンジして、面白いゲームにして、twitterなどでシェアしてくれると嬉しいです!

【このコースの全体像】
1. Unity入門編 〜インストールしてみよう〜
2. Unity基礎編 〜ボールを動かしてみよう〜
3. Unity発展編 〜星集めゲームを作ろう〜

UD-Platformとは

この記事は、UD-Platformというチームで作っています。
UD-Platformとは、「ユニバーサル・デザインによる、みんなのためのクリエイティブ工房」です。

世の中には、視覚優位や聴覚優位な人がいるように、「一人一人の学びやすい環境」があります。
そのため、多種多様な人たちにとってプログラミングなどのものづくりをしやすいコンテンツを作っています。
具体的には、Web記事・動画・印刷用テキストなどでコンテンツを作成しています。

UD-Platformのサイトは、こちらになります。

UD-Platform
ユニバーサル・デザインによる、みんなのためのクリエイティブ工房。


First_View.png

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
Help us understand the problem. What are the problem?