はじめに
Unity初心者の方にとって、最初のゲーム制作は少しハードルが高く感じるかもしれません。でも安心してください!この記事では、Unityの基本を楽しく学べるゲーム5つを選び、それぞれステップバイステップで取り組む方法を解説します。これを読めば、Unityの基本操作から簡単なスクリプトの使い方まで一通りマスターできますよ。さあ、一緒にゲーム作りを始めましょう!
1. 最初の一歩:シンプルな「ボール転がし」ゲーム
Unity初心者の方にピッタリな「ボール転がし」ゲーム。3Dの操作やスクリプトの基礎を学べるので、最初に挑戦するゲームとしておすすめです。この記事では簡単な手順で作れるように解説します!
手順概要
以下の手順で進めれば、10~15分でシンプルな「ボール転がし」ゲームが完成します。
ステップ1:新しいプロジェクトを作成
- Unityを起動して、「New Project」をクリック。
- プロジェクト名を「Roll-a-Ball」に設定し、テンプレートを「3D」にします。
- 「Create Project」をクリックして開始します。
ステップ2:ボールを作成
- ヒエラルキー(Hierarchy)ウィンドウを右クリック。
- 「3D Object」→「Sphere」を選択。これがプレイヤー(ボール)になります。
- インスペクター(Inspector)ウィンドウで以下の設定を確認:
- Positionを「X: 0, Y: 0.5, Z: 0」に設定。
ステップ3:床を作成
- ヒエラルキーを右クリックし、「3D Object」→「Plane」を選択。これが床になります。
- 床のサイズを広げるため、Scaleを「X: 10, Y: 1, Z: 10」に設定。
- 床のPositionを「X: 0, Y: 0, Z: 0」にします。
ステップ4:Rigidbodyを設定
- ボール(Sphere)を選択。
- インスペクターで「Add Component」をクリック。
- 「Rigidbody」と検索して追加。
- これでボールに重力や物理的な動きが加わります。
ステップ5:スクリプトを作成してボールを動かす
- プロジェクト(Project)ウィンドウを右クリック。
- 「Create」→「C# Script」を選択し、スクリプト名を「PlayerController」に変更。
- スクリプトをダブルクリックして開き、以下のコードを入力:
① 最初の設定
public class PlayerController : MonoBehaviour
PlayerController
:これがスクリプトの名前。プレイヤーの動きをコントロールするクラスです。MonoBehaviour
:Unityのスクリプトでよく使うベースクラスです。このおかげで、ゲームオブジェクトにアタッチできるスクリプトになります。
② 速さの変数を作る
public float speed = 10.0f;
public float speed
:- 「プレイヤーがどれくらい速く動くか」を調整するための変数です。
10.0f
は初期値で、速さを10に設定しています。public
と書いてあるので、Unityエディター上で自由に値を変えられます!
③ FixedUpdate
メソッド
void FixedUpdate()
FixedUpdate
は、一定の時間間隔で呼ばれる特別なメソッドです。- このメソッドは物理演算に関係する処理を行うのに適しています。ここではプレイヤーを動かす処理を記述しています。
④ 入力を受け取る
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Input.GetAxis("Horizontal")
:- プレイヤーが「左右」に移動する入力を受け取ります。
- キーボードの矢印キーやA/Dキーを押すと、この値が変化します。
Input.GetAxis("Vertical")
:- プレイヤーが「前後」に移動する入力を受け取ります。
- キーボードの矢印キーやW/Sキーで値が変わります。
- それぞれの値は、-1から1の間で変化します(例:右に押すと1、左に押すと-1)。
⑤ 動きのベクトルを作る
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
Vector3
は3D空間での方向や位置を表すものです。moveHorizontal
:左右の動き。0.0f
:高さ(今回は動かないので0固定)。moveVertical
:前後の動き。
- これで「どっちに、どれくらい動くか」がわかります。
⑥ プレイヤーを動かす
GetComponent<Rigidbody>().AddForce(movement * speed);
GetComponent<Rigidbody>()
:- プレイヤーについている**Rigidbody(リジッドボディ)**というコンポーネントを取得します。リジッドボディは物理演算を使った動きに必要です。
AddForce
:- 指定した方向に力を加えます。
movement * speed
で「動きの方向」と「速さ」を掛け合わせた力を加えています。
3. コード全体の動き
このスクリプトをプレイヤーにアタッチすると、次のように動きます:
- キーボードの入力(矢印キーやW/A/S/D)で「どっちに動くか」を取得。
- 入力値に基づいて「どの方向に、どれくらい力を加えるか」を計算。
- 計算結果をリジッドボディに適用して、プレイヤーが動きます。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 10.0f;
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
GetComponent<Rigidbody>().AddForce(movement * speed);
}
}
- 保存してUnityに戻ります。
- ボール(Sphere)にスクリプトをドラッグ&ドロップしてアタッチします。
ステップ6:ゲームをテスト
- Playボタンを押してゲームを開始。
- キーボードの矢印キー(またはWASDキー)でボールを動かせることを確認しましょう。
完成イメージ
ボールが物理演算に従って動き回るシンプルなゲームです。プレイヤーが操作することで、Unityでの「動くオブジェクト」の基礎を学ぶことができます。
- 初心者の方は、オブジェクトをドラッグして配置するだけで十分楽しめます。
- スクリプトが動かない場合はエラーメッセージを確認してみてください。意外とスペルミスが多いです!
次は「スコアを稼ぐクリックゲーム」に進んでみましょう!この「ボール転がし」ゲームの応用で、さらに楽しいゲームを作れるようになりますよ。
2. 少し応用:スコアを稼ぐ「クリックゲーム」
Unityの基礎を学んだら、次は「クリックゲーム」に挑戦してみましょう!このゲームでは、クリックでスコアを稼ぐシンプルな仕組みを作ります。ゲームの見た目も楽しく、短時間で完成するので、初心者にもおすすめです。
手順概要
約20分で完成するシンプルな2Dゲームです。以下の手順に沿って進めましょう。
ステップ1:新しいプロジェクトを作成
- Unityを起動して、「New Project」をクリック。
- プロジェクト名を「ClickerGame」に設定し、テンプレートを「2D」にします。
- 「Create Project」をクリックして開始します。
ステップ2:ボタンを配置
- ヒエラルキー(Hierarchy)ウィンドウを右クリック。
- 「UI」→「Button」を選択。これでボタンが画面に追加されます。
- ボタンを中央に配置するため、Rect TransformのPositionを「X: 0, Y: 0」に設定します。
- ボタンのテキストを変更するには、ヒエラルキーのボタン内にある「Text」を選択し、インスペクターの「Text」欄に「Click Me!」と入力します。
ステップ3:スコア表示用のテキストを追加
- ヒエラルキーを右クリックして、「UI」→「Text」を選択。
- テキストを画面上部に配置するため、Rect TransformのPositionを「X: 0, Y: 200」に設定します。
- インスペクターの「Text」欄に「Score: 0」と入力。
- テキストのサイズやフォントを調整して、見やすくしましょう。
ステップ4:スクリプトを作成
- プロジェクト(Project)ウィンドウを右クリック。
- 「Create」→「C# Script」を選択し、スクリプト名を「ClickManager」に変更。
- スクリプトをダブルクリックして開き、以下のコードを入力:
① スクリプトの基盤
public class ClickManager : MonoBehaviour
ClickManager
:このスクリプトの名前です。MonoBehaviour
:Unityでスクリプトをゲームオブジェクトに付けるための基盤となるクラス。
② スコアの表示用変数
public Text scoreText;
public Text scoreText
:- UnityのUI Textコンポーネントを使って、スコアを画面に表示します。
public
としているので、Unityエディター上で対応するテキストオブジェクトをドラッグ&ドロップして設定できます。
③ スコアの管理
private int score = 0;
private int score
:- スコアを保存する変数です。
private
としているので、他のスクリプトから直接この値を変更することはできません。- 初期値は0に設定しています。
④ スコアを増やすメソッド
public void AddScore()
{
score++; // スコアを1増やす
scoreText.text = "Score: " + score; // スコアを更新して表示
}
public void AddScore()
:- このメソッドは、ボタンが押されたときに実行されます。
public
としているので、Unityエディターでこの関数をボタンに割り当てることができます。
3. 動きの流れ
- 最初の準備:
scoreText
にスコアを表示するテキストUIを設定。score
の初期値は0。
- ボタンがクリックされる:
- UnityエディターでボタンのOnClickイベントにこのスクリプトの**
AddScore
メソッド**を設定します。 - ボタンを押すたびに**
AddScore()
** が呼び出されます。
- UnityエディターでボタンのOnClickイベントにこのスクリプトの**
- スコアを更新:
- スコアが1増える(
score++
)。 scoreText.text
を更新し、画面に最新のスコアを表示します。
- スコアが1増える(
using UnityEngine;
using UnityEngine.UI;
public class ClickManager : MonoBehaviour
{
public Text scoreText; // スコア表示用のテキスト
private int score = 0; // スコアの初期値
public void AddScore()
{
score++; // スコアを1増やす
scoreText.text = "Score: " + score; // スコアを更新して表示
}
}
- 保存してUnityに戻ります。
ステップ5:ボタンにスクリプトをアタッチ
- ヒエラルキーで空のオブジェクトを作成。
- 右クリック→「Create Empty」を選び、「GameManager」に名前を変更します。
- インスペクターで「Add Component」をクリックし、「ClickManager」をアタッチ。
- ClickManagerスクリプトの「Score Text」欄に、スコア用テキストをドラッグ&ドロップします。
- ボタンを選択し、インスペクターの「On Click()」セクションに「+」をクリック。
- 「GameManager」をドラッグして追加。
- ドロップダウンリストから「ClickManager」→「AddScore()」を選択。
ステップ6:ゲームをテスト
- Playボタンを押してゲームを開始。
- ボタンをクリックすると、スコアが1ずつ増えることを確認してください。
完成イメージ
画面中央のボタンをクリックすると、上部に表示されるスコアがどんどん増えていく簡単なゲームです。スコアを増やすたびに達成感を味わえます!
- ボタンのデザインを変更することで、見た目を工夫できます。ボタンの「Image」コンポーネントで色や画像を設定してみてください。
- スコアが10に到達したら「クリア!」と表示するなど、少しずつ機能を追加すると、より楽しいゲームになります。
次はUnityのカメラ操作を学ぶ「3D迷路ゲーム」に挑戦してみましょう。この「クリックゲーム」で身につけたイベント処理の知識を、さらに広げられるはずです!
3. Unityのカメラを学ぼう:「3D迷路」ゲーム
次は「3D迷路」ゲームに挑戦!このゲームでは、Unityのカメラ操作と3D空間での移動を学びます。迷路を探索しながらゴールを目指すシンプルな仕組みですが、Unityの基本操作をしっかり身につけることができます。
手順概要
このゲームは約30分で完成します。以下の手順に沿って進めましょう。
ステップ1:新しいプロジェクトを作成
- Unityを起動して、「New Project」をクリック。
- プロジェクト名を「MazeGame」に設定し、テンプレートを「3D」にします。
- 「Create Project」をクリックして開始します。
ステップ2:迷路の床を作成
- ヒエラルキー(Hierarchy)ウィンドウを右クリック。
- 「3D Object」→「Plane」を選択して床を作成。
- 床のサイズを広げるため、Scaleを「X: 10, Y: 1, Z: 10」に設定。
- 床の位置を「X: 0, Y: 0, Z: 0」にします。
ステップ3:迷路の壁を作成
- ヒエラルキーで右クリックし、「3D Object」→「Cube」を選択。
- Cubeを選択し、Scaleを「X: 1, Y: 2, Z: 5」に設定。
- 壁を適当な位置に配置し、迷路の形を作りましょう。
- Cubeを複製(Ctrl+D)して、迷路の壁を増やします。
ステップ4:プレイヤーを作成
- ヒエラルキーで右クリックし、「3D Object」→「Sphere」を選択。これがプレイヤーになります。
- プレイヤーのサイズを少し小さくするため、Scaleを「X: 0.5, Y: 0.5, Z: 0.5」に設定。
- プレイヤーの位置を「X: 0, Y: 0.5, Z: 0」にします。
- インスペクターで「Add Component」をクリックし、「Rigidbody」を追加。
- これでプレイヤーが重力の影響を受けます。
ステップ5:カメラを追従させる
- ヒエラルキーで「Main Camera」を選択。
- カメラをプレイヤーの真上に配置。
- Positionを「X: 0, Y: 10, Z: 0」、Rotationを「X: 90, Y: 0, Z: 0」に設定。
- インスペクターで「Add Component」をクリックし、「Script」を追加。
- プロジェクトウィンドウを右クリックし、「Create」→「C# Script」を選択して「CameraFollow」と名前を付けます。
- 以下のコードを入力します:
① スクリプトの基盤
public class CameraFollow : MonoBehaviour
CameraFollow
:このスクリプトの名前で、カメラがプレイヤーを追いかける役割を持つクラスです。MonoBehaviour
:Unityの基本クラス。これにより、ゲームオブジェクトにスクリプトをアタッチできます。
② プレイヤーのTransformを取得
public Transform player;
public Transform player
:- Transformは、オブジェクトの位置や回転、大きさを表すデータ。
- この変数には、追いかける対象(プレイヤー)のTransformを設定します。
public
としているので、Unityエディター上でプレイヤーオブジェクトをドラッグ&ドロップで簡単に設定できます。
③ カメラを動かす処理
void Update()
{
transform.position = new Vector3(player.position.x, transform.position.y, player.position.z);
}
Update
メソッド:- 毎フレーム(1秒間に複数回)呼び出される特別なメソッド。
- プレイヤーの位置を常にチェックしてカメラを動かします。
transform.position
:- 現在のカメラの位置を表します。
new Vector3
を使って、新しい位置を指定します。
- 動きの仕組み:
player.position.x
:カメラのX軸をプレイヤーと同じにします。transform.position.y
:Y軸(高さ)はカメラの元の位置をキープ。player.position.z
:Z軸(奥行き)をプレイヤーと同じにします。
3. コード全体の動き
- 初期設定:
- スクリプトにプレイヤーオブジェクトのTransformを設定。
- ゲーム中:
- 毎フレームでプレイヤーの位置を取得。
- カメラの位置を更新して、X軸とZ軸をプレイヤーに合わせる。
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform player; // プレイヤーのTransform
void Update()
{
// カメラをプレイヤーに追従させる
transform.position = new Vector3(player.position.x, transform.position.y, player.position.z);
}
}
- スクリプトを保存してUnityに戻り、カメラにスクリプトをアタッチ。
- 「Player(Sphere)」をスクリプトの「Player」欄にドラッグ&ドロップします。
ステップ6:プレイヤーを動かすスクリプトを作成
- プロジェクトウィンドウを右クリックし、「Create」→「C# Script」を選択して「PlayerController」と名前を付けます。
- 以下のコードを入力します:
① スクリプトの基盤
public class PlayerController : MonoBehaviour
PlayerController
:このスクリプトの名前です。MonoBehaviour
:Unityでスクリプトをゲームオブジェクトにアタッチするための基本クラス。
② プレイヤーの移動速度を設定
public float speed = 5.0f;
public float speed
:- プレイヤーの移動速度を設定する変数です。
- 初期値は5.0fに設定されています。
public
としているので、Unityエディター上で自由に値を変更できます。
③ キーボード入力を取得
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Input.GetAxis("Horizontal")
:- 「左右方向」の入力を取得します。
- 矢印キー(←→)やA/Dキーで、-1から1の値を返します。
Input.GetAxis("Vertical")
:- 「前後方向」の入力を取得します。
- 矢印キー(↑↓)やW/Sキーで、-1から1の値を返します。
④ 移動量を計算する
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
Vector3
:- Unityで3D空間の位置や方向を表すクラス。
- ここでは「左右(X軸)」と「前後(Z軸)」の方向の動きを計算しています。
- Y軸は0固定なので、高さは変わりません。
⑤ プレイヤーを動かす
transform.Translate(movement * speed * Time.deltaTime, Space.World);
transform.Translate
:- プレイヤーの位置を移動させるメソッド。
- 第一引数:移動する量(動きの方向 × 速度 × 時間)。
- 第二引数:
Space.World
は「ワールド座標」に基づいて動かすことを指定しています。
Time.deltaTime
:- フレーム間の経過時間を使って、移動を「時間に依存」させています。
- これにより、フレームレート(ゲームの動きの滑らかさ)が変わっても、プレイヤーの動く速さが一定になります。
3. コード全体の動き
- 速さを設定:
speed
を使って、プレイヤーの移動速度を決定します。
- 入力を取得:
- 矢印キーやW/A/S/Dキーの入力を取得し、プレイヤーの動く方向を計算します。
- 移動を実行:
- 毎フレーム(
Update
メソッド)でプレイヤーの位置を更新し、指定した方向に動かします。
- 毎フレーム(
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5.0f;
void Update()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
transform.Translate(movement * speed * Time.deltaTime, Space.World);
}
}
- スクリプトを保存してUnityに戻り、プレイヤー(Sphere)にドラッグ&ドロップしてアタッチします。
ステップ7:ゴール地点を作成
- ヒエラルキーで右クリックし、「3D Object」→「Cube」を選択。
- ゴールの位置を迷路の奥に配置し、Scaleを「X: 2, Y: 0.5, Z: 2」に設定。
- ゴールの色を目立たせるため、マテリアルを作成して適用します。
ステップ8:ゲームをテスト
- Playボタンを押してゲームを開始。
- 矢印キー(またはWASDキー)でプレイヤーを操作し、迷路を抜けてゴールを目指しましょう。
完成イメージ
3D迷路を探索してゴールにたどり着くゲームが完成しました!Unityのカメラ操作とプレイヤーの移動の仕組みを学ぶ良いステップです。
- カメラの視点を変えると、迷路の見え方が変わるので、複数のカメラを使ったり切り替えたりする機能を追加してみても楽しいです。
- ゴールに触れたときに「クリア!」と表示させるスクリプトを作るのもおすすめです。
次は「2Dランナー」ゲームで、スプライトアニメーションやジャンプの仕組みを学びましょう。この迷路ゲームの学びを応用して、さらに楽しいゲームを作れるようになります!
4. スプライトアニメーションの基礎:「2Dランナー」ゲーム
「2Dランナー」ゲームでは、スプライトアニメーションやジャンプ機能を学びます。このゲームを通じて、Unityの2Dツールの使い方やキャラクターアニメーションの設定を理解できるようになります。キャラクターが障害物をジャンプで避けながら走るシンプルなアクションゲームを作ってみましょう!
手順概要
このゲームは約30~40分で完成します。以下の手順に従って進めましょう。
- キャラクターのスプライトを変更することで、見た目のバリエーションが増やせます。
- 障害物の種類や速度を変えることで、ゲームの難易度を調整してみましょう。
次は「簡単なシューティングゲーム」で、発射物の生成や敵の配置を学びましょう。このランナーゲームで学んだアニメーションの知識を活かして、さらに楽しいゲームを作りましょう!
5. やってみよう:簡単な「シューティング」ゲーム
ここでは、Unityで簡単な「シューティングゲーム」を作ります。プレイヤーが弾を発射して敵を倒す仕組みを学べるので、Unity初心者にもおすすめです。このゲームを通じて、発射物の生成や敵との当たり判定、ゲームの基本的なロジックを学びましょう!
手順概要
約40~50分で完成するシンプルなゲームです。以下の手順に沿って進めてみましょう。
- 敵をランダムに出現させる仕組みを追加すると、さらにゲーム性が高まります。
- スコア表示やライフシステムを加えると、より完成度の高いゲームになります。
今回作ったシューティングゲームを応用して、より複雑なゲームを作ってみましょう。たとえば、ボスキャラやパワーアップアイテムを追加するのも楽しいアイデアです!
6. Unity Asset Storeの活用してみる
Unity Asset Storeには、初心者からプロまで使える素晴らしいアセットが豊富にそろっています。特に初心者向けには、以下のようなアセットが役立ちます:
- Starter Kit:必要な素材が一式揃ったお得なパッケージ。
- キャラクター素材:アニメーション済みのキャラクターで即ゲームに使用可能。
- 音素材:BGMや効果音を加えるだけで、ゲームの完成度がぐっと上がります。
無料アセットもたくさんありますが、有料アセットはデザインの完成度が高く、時間を大幅に節約できます。初心者のうちに導入しておくと、スムーズにゲームを進められるのでおすすめです。
まとめ
Unity初心者が最初に挑戦するゲーム制作として、この記事でご紹介した5つのゲームは、どれも楽しく学びながらスキルを身につけられるものばかりです。初めてのゲーム作りは少し不安かもしれませんが、簡単なところから少しずつステップアップしていけば、必ず自信がついてきます!
「もっと詳しく学びたい」「プロのサポートを受けながら本格的にゲーム開発をしてみたい」と思ったら、バンタンゲームアカデミーの資料請求をしてみるのもおすすめです。Unityを使った本格的なゲーム開発や、プロの講師からの直接指導が受けられる学習環境が整っています。資料請求は無料なので、興味がある方はぜひチェックしてみてください!
夢のゲームクリエイターへの一歩を踏み出して、楽しみながらスキルを磨いていきましょう!😊
よくある質問(FAQ)
- QUnityの基本操作がわかりません。どうすればいいですか?
- A
Unityの公式チュートリアルやYouTube動画を活用するのがおすすめです。この記事でも簡単な操作を説明しているので参考にしてください。
- Qスクリプトを書くのが不安です。難しくないですか?
- A
最初はコピー&ペーストでも大丈夫!コードを書くたびに少しずつ覚えられるので安心してください。
- Qゲームを作っているとエラーが出ます。どうすればいいですか?
- A
エラーの内容をよく読み、わからない場合はGoogle検索を活用しましょう。「Unity エラー メッセージ」で検索すると解決策が見つかります。