UnityUnityメモ

UnityでCubeを十字キーで転がそう!Rigidbodyを使った簡単チュートリアル

Unity

1.はじめに

こんにちは!今回は、Unityを使って「十字キーでCube(立方体)を動かす」というシンプルで楽しいプロジェクトに挑戦します!RigidbodyというUnityの便利な機能を使えば、誰でも簡単にオブジェクトを物理的に動かすことができるんです。

この記事では、初心者の方にもわかりやすい手順で、Cubeを自由に転がす仕組みを作り上げていきます。


この記事を通じて、以下のことを学べます:

  • Unityでの基本的な操作方法(オブジェクトの追加や設定)
  • Rigidbodyコンポーネントを使った物理演算の活用
  • 十字キーを使ったオブジェクトの動きの制御
  • 簡単なC#スクリプトの書き方

この内容をしっかり理解すれば、Unityの基本操作に自信を持てるようになるはずです。そして、将来的にはもっと複雑なゲーム開発にも応用できるスキルが身につきますよ!

それでは早速始めましょう!まずはシーンに必要なオブジェクトを追加していきます。あなたもUnityの画面を開いて、一緒に進めていきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. 必要な準備

UnityでCubeを十字キーで動かす仕組みを作るには、まず基本的な準備を整える必要があります。ここでは、Unityを始めるための環境を確認し、新規プロジェクトを作成する手順を解説します。


1. 新しいUnityプロジェクトを作成しよう

Unityのセットアップが完了したら、新規プロジェクトを作成していきます。

  1. Unity Hubを開く。
  2. [新規作成] ボタンをクリック。
  3. テンプレートの選択画面で 3D を選びます。
    • この記事では3Dオブジェクトを扱うので、必ず「3D」を選択してください。
  4. プロジェクト名を入力。
    • 例えば「CubeControllerTutorial」など、わかりやすい名前を付けると管理が楽です。
  5. 保存先を選んで、[作成] ボタンを押します。

これで新しいプロジェクトが作成され、Unityエディターが立ち上がります。


2. Unityエディターの初期設定

Unityエディターが開いたら、初期設定を確認して作業を始められる状態にしておきましょう。

  • レイアウトの確認
    • 画面が見やすいようにレイアウトを調整しましょう。Unityの右上にあるドロップダウンメニューから「Default Layout」を選ぶと、初心者でもわかりやすい画面配置になります。
  • プロジェクトウィンドウの確認
    • 画面下部に表示されるプロジェクトウィンドウでは、スクリプトやアセットの管理を行います。ここが記事で何度も登場するので、位置を確認しておきましょう。

これで準備が整いました!次は、シーンにオブジェクトを追加していきましょう。



3. シーンにオブジェクトを追加する方法

まずは、Unityのシーンにオブジェクトを配置していきましょう。今回は、Cubeを転がすための「平面」と「キューブ」を追加します。これらのオブジェクトを配置することで、操作対象と動作するためのステージを作成します。


平面(Plane)の追加

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 表示されるメニューから「3D Object」を選びます。
  3. さらにその中の「Plane」を選択します。

これで、シーンに平面が追加されます。平面はキューブが転がるステージとなります。

ポイント: 平面の位置やサイズは、特に変更する必要はありませんが、必要に応じてインスペクター(Inspector)ウィンドウで調整可能です。


キューブ(Cube)の追加

次に、キューブを追加してみましょう。

  1. 再びヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 3D Object」を選択します。
  3. 表示されたメニューの中から「Cube」をクリックします。

これで、シーンにキューブが追加されます。

ポイント: キューブの位置が平面から浮いている場合は、インスペクターで「Position」のY値を「0」に設定して平面上に配置しましょう。


確認してみよう!

シーンに平面(Plane)とキューブ(Cube)が正しく追加されているかを確認しましょう。

  1. シーンビューをドラッグしてカメラアングルを調整し、オブジェクトが見えるようにします。
  2. ヒエラルキーウィンドウを確認すると、「Plane」と「Cube」がリストに表示されているはずです。

これで、シーンの基本設定は完了です!次は、このキューブに物理的な動きを与えるために「Rigidbody」コンポーネントを追加していきます。それでは、次のステップに進みましょう!



4. Rigidbodyの追加と設定

Cubeに物理的な動きをさせるために、Rigidbodyコンポーネントを追加します。このコンポーネントを使うことで、Unityの物理エンジンを活用し、リアルな力や衝突のシミュレーションが可能になります。以下の手順に従って、Rigidbodyを追加して設定していきましょう!


① Rigidbodyを追加する方法

  1. Cubeを選択する
    ヒエラルキー(Hierarchy)ウィンドウで、先ほど追加した「Cube」をクリックして選択します。
  2. インスペクター(Inspector)を確認
    インスペクターウィンドウにCubeの詳細が表示されます。
  3. 「Add Component」をクリック
    インスペクターウィンドウの一番下にある「Add Component」ボタンをクリックします。
  4. Rigidbodyを検索して追加
    検索バーに「Rigidbody」と入力すると、候補が表示されます。表示された「Rigidbody」をクリックすると、CubeにRigidbodyコンポーネントが追加されます。

② Rigidbodyの設定を変更

Rigidbodyを追加すると、デフォルトでいくつかの設定が有効になります。今回は、質量(Mass)の値を変更してCubeの動きを調整します。

  1. Massを変更する
    • インスペクターウィンドウのRigidbody設定内に「Mass(質量)」という項目があります。
    • デフォルトでは「1」となっていますが、これを「5」に変更します。
    • 質量を大きくすることで、Cubeが受ける力に対する挙動がより鈍くなり、重さを感じる動きになります。
  2. 他の設定はデフォルトのままでOK
    • 今回は初心者向けなので、Drag(抵抗)やAngular Drag(角度抵抗)は変更しません。

③ Rigidbodyを追加するメリット

Rigidbodyを追加することで、Cubeに以下のような物理的な特性が適用されます:

  • 重力の影響を受ける:Rigidbodyを追加したCubeは自動的に地面に落ちるようになります。
  • 力を加えることができる:スクリプトで力(Force)を加えることで、Cubeを動かしたり転がしたりできます。
  • 衝突判定が有効:他のオブジェクトとぶつかったときの挙動がシミュレーションされます。

これでRigidbodyの追加と基本設定は完了です!次のステップでは、スクリプトを使ってCubeを十字キーで動かす方法を解説していきます。ここまでの操作で何か問題があった場合は、インスペクターの設定やヒエラルキー内の選択が正しいか確認してください。



5. CubeControllerスクリプトの作成

さて、Cubeを十字キーで動かすためにスクリプトを作成していきます!ここでは、UnityでC#スクリプトを作る方法と、そのスクリプトをCubeに適用する手順を詳しく解説します。


スクリプトを作成する

まずはスクリプトを作る方法から説明します。

  1. プロジェクト(Project)ウィンドウで右クリック
    プロジェクトウィンドウの空白部分で右クリックします。
  2. 「Create」→「C# Script」を選択
    メニューが表示されるので「Create」→「C# Script」を選びます。
  3. スクリプトの名前を「CubeController」に変更
    作成されたスクリプトの名前を「CubeController」に変更します。

これでスクリプトの準備が整いました!次にスクリプトの中身を編集していきます。


スクリプトにコードを入力

  1. スクリプトをダブルクリック
    プロジェクトウィンドウで「CubeController」スクリプトをダブルクリックすると、コードエディター(通常はVisual Studio)が開きます。
  2. 以下のコードを入力
using UnityEngine;

public class CubeController : MonoBehaviour
{
    public float forceAmount = 10f; // 力の大きさを調整する変数
    private Rigidbody rb; // Cubeに付けたRigidbodyを扱うための変数

    void Start()
    {
        // Rigidbodyコンポーネントを取得
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // 上矢印キーで前方に力を加える
        if (Input.GetKey(KeyCode.UpArrow))
        {
            rb.AddForce(Vector3.forward * forceAmount);
        }
        // 下矢印キーで後方に力を加える
        if (Input.GetKey(KeyCode.DownArrow))
        {
            rb.AddForce(Vector3.back * forceAmount);
        }
        // 左矢印キーで左に力を加える
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            rb.AddForce(Vector3.left * forceAmount);
        }
        // 右矢印キーで右に力を加える
        if (Input.GetKey(KeyCode.RightArrow))
        {
            rb.AddForce(Vector3.right * forceAmount);
        }
    }
}

コード全体の説明

このスクリプトはUnityのゲームオブジェクト(キューブなど)に付けることで、矢印キーを使ってキューブを動かすことができるようにします。キューブに力を加えて前後左右に移動させます。

各部分の説明

  1. クラス宣言
    • CubeControllerという名前のクラスを宣言しています。このクラスはMonoBehaviourを継承しています。MonoBehaviourはUnityでスクリプトを使うときの基本クラスです。
  2. 変数の宣言
    • forceAmountは、キューブに加える力の大きさを決める変数です。10fは初期値です。
    • rbは、キューブの物理的な動きを制御するためのRigidbody型の変数です。
  3. Startメソッド
    • Startメソッドは、ゲームが始まったときに一度だけ呼ばれます。
    • GetComponent<Rigidbody>()を使って、このスクリプトが付いているキューブのRigidbodyコンポーネントを取得し、それをrb変数に格納します。
  4. Updateメソッド
    • Updateメソッドは、毎フレーム(画面が更新されるたび)呼ばれます。
    • Input.GetKeyを使って、矢印キーが押されているかどうかをチェックします。
    • 矢印キーが押されている場合、それに対応する方向(前、後、左、右)に力を加えます。
    • rb.AddForceは、指定した方向に力を加えるメソッドです。Vector3.forwardなどは3D空間での方向を示しています。

全体の動き

  1. ゲームが始まると、キューブのRigidbodyコンポーネントが取得されます。
  2. ゲームが進行する間、毎フレームごとに矢印キーが押されているかどうかをチェックします。
  3. 矢印キーが押されている方向に、設定された大きさの力を加え、キューブをその方向に動かします。

このコードでは、十字キーの入力に応じてCubeに力を加える仕組みを実装しています。forceAmountという変数を使うことで、力の大きさを自由に調整できるようにしています。


スクリプトをCubeにアタッチ

スクリプトを書いたら、Cubeオブジェクトに適用(アタッチ)する必要があります。以下の手順を行いましょう。

  1. プロジェクトウィンドウで「CubeController」スクリプトを選択
    作成したスクリプトを見つけてクリックします。
  2. スクリプトをドラッグ&ドロップ
    ヒエラルキー(Hierarchy)ウィンドウにあるCubeオブジェクトに、スクリプトをドラッグ&ドロップします。

これでスクリプトがCubeにアタッチされました!


スクリプトが正しくアタッチされたか確認する

インスペクター(Inspector)ウィンドウでCubeオブジェクトを選択してみましょう。「CubeController」というスクリプトがリストに表示されていれば成功です。


次は再生ボタンを押して、実際に十字キーでCubeが動くか確認してみましょう!簡単な手順ですが、これでUnityのゲームオブジェクトをプログラムで操作する基本を理解できます。



6. 実行してみよう

さて、準備が整いました!いよいよ作成した仕組みを試してみましょう。以下の手順に従って、Cubeが十字キーで動くか確認してみてください。


1. ゲームを再生する

  1. Unityエディター上部にある再生ボタン(▶)をクリックします。
  2. ゲームビューに切り替わり、シーンが動作を開始します。

2. 十字キーでCubeを動かしてみる

キーボードの 十字キー(↑, ↓, ←, →) を押して、Cubeが動くか確認してみてください。

  • ↑キー:Cubeが前方に進む。
  • ↓キー:Cubeが後方に進む。
  • ←キー:Cubeが左に進む。
  • →キー:Cubeが右に進む。

Cubeがスムーズに動いたら成功です! 🎉


3. 動かない場合の確認ポイント

もしCubeが動かない場合は、以下の点を確認してください。

  • Rigidbodyが正しく追加されているか?
    • Cubeを選択し、インスペクターでRigidbodyコンポーネントが表示されていることを確認します。
  • スクリプトが正しくアタッチされているか?
    • ヒエラルキーウィンドウのCubeオブジェクトを選択し、インスペクターの下部に「CubeController」スクリプトが表示されているか確認します。
  • コードに間違いがないか?
    • CubeControllerスクリプトをダブルクリックし、コードが正しく記述されているか再確認します。
  • ゲームビューで操作しているか?
    • ゲームビューが選択されていないと、キー入力が反応しないことがあります。

4. トラブルシューティングが必要な場合

上記を確認しても動かない場合、以下の追加確認を行いましょう:

  • Input Managerの設定
    • Unityメニューの「Edit」→「Project Settings」→「Input Manager」で、「Horizontal」や「Vertical」の設定を確認してください。
  • Consoleログの確認
    • Unityエディター下部のConsoleウィンドウにエラーが出ていないか確認します。

これで、十字キーでCubeを動かす仕組みの動作確認が完了しました!次は力の大きさや操作キーを変更するなど、いろいろ試してみると面白いですよ。😊



7. 応用:さらに試してみること

さて、Cubeを十字キーで転がせるようになったところで、少し応用してみましょう!簡単なアレンジを加えるだけで、もっと面白い動きや仕組みを作れますよ。


1. 他のキーで操作を試してみる

十字キーだけでなく、他のキーでCubeを動かすこともできます。例えば、「WASDキー」で操作する場合、スクリプトを少し変更してみましょう。

void Update()
{
if (Input.GetKey(KeyCode.W))
{
rb.AddForce(Vector3.forward * forceAmount);
}
if (Input.GetKey(KeyCode.S))
{
rb.AddForce(Vector3.back * forceAmount);
}
if (Input.GetKey(KeyCode.A))
{
rb.AddForce(Vector3.left * forceAmount);
}
if (Input.GetKey(KeyCode.D))
{
rb.AddForce(Vector3.right * forceAmount);
}
}

コードを書き換えたら、再生して「WASDキー」で動くか試してみましょう!キーを使い分けることで、操作性の幅が広がります。


2. 力の大きさを調整してみる

forceAmountの値を変更して、Cubeの動きの速さや力強さを変えてみましょう。デフォルトでは「10f」に設定されていましたが、これを「5f」や「20f」にするとどうなるか実験してみてください。

スクリプトの冒頭部分を以下のように書き換えます。

public float forceAmount = 5f; // 動きを緩やかにする

再生して動きが変わったことを確認しましょう。遅く動かしたい場合は値を小さく、素早く動かしたい場合は値を大きくするのがポイントです。


3. カメラを追従させる

Cubeが動くと、カメラも動きに合わせたほうがプレイしやすいですよね。簡単にカメラ追従を追加してみましょう!

新しいスクリプトを作成して、以下のコードを入力してください。

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
public Transform cube; // Cubeオブジェクトを指定
public Vector3 offset = new Vector3(0, 5, -10); // カメラの位置を調整

void LateUpdate()
{
transform.position = cube.position + offset;
}
}
  1. カメラオブジェクトにこのスクリプトをアタッチします。
  2. インスペクターウィンドウでCubeを「Cubeオブジェクト」にドラッグ&ドロップして設定します。

これでカメラがCubeを追従するようになります!カメラの位置や距離を調整して、より見やすい視点を探してみましょう。


4. 不規則な動きで面白さを追加

ランダムに力を加えてCubeを動かすことで、ゲーム性を高めることができます。例えば、ランダムな方向に力を加える以下のスクリプトを試してみてください。

if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 randomDirection = new Vector3(
Random.Range(-1f, 1f),
0,
Random.Range(-1f, 1f)
).normalized;

rb.AddForce(randomDirection * forceAmount, ForceMode.Impulse);
}

このコードをUpdate関数に追加すると、スペースキーを押すたびにCubeがランダムに動きます。どんな方向に転がるか予測できないので、ちょっとしたミニゲームとしても楽しめますよ。


5. 物理エフェクトを追加する

さらにリアル感を追加したい場合は、Cubeがぶつかると音が鳴るように設定することもできます。「AudioSource」を追加して、音を設定してみましょう。詳細な方法は次の記事で解説しますので、ぜひチェックしてください!


これらの応用を試すことで、ただCubeを動かすだけではなく、工夫次第でさまざまなゲーム性を生み出せます。ぜひ、自分だけの楽しい動きを実現してみてくださいね!



8. まとめ

お疲れさまでした!今回のチュートリアルでは、Unityで十字キーを使ってCubeを動かす仕組みを作成しました。ポイントを振り返ってみましょう。


  • Rigidbodyの役割
    Rigidbodyを使うことで、オブジェクトに物理的な挙動を追加できることが分かりました。これを利用することで、ゲーム内でのリアルな動きを簡単に実現できます。
  • C#スクリプトでの力の操作
    スクリプトを使って、キーボード入力に応じてCubeに力を加える方法を学びました。Input.GetKeyを使うことで、キーの押下に応じた動作を制御する仕組みを作成できましたね。
  • Unityの基本操作の習得
    オブジェクトの追加、コンポーネントの設定、スクリプトの作成とアタッチといったUnityの基本的な操作を確認しました。これらは、どのプロジェクトでも必要となる重要なスキルです。

このように、シンプルな動きの実装から始めることで、Unityの基本的な使い方やC#スクリプトを使った制御方法を自然に習得できます。今回学んだ内容は、他のプロジェクトにも応用できますよ。

例えば、Cubeの代わりにキャラクターを動かすようにしたり、3D空間内でのプレイヤーの動きを制御する仕組みを作る際にも役立ちます。ぜひ、この学びを活かして、もっと複雑な動作や面白いゲームのアイデアに挑戦してみてください!

それでは、また次の記事でお会いしましょう!



よくある質問

Q
Rigidbodyが追加されていないとどうなりますか?
A

Cubeは物理的に動かず、スクリプトで力を加えることもできません。

Q
キー入力が効かない場合はどうすればいいですか?
A

スクリプトや入力設定を確認してください。特にスクリプトのタイポやInput Managerの設定が原因かもしれません。

Q
RigidbodyのMassを変えるとどう影響しますか?
A

Cubeにかかる力の挙動が変化します。Massが大きいほど動きが鈍くなります。

おすすめのアセット

「Character Controller Plus」は、Unity向けのキャラクター制御ツールキットです。このアセットは、プレイヤーキャラクターの移動やアニメーションを簡単に設定でき、滑らかな動きを実現します。特に3Dゲームに最適で、歩行、走行、ジャンプ、スライド、登攀などの動作をサポートします。また、ユニバーサルレンダーパイプライン(URP)や高精細レンダーパイプライン(HDRP)にも対応しており、高品質なグラフィックスを提供します。