UnityUnityメモ

Unityでオブジェクトの中間地点を簡単に計算!初心者向け解説

Unity

はじめに

Unityを使ってゲームを作るとき、オブジェクトの位置をうまく調整することはとても重要ですよね。特に「2つのオブジェクトの中間地点に別のオブジェクトを配置したい」という状況は、意外とよくあります。たとえば、敵キャラクターとプレイヤーキャラクターの間にオブジェクトを生成したい場合や、ゲーム内のガイドラインとして中間地点を使いたい場合などです。


今回の記事では、Unityで2つのオブジェクトの中間地点を計算して、別のオブジェクトをその位置に動かす方法を、初心者にもわかりやすく解説します。
実際に動くスクリプトの例も紹介するので、Unity初心者でもすぐに試せる内容になっています!


「もっと簡単にオブジェクトを配置したい」「スクリプトを使って効率的に作業を進めたい」と思っている方は、ぜひ最後まで読んでくださいね!

それでは早速始めましょう! 😊

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



Step 1: シーンにオブジェクトを配置する

まずは、Unityのシーンに必要な3つのオブジェクトを配置しましょう。今回は、以下のオブジェクトを使います:

  • Cube:プレイヤーオブジェクト
  • Cylinder:ターゲットオブジェクト
  • Sphere:中間地点に移動するオブジェクト

1. Cubeを作成する

  1. Hierarchyウィンドウを右クリックします。
  2. 表示されるメニューから「3D Object」→「Cube」を選択します。
  3. シーン内にCubeが配置されます。

ポイント💡: Cubeの名前は後で分かりやすいように「Player」に変更しておくと便利です。


2. Cylinderを作成する

  1. Cubeと同じ手順で、「3D Object」→「Cylinder」を選択します。
  2. Cylinderがシーン内に追加されます。

ヒント✨: Cylinderはターゲットオブジェクトなので、「Target」という名前に変更しておきましょう。


3. Sphereを作成する

  1. 再度、Hierarchyウィンドウを右クリックします。
  2. 3D Object」→「Sphere」を選択します。
  3. Sphereがシーンに追加されます。このSphereが中間地点に配置されるオブジェクトです。

注意点⚠️: 名前を「Midpoint」に変更すると分かりやすくなります。


4. オブジェクトの配置を調整する

  • CubeとCylinderを適当な位置に配置してください。たとえば:
    • Cube: X = -3, Y = 0.5, Z = 0
    • Cylinder: X = 3, Y = 0.5, Z = 0

チェックリスト✔️:

  • CubeとCylinderが異なる位置に配置されているか確認してください。
  • Sphereは初期位置のままで大丈夫です。次のステップでスクリプトを使って自動的に移動します。

これで、シーンに必要な3つのオブジェクトを配置できました!次は、これらのオブジェクトに動きを加えるスクリプトを作成していきますよ! 😊



Step 2: Cubeを動かすスクリプトを作成

次に、プレイヤーオブジェクトであるCubeを動かすためのスクリプトを作成します。このスクリプトを使用すれば、キーボードの矢印キーやWASDキーでCubeを自由に動かせるようになります。


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

  1. Projectウィンドウを右クリックします。
  2. 表示されるメニューから「Create」→「C# Script」を選択します。
  3. 新しいスクリプトの名前を「PlayerMove」に変更します。

ポイント💡: スクリプト名は必ず一貫性を保ち、作成時に付けた名前とクラス名が一致するようにしてください。


2. スクリプトにコードを記述する

作成した「PlayerMove」スクリプトをダブルクリックして開き、以下のコードを入力します。

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

public class PlayerMove : MonoBehaviour
{
    void Update()
    {
        // キーボード入力を取得
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;

        // Cubeの位置を更新
        transform.position = new Vector3
        (
            transform.position.x + dx, 0.5f, transform.position.z + dz
        );
    }
}

3. スクリプトをCubeにアタッチする

  1. Hierarchyウィンドウで「Cube」を選択します。
  2. 作成した「PlayerMove」スクリプトをProjectウィンドウからCubeにドラッグ&ドロップします。
    • これでスクリプトがCubeにアタッチされました。

チェックポイント✔️:

  • Inspectorウィンドウを確認して、「PlayerMove」スクリプトがCubeに追加されているか確認してください。

これでCubeを自由に動かすスクリプトが完成しました!次は、2つのオブジェクト間の中間地点を計算して、Sphereをその位置に移動させるスクリプトを作成します! 😊



Step 3: 中間地点を計算するスクリプトを作成

次に、CubeCylinderの中間地点を計算して、Sphere(Midpoint)をその位置に移動させるスクリプトを作成します。これにより、Cubeが動いてもSphereが常に中間地点に移動するようになります。


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

  1. Projectウィンドウを右クリックします。
  2. メニューから「Create」→「C# Script」を選択します。
  3. スクリプトの名前を「SpherePos」に変更します。

2. スクリプトにコードを記述する

作成した「SpherePos」スクリプトをダブルクリックして開き、以下のコードを入力します。

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

public class SpherePos : MonoBehaviour
{
    // CubeとCylinderを指定するためのフィールド
    public GameObject cube;
    public GameObject cylinder;

    void Update()
    {
        // 中間地点を計算し、Sphereの位置を更新
        this.transform.position = (cube.transform.position + cylinder.transform.position) / 2;
    }
}

3. スクリプトをSphereにアタッチする

  1. Hierarchyウィンドウで「Sphere」を選択します。
  2. 作成した「SpherePos」スクリプトをProjectウィンドウからSphereにドラッグ&ドロップします。
    • これでスクリプトがSphereにアタッチされます。

4. CubeとCylinderを割り当てる

  1. Sphereを選択し、Inspectorウィンドウを確認します。
  2. 「SpherePos」スクリプトの中に「Cube」と「Cylinder」というフィールドが表示されているはずです。
  3. HierarchyウィンドウからCubeを「Cube」フィールドに、Cylinderを「Cylinder」フィールドにドラッグ&ドロップします。

スクリプトの動作解説

  • Updateメソッド
    毎フレーム、CubeとCylinderの位置を取得し、その中間地点を計算します。計算式は次の通り:(cube.transform.position + cylinder.transform.position) / 2;これにより、CubeとCylinderの位置を足し合わせた値を2で割ることで、中間地点を求めています。
  • this.transform.position
    Sphereの位置を中間地点に更新しています。

これで、CubeとCylinderの中間地点を計算して、Sphereをその位置に移動させるスクリプトが完成しました!次のステップでは、すべてを統合して動作を確認します。 🎉



Step 4: 実行して確認

これまでに作成したオブジェクトとスクリプトを使って、Unityで実際に動作を確認してみましょう。以下の手順で設定を仕上げていきます。


1. 最終確認を行う

  • Hierarchyウィンドウに次の3つのオブジェクトがあることを確認してください:
    • Cube(またはPlayer):PlayerMoveスクリプトがアタッチされている。
    • Cylinder(またはTarget):固定オブジェクトとして設置されている。
    • Sphere(またはMidpoint):SpherePosスクリプトがアタッチされている。
  • Inspectorウィンドウで、SphereにアタッチされたSpherePosスクリプトの「Cube」フィールドにCubeを、「Cylinder」フィールドにCylinderを割り当てていることを確認します。

2. 実行する

  1. Unityエディターの上部にある「Play」ボタンをクリックしてプレイモードに切り替えます。
  2. キーボードの矢印キー(またはWASDキー)を使ってCubeを動かしてみましょう。

3. 確認ポイント

  • Cubeを動かすと、SphereがCubeとCylinderの間をリアルタイムで移動することを確認してください。
  • Cylinderが固定されたままであることを確認します。

チェックポイント✔️

  • Cubeが正しく移動しているか。
  • SphereがCubeとCylinderの中間地点に正しく配置されているか。

4. エラーが発生した場合

エラーが発生した場合、次のポイントをチェックしてみてください:

  • スクリプトが正しくアタッチされているか
    • PlayerMoveスクリプト → Cube
    • SpherePosスクリプト → Sphere
  • CubeとCylinderのフィールドが正しく設定されているか
    • Inspectorウィンドウで、CubeフィールドにCubeを、CylinderフィールドにCylinderをドラッグ&ドロップして割り当てます。
  • スクリプトのコードにタイポやエラーがないか
    • エディターでスクリプトを再度確認し、Unityコンソールにエラーメッセージが表示されていれば修正します。

成功すれば、Cubeを移動するたびにSphereがリアルタイムで中間地点に動く様子が確認できます!この動作がゲーム内で使える仕組みの一例となります。

お疲れさまでした!これで、Unityを使ってオブジェクト間の中間地点を計算して動かす方法が完成しました。次はこの仕組みを応用して、もっと複雑な動きを追加してみるのもいいですね! 😊



よくある質問 (Q&A)

Q
スクリプトが正しく動作しません。どうすればいいですか?
A

CubeやCylinderのフィールドに正しいオブジェクトが割り当てられているか確認してください。

Q
中間地点にオブジェクトを配置する際に注意すべき点は?
A

オブジェクトのTransformが正確に設定されていることを確認してください。

Q
別の形状のオブジェクトを使うことはできますか?
A

はい、どんなオブジェクトでもスクリプトは同じように動作します。

おすすめのアセット

「Ultimate Asset Bundle – Complete Asset Collection」は、ゲーム開発に必要なさまざまなアセットをひとまとめにしたお得なパックです。このコレクションには、3Dモデル、テクスチャ、サウンドエフェクト、スクリプトなど、多くの素材が含まれており、初心者からプロまで幅広い開発者に役立ちます。