【Unityはじめのいっぽ】第2回 3Dのボールをキーボードで移動できるようにする方法

Unityを使って、3Dのボールを転がすシンプルなゲームを作成してみましょう。

このチュートリアルでは、床の上でボールを転がすシーンを開発します。要件定義は以下のとおりです

  1. カメラは固定します
  2. キーボードを使ってボールを操作します。
  3. ボールが床から落ちた場合、上空から再び降りてきます。

このプロジェクトは、Unityの基本的な3D操作や物理演算の仕組みを学ぶための良い機会です。これから、各ステップを解説していきますので、ぜひ挑戦してみてください。
また、前回のブログ👇もよろしければご覧ください!

【Unityはじめのいっぽ】第1回 Unityで3Dのボールを転がすプログラムを作る

 

 

  1. ボールを操作するC#スクリプト

ステージ作成(前回の内容です):

  1. Unityで新しい3Dプロジェクトを作成します。
  2. Hierarchyウィンドウで右クリックし、「3D Object」->「Plane」を選択して、床を作成します。
  3. 同様に、「3D Object」->「Sphere」を選択して、ボールを作成します。

ボール操作スクリプト(前回作った方は3のコードの修正から取り組んでください):

  1. 「Assets」フォルダ内に新しいC#スクリプトを作成し、「BallController」という名前を付けます。
  2. 作成したスクリプトをボールオブジェクトにアタッチします。
  3. スクリプトを開き、以下のコードを追加します。

 

using UnityEngine;

public class BallController : MonoBehaviour
{

//速度 public float moveSpeed = 5.0f; //ジャンプ力
public float jumpForce = 5.0f;
// Rigidbodyコンポーネントを入れる変数 private Rigidbody rb; void Start() {
// Rigidbodyコンポーネントを取得 rb = GetComponent<Rigidbody>(); } void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical");
// たてとよこのキーボード入力を取得する変数 Vector3 movement = new Vector3(moveHorizontal, 0, moveVertical);
// 入力した分だけRigidbodyに力を加える rb.AddForce(movement * moveSpeed);
// Spaceキーが押されたら && ジャンプ中じゃなければ(y軸方向の移動がなければ:2段ジャンプさせないため) if (Input.GetKeyDown(KeyCode.Space) && Mathf.Abs(rb.velocity.y) < 0.001f) {
//入力した分だけ上方向に力を加える rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); } } }

このコードでは、StartメソッドでボールのRigidbodyコンポーネントを取得しています。Updateメソッドでは、キーボード入力に応じてボールに力を加えて移動させています。さらに、スペースキーが押されたときにボールがジャンプする機能も実装しています。
なお、Input.GetAxisについても確認しておきましょう。

これで、3Dのボールが床の上を転がり、スペースキーを押すことでジャンプできるようになりました。次に、カメラの設定とボールが床から落ちた場合の処理を実装しましょう。

 

  1. カメラの設定とボールが床から落ちた場合の処理

次に、カメラを固定し、ボールが床から落ちた場合の処理を実装しましょう。

カメラの設定:

シーン内のMain Cameraオブジェクトを選択し、TransformコンポーネントのPositionとRotationを調整して、適切な視点からステージを見下ろすように設定します。

ボールが床から落ちた場合の処理:

「BallController」スクリプトを開き、以下のコードを追加します。

using UnityEngine;

public class BallController : MonoBehaviour
{
// ... 既存のコード ...

// 床から落ちた場合の再スポーン位置
private Vector3 respawnPosition;

void Start()
{
// ... 既存のコード ...

// ボールの初期位置を保存
respawnPosition = transform.position;
}

void Update()
{
// ... 既存のコード ...

// ボールが床から落ちた場合、再スポーン位置に戻す
if (transform.position.y < -10)
{
 transform.position = respawnPosition;
 rb.velocity = Vector3.zero;
}
}
}

 

このコードでは、ボールの初期位置をrespawnPosition変数に保存しておきます。Updateメソッド内で、ボールが床から一定の距離落ちた場合(ここではy座標が-10以下)、ボールを再スポーン位置に戻して、速度をゼロにリセットしています。

これで、カメラが固定され、ボールが床から落ちた場合に上空から再び降りてくる処理が実装されました。プレイヤーはキーボードでボールを操作し、床上で転がすことができます。

これで、3Dボール転がしゲームの基本的な機能が完成しました。

 

ここからはいろいろな発展ができると思います。

  • 上から落ちてくるものをキャッチする / 避ける
  • 落ちないように、空中の立体迷路を作る
  • 複数人対戦で落とし合う

などなど…

 

リクエストがあればぜひコメントなどでお知らせください。

最後までお読みいただきありがとうございました!

 

参考:Unity ユーザーマニュアル : Rigidbody

https://docs.unity3d.com/ja/2019.4/Manual/class-Rigidbody.html

\ オンラインでも体験可能! /

小中高生プログラミング無料体験

仙台のプログラミングスクール『サクール』では、実際の教室の雰囲気を体験できる無料体験教室を実施しております。普段からサクールに通っている子どもたちの隣で、簡単なゲーム制作を楽しんでいただけます。仙台市内2つの教室とオンラインで開催。所要時間は1時間程度、手ぶらでOKです。ぜひ1度ご体験ください。

無料体験予約