UnityUnityメモ

Unity初心者向け!キューブが壁に沿って動く簡単スクリプト作成ガイド

Unity

1. はじめに

こんにちは!Unity初心者のみなさん、ゲーム制作を楽しんでいますか?
今回は、Unityで「キューブが別のキューブの外壁に沿って動く」という、見た目も楽しく、学びもたくさんある機能を作ってみましょう!

「外壁に沿って動くオブジェクト」と聞くと少し難しそうに思えるかもしれませんが、心配しないでください。この機能は、Unityの基本的な操作やC#スクリプトの使い方を学ぶ絶好のチャンスです。初心者でもわかりやすいように、具体的な手順をひとつずつ丁寧に解説します。


この記事を通して学べることは次の3つです:

  1. Unityエディタを使ってシーンをセットアップする方法。
  2. C#スクリプトを作成してオブジェクトを動かす基本。
  3. Unityの「Transform」を使ったオブジェクトの動きの仕組み。

シンプルな操作と少しのスクリプトで、驚くほど楽しい機能が完成します。一緒にUnityの世界を広げていきましょう!

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



2. 必要な準備

Unityで「キューブが別のキューブの外壁に沿って動く」機能を作るには、事前にいくつかの準備をしておく必要があります。以下の手順に従って環境を整えましょう。


新しいプロジェクトを作成する

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

  1. Unity Hubを起動
    Unity Hubを開き、プロジェクトタブで「新しいプロジェクト」をクリックします。
  2. テンプレートの選択
    「3D」を選択してプロジェクトを作成します。プロジェクト名はわかりやすい名前(例: CubeWallMove)をつけましょう。
  3. 保存先を選択
    プロジェクトを保存するフォルダを選び、「作成」をクリックします。
  4. Unityエディターが開く
    数秒待つとUnityエディターが開き、編集ができる状態になります。

事前の注意点

  • バージョンの確認
    本記事では、Unity 2021.3以降のバージョンを使用することを想定しています。古いバージョンでは一部の機能が異なる場合があります。
  • 操作環境
    WindowsまたはMacの環境で進めることを推奨します。キーボードとマウスがあると操作がスムーズに進みます。

以上の準備が整えば、いよいよUnityでのシーンセットアップを始める準備が完了です!次のステップでは、実際にキューブを作成し、動きを設定していきます。準備がまだ終わっていない方は、このセクションを参考に環境を整えてくださいね!



3. シーンのセットアップ

ここでは、「キューブが外壁に沿って動く機能」を作るために、Unityで必要なシーンをセットアップします。基本的な操作なので、初心者の方でも安心して進められますよ!


1. 基礎となるキューブ(壁)の作成

  1. Cubeを作成
    • Unityエディタのヒエラルキー(Hierarchy)ウィンドウで右クリックします。
    • メニューから「3D Object > Cube」を選択します。
    • シーンビューにCubeが作成されます。
  2. サイズ(Scale)の調整
    • 作成したCubeを選択し、インスペクター(Inspector)ウィンドウScaleを変更します。
    • 値を以下のように設定して、壁の形を大きくします:
      • X: 3
      • Y: 3
      • Z: 3
  3. 名前の変更
    • ヒエラルキーウィンドウでCubeを選択し、わかりやすい名前に変更します。例えば、「WallCube」と名付けてください。

2. 動くキューブの作成

  1. 青いキューブを作成
    • 再びヒエラルキーウィンドウで右クリックし、「3D Object > Cube」を選択します。
    • こちらが「動くキューブ」になります。
  2. 色(Material)の設定
    • プロジェクトウィンドウで右クリックし、「Create > Material」を選択します。
    • 新しいMaterialが作成されるので、名前を「BlueMaterial」に変更します。
    • インスペクターで「Albedo」の色をクリックし、青色を選びます。
    • 作成したMaterialを青いキューブにドラッグ&ドロップして適用します。
  3. 名前の変更
    • ヒエラルキーウィンドウでこのCubeを「MovingCube」と名付けます。

3. 位置の調整

  • WallCubeの左側に動くキューブを配置します。
    • MovingCubeを選択し、インスペクターウィンドウで以下の値を設定してください:
      • Position
        • X: 0
        • Y: -3
        • Z: 0

4. 確認

  • これでシーンのセットアップが完了しました!現在の構成は以下のようになっているはずです:
    • 大きなWallCube(壁)と、小さなMovingCube(青いキューブ)がシーンに表示されています。
  • シーンビューで確認し、配置が正しいことを確認してください。

次は、この動くキューブを外壁に沿って動かすスクリプトを作成していきましょう!



4. スクリプトの作成

それでは、キューブが壁の外周を動く動きを実現するためのスクリプトを作成しましょう。Unityのスクリプト作成手順を詳しく説明します。

4-1. 新しいスクリプトを作成

  1. プロジェクトウィンドウを開きます。
    画面下部にあるプロジェクトウィンドウで、空白部分を右クリックします。
  2. 「Create」メニューを開きます。
    表示されたメニューから「C# Script」を選択します。
  3. スクリプトに名前を付けます。
    新しいスクリプトが作成されたら、「CubeController」と名前を付けましょう。スクリプト名は、後ほどコード内で使用するため、必ず間違えないようにしてください。

4-2. スクリプトにコードを記述

  1. スクリプトをダブルクリックして開きます。
    作成したCubeControllerスクリプトをダブルクリックすると、Visual StudioやJetBrains Riderなどのエディタが開きます。
  2. 以下のコードを貼り付けます。
    このコードは、キューブが壁の外周に沿って動く機能を実現するためのものです。
using UnityEngine;

public class CubeController : MonoBehaviour
{
    private bool xBool;
    private bool yBool;
    private float move;

    void Start()
    {
        move = 0.05f;
        xBool = false;
        yBool = false;
    }

    void Update()
    {
        Vector3 position = new Vector3(move, 0, 0);
        transform.Translate(position);

        if (float.Parse(this.transform.position.x.ToString("f2")) == 3.0f)
        {
            if (!xBool) 
            {
                xBool = true; 
                transform.Rotate(new Vector3(0, 0, -90));
            }
        }

        if (float.Parse(this.transform.position.y.ToString("f2")) == -3.0f)
        {
            if (!yBool) 
            {
                yBool = true; 
                transform.Rotate(new Vector3(0, 0, -90));
            }
        }

        if (float.Parse(this.transform.position.x.ToString("f2")) == -3.0f)
        {
            if (xBool) 
            {
                xBool = false; 
                transform.Rotate(new Vector3(0, 0, -90));
            }
        }

        if (float.Parse(this.transform.position.y.ToString("f2")) == 3.0f)
        {
            if (yBool) 
            {
                yBool = false; 
                transform.Rotate(new Vector3(0, 0, -90));
            }
        }
    }
}

4-3. スクリプトをキューブにアタッチ

  1. ヒエラルキーウィンドウで青色のキューブを選択します。
    動く対象となるキューブをクリックして選択してください。
  2. スクリプトをドラッグ&ドロップします。
    プロジェクトウィンドウから、先ほど作成したCubeControllerスクリプトを青色のキューブにドラッグしてアタッチします。
  3. アタッチされているか確認します。
    インスペクターウィンドウにCubeControllerスクリプトが表示されていれば成功です。

4-4. コードの説明

このスクリプトでは以下の動作を実現しています:

  • Start()メソッド
    初期設定として、移動速度(move)や方向制御用のフラグ(xBoolyBool)を設定します。
  • Update()メソッド
    キューブの位置をリアルタイムで更新し、外周に沿って移動する仕組みを実現します。Transformを使用してオブジェクトを移動し、特定の位置に到達すると方向を変えます。
  • 方向転換のロジック
    Rotate()を使ってキューブの向きを回転させ、外周に沿って動きを変えています。

これでスクリプトの準備が完了しました!次はプレイモードで動作を確認してみましょう。もしうまく動かない場合は、スクリプトが正しくアタッチされているかやコードのタイプミスがないか確認してください。



5. 実行と確認

さあ、いよいよ作ったスクリプトを動かして確認してみましょう!以下の手順で実行します。

5.1 プレイモードに切り替える

  1. Unityエディタの上部にある再生ボタン(▶)をクリックします。
  2. シーンビューまたはゲームビューに切り替わり、青いキューブが壁の外周に沿って動き始めるはずです!

5.2 動きを確認

  • 青いキューブが四角い壁の周囲を一定の速度で移動し、コーナーに到達すると回転しながら動きを続ける様子が確認できます。
  • スムーズに動いていれば、スクリプトが正しく機能しています!

5.3 トラブルシューティング(うまく動かない場合)

もしキューブが動かなかったり、想定外の動きになった場合は、以下のポイントを確認してください:

  1. スクリプトが正しくアタッチされているか
    • スクリプトを青いキューブにドラッグ&ドロップしましたか?
    • アタッチされたスクリプトがインスペクターに表示されていることを確認してください。
  2. Transformの初期設定を確認する
    • 青いキューブと壁の位置が初期状態で重なっていませんか?
    • 壁のScaleが設定通りに3倍になっているかチェックしてください。
  3. スクリプト内のミスを探す
    • コードをコピー&ペーストする際にタイプミスがなかったか確認してください。
    • move変数の値を小さくしてみると動きが改善されることがあります。
  4. エラーメッセージを確認する
    • Unityエディタの下部にあるコンソール(Console)ウィンドウを開き、エラーが表示されていないかチェックしてください。
    • エラーがある場合はその内容を読み、スクリプトの該当箇所を修正してください。

5.4 応用的な確認ポイント

  • 動きをカスタマイズ
    キューブの動きをもっと速くしたい場合は、スクリプト内のmove変数の値を大きくしてください(例: move = 0.1f; に変更)。
    逆に遅くしたい場合は値を小さく(例: move = 0.02f;)設定します。
  • 色を変える
    青いキューブの色を他の色に変えてみて、自分のオリジナル感を出すのも楽しいですよ。
  • 壁のサイズを変更
    壁のサイズを大きくしたり、小さくしたりしてもスクリプトは対応できます。その際、動きを調整するためにmove値も変更してみてください。

これで確認作業は完了です!動きが確認できたら、さらに応用した機能を加えることで、自分だけのユニークな動きを実現できます。ぜひ自分のプロジェクトで試してみてください!



よくある質問

Q
キューブが動かない場合、どうすればいいですか?
A

スクリプトが正しくアタッチされているか確認してください。また、Transformの設定やスケールに問題がないかチェックしてください。

Q
キューブが壁から飛び出してしまいます。
A

スクリプト内のmove値を小さく調整してみてください。

Q
他のオブジェクトにも同じ動きを適用できますか?
A

はい、スクリプトを他のオブジェクトにアタッチすれば同様の動きが実現できます。

おすすめのアセット

12 Endless Games Bundleは、エンドレスゲームをテーマにした究極のコレクションアセットです。ランナー、ジャンプ、シューティングなど、12種類のエンドレスゲームが含まれており、初心者からプロまで幅広く利用できます。

このバンドルの特徴は、各ゲームがプレイ可能な完成プロジェクトとして提供されていることです。高品質なグラフィックとスムーズな操作性を備えており、カスタマイズ可能なスクリプトやアートアセットも付属しています。これにより、オリジナルのエンドレスゲームを簡単に作成することができます。また、Unityの最新バージョンに対応しているため、すぐにプロジェクトに取り入れることができます。