Unityで「もぐらたたきゲーム」を作ってみる1

Unityさっぱりわからん。

そもそもわからん

わからないことを、たまたま近くにいたおじさんに質問して見た。(おじさん is @monry

  • オブジェクトを置く、この世界をなんていうんだ
    • monry said: レベルと言う
  • SceneにまたがったGameObjectの配置ってどうやんの
    • ppworks said: Scene切替時でもGameObject等を破棄せずに保持しておく方法 - Qiita」を見つけましたよ。
    • monry said: DontDestroyOnLoadでやるのはありだけど、専用シーンが出来上がって管理しづらい。
    • monry said: うちのプロジェクトではSceneManager.LoadScheneの第二引数でLoadSceneMode.Additiveを渡す作戦を使っている。Sceneが合成されるイメージ。いわゆるモーダル表示みたいなことをしたいときにはこれ!
    • ppworks said: ところで、Sceneごとにカメラが置いてあるけど、合成された時はどうすんの?
  • 2Dで、Spriteのスケール設定は、Spriteの設定にあるPixels Per UnitGameObjectTransformScaleでやるのどっちがいいの?
    • monry said: Scaleは階層構造の配下のGameObjectにも影響するから避けたい。
    • monry said: そもそも、2Dは、GUIで構築しちゃうと言う手も
    • ppworks said: な、なんだってー!!!その発想はなかったでござるよ。にんにん。
  • カメラの画角計算がわからん。カメラに写る範囲にぴったり置きたい。たとえば、最初から置いてあるMain Cameraをz: -10の位置においたとき画面に描写される範囲の計算方法は?
    • ppworks said: Unity - Manual: CameraからリンクされているUnity - Scripting API: Camera.orthographicSizeに書いてあった。Camera's half-size when in orthographic mode.な。
    • ppworks said: orthographicモードにしている際のsizeに縦方向の半分に収めるunit数を入れてやればいい。
    • ppworks said: 例えば、16:9の画面のカメラにピッタリ16unit x 9unitを写したければ、4.5と入力する。
  • Build Setting
    • ppworks said: 追加したsceneしか使えない?
    • monry said: そうそう。プロジェクトに含まれるすべてのものがビルド対象というわけではない。ここで指定したシーンに含まれるものがビルド対象となるので、気をつけて。

ほう。@monry便利。

設計してみる

  • レベル上に登場するGameObject
    • 背景などのハリボテ
      • 各Sceneを通じて、最初に用意したらとっておきたい
    • Prefab
      • もぐら
        • 穴からもぐらが出てくるアニメーションを持つ
        • 3種類ぐらいいる(猫、おじさん、もんりぃ)
  • シーン
    • トップ
      • 処理
        • ワールドの準備
      • UI
        • ゲーム開始ボタン
        • レコード表示ボタン
    • ゲーム
      • 処理
        • ゲーム開始
        • ユーザーの操作イベントを受付開始
        • もぐらをランダムに生成する
        • タイマーのセット
        • スコアの記録
        • 終了イベントを検知して
          • レコードを記録
          • ゲームを終了し結果へ移動
            • UI
        • 残り時間表示
        • スコア表示
    • 結果
      • UI
        • 得点の表示
        • タイトルへ戻るボタン
        • 再度ゲーム開始ボタン
    • レコード
      • 処理
        • 過去のレコードを表示
      • UI
        • レコード表示リスト
        • トップへ戻るボタン

2Dゲームなので、GUIですべて対応できる予感もするけど、今回はあえてハリボテのSpriteを配置して作ってみようかな。

ソース

MainSceneController.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MainSceneController : MonoBehaviour {

void Start () {
Debug.Log ("Hi, I'm MainScene!!!");
}

void Update () {

}
}

TitleSceneController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class TitleSceneController : MonoBehaviour {
// https://qiita.com/momomo/items/f8c16004123f38e86fc0 を参考に変更する!
public Button startButton;
public GameObject background;

void Start () {
Button button = this.startButton.GetComponent<Button>();
button.onClick.AddListener(ClickStartButton);

DontDestroyOnLoad (this.background.transform.gameObject);
}

void Update () {
}

void ClickStartButton() {
Debug.Log("You have clicked the button!");
SceneManager.LoadScene ("scenes/MainScene");
}
}

今回は、Unityの概念の謎を調べたり試行錯誤して、設計をしただけで終わってしまった。