UnityUnityメモ

Unity初心者向け!板を回転させてボールを操作する方法

Unity

1. はじめに

Unityを使ったゲーム開発の第一歩として、今回は物理シミュレーションの基本を学べるシンプルなプロジェクトを紹介します。このプロジェクトでは、板(Board)を左右のキーで回転させ、その上に置かれたボール(Ball)を操作します。

物理エンジンを使ってボールを転がしながら遊べる仕組みを作ることで、Unityの基本操作やスクリプト作成の基礎を楽しく学ぶことができます。初心者にも理解しやすいよう、手順を一つひとつ詳しく解説していきますので、ぜひ一緒に挑戦してみてください!


この記事を読み終える頃には、以下のスキルを身につけることができます:

  • Unityの3Dオブジェクトの作成と編集
  • Rigidbodyコンポーネントを使った物理設定
  • 簡単なスクリプトを作成し、オブジェクトに動きを加える方法

Unityをこれから始める方にとっても最適な内容になっています。それでは早速、プロジェクトの作成に取り掛かりましょう!

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



2. Unityで板とボールを作成する

Unityで板を回転させてボールを操作するには、まずシーン内に板(Board)とボール(Ball)を作成しましょう。これらを簡単な手順で作成し、それぞれ必要な設定を加えていきます。


板の作成

  1. Cubeの作成
    ヒエラルキーウィンドウ内で右クリックし、「3D Object」→「Cube」を選択します。このCubeが板になります。
    名前を「Board」に変更して、後でわかりやすく管理できるようにしましょう。
  2. 板の形状を調整する
    インスペクターウィンドウで以下のように「Transform」の「Scale」を設定します:
    • X: 8
    • Y: 0.2
    • Z: 3
      この設定により、板のような形状になります。
  3. Rigidbodyの追加
    板がUnityの物理エンジンで動作するようにするため、「Rigidbody」コンポーネントを追加します:
    • インスペクターウィンドウの「Add Component」をクリックし、「Rigidbody」を検索して追加します。
    • Rigidbodyの「Is Kinematic」にチェックを入れて、板が物理的に動かないようにします。

これで板の作成は完了です!


ボールの作成

  1. Sphereの作成
    再びヒエラルキーウィンドウ内で右クリックし、「3D Object」→「Sphere」を選択します。このSphereがボールになります。
    名前を「Ball」に変更しておきましょう。
  2. ボールの配置
    ボールを板の上に置きます。インスペクターウィンドウの「Transform」の「Position」を次のように設定します:
    • X: 0
    • Y: 0.6
    • Z: 0
      これでボールが板の中央に乗るようになります。
  3. Rigidbodyの追加
    ボールが重力や衝突の影響を受けるように、「Rigidbody」コンポーネントを追加します:
    • インスペクターウィンドウの「Add Component」をクリックし、「Rigidbody」を検索して追加します。

これでボールの作成も完了です!


次は、この板を左右のキーで回転させるスクリプトを作成していきます!準備が整ったので、いよいよプログラミングに進みましょう。



3. 板を回転させるスクリプトの作成

さて、板を左右に回転させるためのスクリプトを作成しましょう!このスクリプトを通じて、Unityでのプログラミングの基本を学ぶことができます。以下の手順を参考に進めてみてください。


1. スクリプトを作成する

まずはスクリプトファイルを作成します。以下の手順で行いましょう。

  1. プロジェクトウィンドウで右クリックします。
  2. 「Create」→「C# Script」を選択します。
  3. スクリプトの名前を 「BoardRotate」 とします(他の名前でも構いませんが、一致させると説明がスムーズです)。

作成したスクリプトをダブルクリックして開きます。すると、Visual Studioや他のコードエディタが開きます。


2. コードを入力する

スクリプトを開いたら、以下のコードを入力してください。このコードは、左右キー(Arrowキー)を押すことで板が回転する仕組みを実現します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoardRotate : MonoBehaviour
{
    void Update()
    {
        // 右キーを押したときに板を時計回りに回転
        if (Input.GetKey("right"))
        {
            transform.Rotate(0, 0, -0.5f);
        }

        // 左キーを押したときに板を反時計回りに回転
        if (Input.GetKey("left"))
        {
            transform.Rotate(0, 0, 0.5f);
        }
    }
}

3. スクリプトを板(Board)にアタッチする

スクリプトを書き終えたら、Unityエディタに戻ります。以下の手順でスクリプトを板にアタッチしてください。

  1. ヒエラルキーウィンドウで「Board」を選択します。
  2. プロジェクトウィンドウで作成したスクリプト「BoardRotate」を見つけます。
  3. 「BoardRotate」スクリプトをドラッグして「Board」にドロップします。

これでスクリプトが「Board」にアタッチされました。


4. コードのポイント解説

このスクリプトでは、Update メソッド内でキー入力を監視しています。

  • Input.GetKey("right")
    右キーが押されている間だけ動作します。
  • transform.Rotate(0, 0, -0.5f)
    オブジェクトの回転を制御するコードです。-0.5f の値を変えると回転速度が変わります。

以上で板を回転させるスクリプトの作成は完了です!次はボールがしっかり動くかテストしてみましょう!



4. テストプレイと調整

ここまでの設定とスクリプトが完了したら、実際にプロジェクトをテストしてみましょう。


シーンを再生する

  1. Unityエディターの上部にある「▶(再生ボタン)」をクリックして、シーンを再生します。
  2. キーボードの 左右キー を押して、板が左右に回転するか確認しましょう。
  3. ボールが板の上で転がる様子を観察します。物理挙動がリアルに反映されていれば成功です!

動作が期待通りでない場合のデバッグ

もし何か問題が発生した場合は、以下のポイントを確認してください:

  1. 板が回転しない場合
    • 「Board」にスクリプトが正しくアタッチされているか確認してください。
    • スクリプト内のコードにエラーがないかチェックします。特に、Input.GetKey("right")transform.Rotate() が正しく記述されているか確認してください。
    • スクリプトを保存し忘れていないかもチェックしましょう。
  2. ボールが落下してしまう場合
    • 「Board」のRigidbodyの設定で Is Kinematic がオンになっているか確認します。
    • 「Ball」が「Board」の上にしっかり配置されているか(PositionのY値)を再確認してください。
  3. ボールが動きすぎて制御が難しい場合
    • 「Ball」のRigidbodyに適用される摩擦や質量(Mass)を調整してみましょう。これらの値はインスペクターで確認できます。
    • 必要に応じて物理マテリアルを設定し、摩擦の強さを調整すると滑りにくくなります。
  4. 板が回転しすぎる場合
    • スクリプト内の回転速度の値(例: -0.5f0.5f)を調整して、回転を遅くすることができます。

改善のヒント

  • ボールが板から落ちないように、板の両端に小さな壁を作成することもできます。
  • 板の回転に慣れたら、さらに難易度を上げるために障害物を追加してみましょう。

以上でテストプレイと調整は完了です!Unityの物理シミュレーションの基礎を学ぶための楽しいプロジェクトとして、さらに改良を加えてみてください。



よくある質問 (Q&A)

Q
ボールが落下してしまうのはなぜですか?
A

ボールが落下する主な原因は、板やボールのRigidbodyやColliderの設定に問題がある場合です。以下を確認してみましょう:

  • ボールと板の両方に Collider が適用されているか確認してください。片方にColliderがないと衝突判定が行われず、ボールがすり抜けてしまいます。
  • 板に追加した RigidbodyIs Kinematic がオンになっていることを確認してください。これにより、板は物理演算の影響を受けず、ボールを支えられるようになります。
Q
板が回転しない場合は?
A

板が回転しない場合、スクリプトや入力設定に問題があるかもしれません。以下を確認してください:

  • 作成したスクリプトが正しく「Board」にアタッチされているか確認してください。
  • スクリプト内のコードにエラーがないかチェックしましょう。特にキー入力の部分(Input.GetKey)が正しいか確認してください。
  • Unityの Edit > Project Settings > Input Manager で、キー設定が変更されていないかを確認してください。デフォルトでは「left」や「right」キーが正しく動作するはずです。
Q
ボールが滑らかに動かないと感じる場合は?
A

ボールの動きが滑らかでない場合、以下のポイントを調整してみてください:

  • ボールの Rigidbody に設定されている Drag(抵抗値)を小さくしてみましょう。これにより動きが軽くなります。
  • Physics Material を使用して摩擦を調整することもおすすめです。板やボールのColliderに適用し、滑らかさをカスタマイズできます。
  • Unityの Time Settings で「Fixed Timestep」の値を確認し、適切に設定してください。一般的には0.02秒程度が良いですが、シミュレーションがぎこちない場合は小さくすることで改善します。

おすすめのアセット

「3D Balls Pack」は、複数のスポーツやゲームに使用できる3Dボールのコレクションです。サッカーボールやバスケットボール、ビリヤードボールなど、様々なタイプのボールが含まれており、リアルでディテールにこだわったデザインが特徴です。このアセットはUnityのBuilt-in Render Pipelineに対応しており、シンプルなプロジェクトからハイエンドなプロジェクトまで幅広く利用できます。初心者でも簡単に導入できるので、スポーツゲームやシミュレーションに最適です。