【Unity入門】箱庭経営シミュレーションゲームの作り方 #1|プロジェクト作成から箱庭型マップ構築まで | Unity入門の森 ゲームの作り方

【Unity入門】箱庭経営シミュレーションゲームの作り方 #1|プロジェクト作成から箱庭型マップ構築まで

Unity 箱庭経営シミュレーションゲームの作り方

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この講座ではUnityを使って「箱庭経営シミュレーション」を作成していきます。

UnityとC#を使って解説を丁寧に行っていきます。プログラミングにはまだ不慣れという初心者でも最後まで完成できるようになっています。

Unityのバージョンは6.2ですがUnity6以降なら問題なく実装できるかと思います。開発環境を合わせたい方はUnity6.2をお使いください。

この記事は第1回目です。

【ゲームの作り方講座プレゼント中!】

制作する箱庭経営シミュレーションゲームの仕様について

「畑で作物を育て、収穫し、店に並べてお客さんに販売する。
売上で設備や人手を増やしながら、少しずつ経営を自動化していく」

というシンプルながらも拡張性の高い箱庭経営シミュレーションを制作します。

いわゆる農園シミュレーションゲームとも言えそうですね。

本講座では、Unityでの基本操作からAI・イベント・ログ設計までを段階的に学べる構成とし、
完成後は自由に機能追加・発展が可能な設計を目指します。

街づくりシミュレーションゲームなどを作りたい方にも役立つ内容になっています。

<ゲームの流れ>

→ 畑で作物を育てる
→ 収穫して持ち運ぶ
→ 店の棚に陳列する
→ お客さんが購入する
→ お金を獲得
→ 設備・人員を拡張
→ 妨害イベントに対応しながら経営を回す

このループを繰り返し、より効率的な経営を目指します。

<ゲームルール>

  • 畑には作物を植えることができ、時間経過で成長する
  • 作物は収穫してアイテムとして扱われる
  • 作物を棚に陳列すると、お客さんが自動的に購入する
  • 購入されると所持金が増加する
  • 所持金を使って、以下の要素を拡張できる
    • 畑の数
    • 作物の種
    • 広告を出してお客さんを増やす
    • 商品棚
    • 箱(収納)
    • 従業員
    • 妨害イベントを阻止するための殺虫スプレー

シンプルな構造ですが、

  • プレイヤー操作
  • アイテム管理
  • AI行動
  • イベント管理
  • UI・ログ設計

といった、Unityでオリジナルゲームを制作する上で非常に重要な要素を
まとめて学べる題材になっています。

それでは、まずはプロジェクトの作成と下準備から始めていきましょう。

プロジェクトの作成と初期設定を行う

UnityHubを使ってプロジェクトを作成します。

この講座ではUnityのバージョンは「6000.2.****」を使用します。バージョンはある程度違っても問題はありません。

3Dのゲームになるのでテンプレートは「Universal 3D」を選択します。

Unityエディターの初期設定を行う

まずは作業しやすくするために、Unityエディターのレイアウトを調整していきます。
レイアウトについては好みが分かれる部分でもありますので、必ずしも同じ配置にする必要はありません。
ご自身が作業しやすいと感じる配置を選んでいただいて問題ありません。

本講座では、以下のようなレイアウトを例として使用します。

Gameビューを、GIFのようにProjectウィンドウの横へドラッグ&ドロップして配置します。
あわせて、Gameビューの表示比率を「16:9 Aspect」に設定しておきましょう。

この配置にしておくことで、シーン管理とゲーム画面の確認を同時に行いやすくなり、
以降の作業がスムーズになります。

TextMeshPro(TMPro)日本語対応アセットをインポートする

まずは、TextMeshProで日本語を正しく表示するためのアセットをインポートします。
以下のリンクを開き、「Add to My Assets」を選択してください。

Selected U3D Japanese Font | 2D Fonts | Unity Asset Store

アセットがアカウントに追加されると、ボタン表示が「Open in Unity」に変わります。
そのまま「Open in Unity」を選択し、画面上部に表示される「開く」をクリックしてください。

Unityが起動すると、アセットのインポート画面が表示されますので、
内容を確認した上で「Import」を選択します。

インポートが完了したら、Package Managerのウィンドウは閉じて問題ありません。

次に、画面左上のメニューから「Edit」をクリックし、
表示された一覧の中から「Project Settings」を選択します。

Project Settingsウィンドウが開いたら、左側の項目から「TextMesh Pro」を選択し、
表示される「Import TMP Essentials」をクリックしましょう。

これはTextMeshProを使用するために必須となる基本リソースです。必ずインポートしてください。
なお、「Import TMP Examples & Extras」はサンプル用のため、本講座ではインポートする必要はありません。

インポートが完了すると、左側の項目の TextMesh Pro の下
Settings」という項目が追加されますので、こちらを選択します。

次に、画面上部にある「Default Font Asset」を
mplus-1m-medium SDF Dynamic」に設定しましょう。

この設定を行うことで、以降 Text(TextMeshPro)のUIを作成した際に、自動で日本語対応フォントが適用されるようになります。
毎回フォントを設定し直す必要がなくなり、UI制作がスムーズになります。

インポートが完了したら、Project Settingsのウィンドウは閉じて問題ありません。

使用するモデルアセットをインポートする

次に、本講座で使用するモデルとなるアセットをインポートします。
以下の2つのアセットを、先ほど日本語フォントアセットをインポートしたときと同じ手順でインポートしてください。

Human Basic Motions FREE | 3D Animations | Unity Asset Store

GameDev Starter Kit – Farming [Free Edition] | 3D Environments | Unity Asset Store

Add to My Assets」→「Open in Unity」→「開く」→「Import
という流れはこれまでと同様です。

↑ダウンロードしてそのままインポートします。

インポートが完了すると、Projectウィンドウに以下の2つのフォルダが追加されているはずです。
これらのフォルダが確認できれば、問題なくインポートできています。

Unityで経営シミュレーションゲームの舞台を作成しよう

まずは、マップ全体を管理するための空のオブジェクトを作成します。
Hierarchy ウィンドウ上で右クリックし、「Create Empty」を選択してください。

作成された空のGameObjectは、
マップとして配置するオブジェクトをまとめるための親オブジェクトとして使用します。
名前は「MapRoot」に変更しておきましょう。

作成した MapRoot の子オブジェクトとして、
さらに以下の空のGameObject(Create Empty)を作成します。

  • Field
  • Sea
  • Ground
  • Others

これらは、マップ内のオブジェクトを種類ごとに整理するためのグループです。

作成したMapRoot、Field、Sea、Ground、Others空のオブジェクトすべてのTransform Positionを0にしておきましょう。

アセットのマテリアルをURP対応用にコンバートする

次に、インポートしたアセットのマテリアルを URP(Universal Render Pipeline)対応 に変換していきます。

まずは Projectウィンドウ から
AssetHuntsl > GameDev Starter Kit – Farming > Assets > 3DTile
を選択してください。

すると、プレビュー上でモデル自体は表示されているものの、
全体がピンク色になっていると思います。

これは、元のマテリアルがURPに対応していないことが原因です。
この問題を修正していきましょう。

画面左上のメニューから 「Window」 をクリックし、
Rendering > Render Pipeline Converter を選択します。

Render Pipeline Converter ウィンドウが表示されたら、
Material Upgrade のチェックボックスをオン(有効)にします。

その後、画面下部にある「Initialize And Convert」 をクリックしてください。

これで、選択したマテリアルがURP対応のマテリアルへ自動的に変換されます。

Unityで3Dフィールドに海を作ろう

次に、マップに海を作成していきます。

まずは Projectウィンドウ から、以下のフォルダを開いてください。

AssetHuntsl > GameDev Starter Kit – Farming > Assets > 3DTile

その中にある
3D_Tile_Water_01A
というモデルを探しましょう。

見つけたら、「3D_Tile_Water_01A」をHierarchyウィンドウ内の、先ほど作成した Sea の上に
ドラッグ&ドロップしましょう。

配置できたら、Hierarchyウィンドウ内にある
3D_Tile_Water_01A」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Water_01A (29)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Water_01A」〜「3D_Tile_Water_01A (29)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

 

補足:Transform数値欄で使える「#」と、便利な書き方

#(複数選択時の連番)

  • 複数オブジェクトを選択して、欄に # を入力すると
    0,1,2,… と順番に値が入る
  • 例:# * 2 → 0,2,4,6… のように等差で入れられる
  • 例:# + 10 → 10,11,12…

公式に明記されている “複数選択で超便利” な機能

Unityの公式マニュアルで明記されているのは、主にこの3つです。

1) 線形に割り当て:L(a,b)

選択した複数オブジェクトへ、a〜bを均等配分します。

  • 例:L(0, 9) → 0,1,2,…,9(10個選択時にきれいに並ぶ)
  • 例:L(-10, 10) → -10〜10 を均等に割り当て

2) ランダムに割り当て:R(a,b)

選択した複数オブジェクトへ、a〜bの乱数を割り当てます。

  • 例:R(-5, 5) → -5〜5 のランダム値

3) 既存値をまとめて変更:+= -= *= /=

「今入ってる値に対して」一括で計算します。

  • 例:*=2 → 選択中の値を全部2倍
  • 例:+=1 → 選択中の値を全部+1

使える関数(計算式として)

数値欄では、一般的な数式と一部の数学関数が使えます。

  • 演算:+ – * /
  • べき乗:^
  • 剰余:%
  • 定数:pi
  • 関数:sqrt floor ceil round sin cos tan(三角関数はラジアン)

Hierarchyで「3D_Tile_Water_01A (1)」〜「3D_Tile_Water_01A (29)」
Shiftキーを押しながらまとめて選択します。

選択できたら、それらを「3D_Tile_Water_01A」の上にドラッグ&ドロップしてください。

これで、1列分の海タイルが
「3D_Tile_Water_01A」を親とする子オブジェクトとしてまとめられます。
同じ列のタイルをグループ化することで、後からの配置や管理がしやすくなります。

3D_Tile_Water_01A」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Water_01A (10)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Water_01A」〜「3D_Tile_Water_01A (10)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

次に、中央にフィールドを作成するため、
配置した海タイルの真ん中部分を削除してドーナツ型にしていきます。

まずはSceneビューを操作し、視点を真上に合わせてください。

その後、画面左側のツールから Rect Tool を選択します(シーンビュー左側にある上から5つ目のアイコンです)。

Rect Toolを使って、
横に5個、縦に2個分のタイルが残るように中央部分をドラッグして選択します。

選択できたら、キーボードの「Delete(DEL)」キーを押して、
選択したオブジェクトを削除しましょう。

これで、中央が空いたドーナツ型の海が完成します。

↑こんな形になればOKです。

Unityで歩ける地面を作成しよう

次に、マップの地面(グラウンド)を作成していきます。

まずはProjectウィンドウから、以下のフォルダを開いてください。

AssetHuntsl > GameDev Starter Kit – Farming > Assets > 3DTile

その中にある
3D_Tile_Ground_01
というモデルを探しましょう。

「3D_Tile_Ground_01」を、Hierarchyウィンドウ内「Ground」
ドラッグ&ドロップしましょう。

配置できたら、Hierarchyウィンドウ内にある
3D_Tile_Ground_01」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Ground_01 (19)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Ground_01」〜「3D_Tile_Ground_01 (19)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

# * 2 + 10 は、複数選択したオブジェクトを一定間隔でマイナス方向に並べるための指定です。

# は 0,1,2… の連番を表し、それを 2 倍することで間隔を作り、
さらに +10 することで全体の位置を調整しています。

わかりやすく一次関数で表すと以下のようになります
Xの位置 = 2# + 10

Hierarchyで「3D_Tile_Ground_01 (1)」〜「3D_Tile_Ground_01(19)」
Shiftキーを押しながらまとめて選択します。

選択できたら、それらを「3D_Tile_Ground_01」の上に
ドラッグ&ドロップしてください。

これで、1列分の地面タイルが
「3D_Tile_Ground_01」を親とする子オブジェクトとしてまとめられます。

3D_Tile_Ground_01」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Ground_01 (6)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Ground_01」〜「3D_Tile_Ground_01 (6)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

次に、を作成するため、
配置した地面タイルの真ん中部分を削除してドーナツ型にしていきます。

Sceneビュー右上の方位キューブをクリックして、表示が「Top」になるようにしてください。
青いZが上、赤いXが右を向いている状態が正解です。

その後、画面右側のツールから Rect Tool を選択します。

Rect Tool を使って、
左に1個、上に1個、下に1個、右に8個分のタイルが残るように中央部分をドラッグして選択します。

選択できたら、キーボードの「Delete(DEL)」キーを押して、
選択したオブジェクトを削除しましょう。

畑を作成しよう

次は、を作成していきます。

まずは Projectウィンドウ から、以下のフォルダを開いてください。

AssetHuntsl > GameDev Starter Kit – Farming > Assets > 3DTile

その中にある
3D_Tile_Ground_05
というモデルを探しましょう。

これまでに行ったグラウンドや海を配置したときと基本的な手順はほぼ同じです。
すでに流れが分かっている、まずは自分で配置に挑戦してみてください。

うまくいかなかった場合や、配置の目安が分からない場合は、
このあとで具体的な手順を一緒に確認していきましょう。

「3D_Tile_Ground_05」を、Hierarchyウィンドウ内「Field」
ドラッグ&ドロップしましょう。

配置できたら、Hierarchyウィンドウ内にある
3D_Tile_Ground_05」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Ground_05 (10)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Ground_05」〜「3D_Tile_Ground_05 (10)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

Hierarchyで「3D_Tile_Ground_05 (1)」〜「3D_Tile_Ground_05(10)」
Shiftキーを押しながらまとめて選択します。

選択できたら、それらを「3D_Tile_Ground_05」の上に
ドラッグ&ドロップしてください。

これで、1列分の畑タイルが
「3D_Tile_Ground_05」を親とする子オブジェクトとしてまとめられます。

3D_Tile_Ground_05」をクリックして選択します。

その状態で Ctrl + D を押してオブジェクトを複製し、
3D_Tile_Ground_05 (4)」が作成されるまで繰り返しましょう。

Hierarchyで「3D_Tile_Ground_05」〜「3D_Tile_Ground_05 (4)」を、Shiftキーまとめて選択します。
複数選択できたら、Inspector の Transform から、以下の項目に指定の値を入力してください。

ここまでの手順を進めて、シーンが以下のような配置になっていれば完璧です。

装飾をしよう

次に、マップに装飾を追加していきましょう。

まずは木を配置していきます。Projectウィンドウ
AssetHuntsl > GameDev Starter Kit – Farming > Assets > Plant
フォルダを開き、フォルダ内の「Plant_Pine_01」を2個、「Plant_Pine_01A」を1個
Hierarchy内の「Others」にドラッグ&ドロップしましょう。

配置した「Plant_Pine_01A」を選択し、Inspector の Transform を以下のように設定しましょう。

次に、「Plant_Pine_01」を選択し、Inspector の Transform を以下のように設定しましょう。

最後に、「Plant_Pine_01 (1)」を選択し、Inspector の Transform を以下のように設定しましょう。

次に建物を配置していきます。Projectウィンドウ
AssetHuntsl > GameDev Starter Kit – Farming > Assets > Farm House
フォルダを開き、フォルダ内の「Farm_House_Barn_01」と「Farm_House_Silo_01」を
それぞれ1個ずつHierarchy内の「Others」にドラッグ&ドロップしましょう。

配置した「Farm_House_Barn_01」を選択し、Inspector の Transform を以下のように設定しましょう。

設置した倉庫のドアを開きましょう。以下がドアのオブジェクトになります。

Farm_House_Barn_01」の子オブジェクト「House_Farm_Barn_01_Door_A」を選択し、Inspector の Transform を以下のように設定しましょう。

反対側のドア「Farm_House_Barn_01」の子オブジェクト「House_Farm_Barn_01_Door_B」を選択し、Inspector の Transform を以下のように設定しましょう。

最後に「Farm_House_Silo_01」を選択し、Inspector の Transform を以下のように設定しましょう。

では最後に雲を配置していきます。Projectウィンドウ
AssetHuntsl > GameDev Starter Kit – Farming > Assets > Cloud
フォルダを開き、フォルダ内の「Cloud_01」と「Cloud_02」と「Cloud_03」を
それぞれ2個ずつHierarchy内の「Others」にドラッグ&ドロップしましょう。

インスペクターから Cloud を Shift キーでまとめて選択し、Inspector の Transform に以下のように入力しましょう。

R(-20,70) を X に入力すると、その範囲内でランダムに配置されます。均等にバランスよく配置されるまで、何度か入力し直して調整してみましょう。

次にZ座標もランダムで配置しましょう。
インスペクターから Cloud を Shift キーでまとめて選択し、Inspector の Transform に以下のように入力しましょう。

こちらも、均等にバランスよく配置されるまで、何度か入力し直して調整してみましょう。

これによって雲がランダムに配置され、より自然に表現することができます。

今回のプロジェクトファイル

ここまでの操作を行ったプロジェクトファイルを用意しました。

プロジェクトファイルのダウンロードはこちら >>

まとめ

ここまでで、箱庭経営シミュレーションの舞台となるマップの基礎構造を作成しました。

まず、Unityのレイアウトを調整し、作業しやすい環境を整えました。
その後、TextMeshProの日本語対応設定を行い、UI制作の準備を整えました。

マップ作成では、MapRoot を親とした階層構造を用意し、
Sea / Ground / Field / Others といった用途ごとのグループに分けて管理しました。

次の講座では、プレイヤーを実際に操作できるようにしていきます。

次の記事:

【Unity6】箱庭経営シミュレーション #2|プレイヤー作成・移動スクリプト・当たり判定を実装する
この講座ではUnity6.2を使って「箱庭経営シミュレーションゲーム」を作成していきます。今回はその第2回目です。前回はアセット導入、プロジェクト設定、マップ作成などで下準備を行いました。前回の記事:第2回ではプレイヤーを作成して実際にマッ...

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

タイトルとURLをコピーしました