UnityUnityメモ

Unityで簡単!二つのオブジェクトのサイズを連動させるスクリプト入門

Unity

1. はじめに

Unityを使ってゲーム開発をする中で、「複数のオブジェクトの動きやサイズを連動させたい」と思ったことはありませんか?例えば、プレイヤーが操作するキャラクターの大きさを変更した際に、それに合わせて装備品やエフェクトも自動で調整されるようにする場合です。

今回の記事では、簡単な例としてCube(立方体)とSphere(球体)のサイズを連動させる方法をご紹介します。具体的には、Cubeのサイズを変更した際、その変化がSphereにも反映されるようなスクリプトを作成します。さらに、十字キーの上下ボタンを使ってリアルタイムでサイズを拡大・縮小できる仕組みも実装します。

初心者でもわかりやすいように、手順をステップバイステップで解説していきますので、Unityのスクリプトにまだ慣れていない方も安心してください!この記事を読めば、Unityの基本的なスクリプト操作やオブジェクト間の連携についての知識を身に付けることができます。

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



2. CubeとSphereを配置する

まずは、Unityのシーン内に CubeSphere を配置しましょう。このステップでは、Unityエディターの基本操作を使用しますので、初心者の方でも簡単に進められます!


1. Cubeを配置する

  1. Unityエディターの ヒエラルキー(Hierarchy) ウィンドウを右クリックします。
  2. メニューが表示されるので、 3D ObjectCube を選択します。
  3. ヒエラルキーに Cube が追加され、シーンビューにもCubeが表示されます。

2. Sphereを配置する

  1. 同じくヒエラルキーウィンドウを右クリックします。
  2. メニューから 3D ObjectSphere を選択します。
  3. 今度は Sphere がヒエラルキーに追加され、シーンビューに表示されます。

3. CubeとSphereの位置を調整する

  • CubeとSphereが重ならないように、位置を少し離して配置しましょう。
  1. Cube をヒエラルキーで選択し、インスペクターの TransformPosition の値を次のように設定します:
    • X: -2
    • Y: 0
    • Z: 0
  2. 次に、 Sphere を選択して、 Position の値を次のように設定します:
    • X: 2
    • Y: 0
    • Z: 0

これで、CubeとSphereが並んで配置されました。


注意ポイント

  • CubeやSphereが見当たらない場合は、シーンビューのカメラを操作して確認してください。右クリックとマウスドラッグで視点を動かし、マウスホイールでズームイン・ズームアウトできます。
  • 配置の際、スケール(Scale)の値は変更せず、デフォルトのままにしておきましょう。この後のスクリプトでサイズを変更するためです。

ここまでで、CubeとSphereの基本的な配置は完了です!次は、この2つのオブジェクトを連動させるスクリプトを作成していきます。



3. CubeとSphereを連動させるスクリプトを作成

この記事では、Cubeのサイズ変更に合わせてSphereのサイズも自動的に連動させるスクリプトを作成します。このスクリプトは、初心者の方でも簡単に理解できるように、ステップごとに解説します。


スクリプトを作成する準備

まず、Unityのプロジェクトウィンドウでスクリプトファイルを作成します。

  1. プロジェクトウィンドウを右クリック
    任意のフォルダ(例: Scriptsフォルダ)を右クリックしてメニューを表示します。
  2. 「Create」→「C# Script」を選択
    新しいC#スクリプトを作成します。
  3. スクリプト名を「CubeSphereScaler」に設定
    わかりやすい名前を付けて、Enterキーを押します。

スクリプトのコードを記述する

次に、作成したスクリプトをダブルクリックして開き、以下のコードを記述してください。

using UnityEngine;

public class CubeSphereScaler : MonoBehaviour
{
    public GameObject sphere;  // Sphereを取得するための変数
    private int scaleLevel = 2;  // 初期のスケールレベル(0~4の5段階)
    private const int maxScaleLevel = 4;  // 最大のスケールレベル
    private const int minScaleLevel = 0;  // 最小のスケールレベル
    private float scaleStep = 0.5f;  // 各段階のスケール幅

    void Update()
    {
        // 十字キーの上を押したら拡大
        if (Input.GetKeyDown(KeyCode.UpArrow) && scaleLevel < maxScaleLevel)
        {
            scaleLevel++;
            UpdateScale();
        }

        // 十字キーの下を押したら縮小
        if (Input.GetKeyDown(KeyCode.DownArrow) && scaleLevel > minScaleLevel)
        {
            scaleLevel--;
            UpdateScale();
        }
    }

    void UpdateScale()
    {
        // Cubeのスケールを変更
        float newScale = 1.0f + scaleStep * scaleLevel;
        transform.localScale = new Vector3(newScale, newScale, newScale);

        // SphereのスケールをCubeと同じに設定
        if (sphere != null)
        {
            sphere.transform.localScale = transform.localScale;
        }
    }
}

コードのポイント解説

  1. public GameObject sphere;
    Cubeのサイズに連動させる対象として、Sphereを指定するための変数です。この変数を公開することで、Unityエディター上からSphereをアサインできます。
  2. スケールの制御
    scaleLevelという変数でサイズの段階を管理し、拡大や縮小が段階的に行えるようにしています。これにより、CubeとSphereのサイズが一定の幅で変わる仕組みです。
  3. UpdateScaleメソッド
    Cubeのスケールを変更するたびに、このメソッドでSphereのスケールも同期的に変更されます。

コードを書き終えたら、Ctrl + S または Command + S でスクリプトを保存してください。次は、このスクリプトをUnityのオブジェクトに適用していきます!



4. スクリプトをオブジェクトに適用する

スクリプトが完成したら、それを動作させるためにオブジェクトに適用します。このステップでは、作成した「CubeSphereScaler」スクリプトをCubeオブジェクトにアタッチし、Sphereオブジェクトとの連動を設定します。


1. Cubeオブジェクトにスクリプトをアタッチする

  1. Unityエディターのヒエラルキー(Hierarchy)ウィンドウで、Cubeをクリックして選択します。
  2. プロジェクトウィンドウで作成した「CubeSphereScaler」スクリプトを見つけます。
  3. 「CubeSphereScaler」スクリプトをドラッグ&ドロップして、Cubeオブジェクトにアタッチします。
    • アタッチが完了すると、インスペクター(Inspector)に「CubeSphereScaler」のコンポーネントが追加されます。

2. Sphereオブジェクトを関連付ける

  1. Cubeが選択されている状態で、インスペクターの「CubeSphereScaler」コンポーネントを確認します。
  2. Sphere」という名前の欄が表示されていることを確認します。
    • ここは、スクリプト内で宣言したSphereオブジェクトを関連付けるためのフィールドです。
  3. ヒエラルキーウィンドウでSphereオブジェクトを見つけ、それを「Sphere」欄にドラッグ&ドロップします。
    • この操作により、スクリプトがSphereオブジェクトを認識できるようになります。

これで、スクリプトをUnityに適用する手順は完了です!次はゲームを実行して、スクリプトが正しく動作することを確認しましょう。



5. 実行して確認する

いよいよ作成したスクリプトが正しく動作するか確認するステップです。以下の手順に従って進めてみましょう。


ゲームを実行する

  1. Unityエディターの上部にある「Play」ボタンをクリック
    Unityエディターの中央上部にある三角形の「Play」ボタンをクリックして、ゲームを実行します。画面が再生モードに切り替わります。
  2. 十字キーの「上下ボタン」を押してみる
    再生モード中に、キーボードの上下キーを押してみてください。次の動作が確認できれば成功です。
    • 上ボタンを押すと:CubeとSphereが大きくなります。
    • 下ボタンを押すと:CubeとSphereが小さくなります。
  3. オブジェクトの連動確認
    Cubeのサイズ変更に伴い、Sphereのサイズも同じように変化することを確認してください。
    SphereがCubeと同じサイズになっていない場合は、スクリプトの以下のポイントを確認しましょう:
    • Sphereの参照が正しく設定されているか
      Cubeを選択した状態で、インスペクターの「Sphere」欄に正しいオブジェクトが設定されているか確認します。
    • スクリプト内のコードが正確か
      スクリプト内のUpdateScaleメソッドで、CubeとSphereのスケールが一致するよう記述されているか確認します。

トラブルシューティング

もし意図した動作にならない場合、以下をチェックしてみてください:

  • キーボード入力が反応しない場合
    Unityの「Edit」→「Project Settings」→「Input Manager」を確認し、UpArrowDownArrowの入力が有効になっていることを確認してください。
  • エラーが出る場合
    Unityのコンソールウィンドウを確認し、エラーメッセージを読み取ります。参照のミスやコードのタイプミスが原因かもしれません。

正しく動作すれば、上下キーの操作でCubeとSphereのサイズが連動して変化する様子を確認できます。この機能は、ゲームのインタラクションやUIの動作に応用できます。ぜひ試してみてください! 🎉



6. まとめ

この記事では、UnityでCubeとSphereのサイズを連動させる方法について学びました。具体的には、Cubeのサイズ変更に応じてSphereのサイズも同時に変更されるスクリプトを作成し、適用する手順を紹介しました。

この手法を学ぶことで、Unityにおけるオブジェクトのスケール操作やスクリプトを使ったオブジェクト間の連動性を理解できたと思います。この仕組みを応用すれば、他のオブジェクト同士を連動させたり、より複雑な挙動を実装したりすることも可能です。

また、今回のコードを改良して、サイズ変更をもっと滑らかにしたり、複数のオブジェクトを同時に連動させたりする方法にも挑戦してみてください!Unityを使ったゲーム開発の幅がさらに広がるはずです。

楽しみながらスキルを磨いて、より素晴らしいプロジェクトを作り上げてくださいね!



よくある質問

Q
CubeとSphere以外のオブジェクトにも応用できますか?
A

はい、このスクリプトは他の3Dオブジェクトにも応用できます!Sphereの代わりに他のオブジェクトをヒエラルキーに配置し、スクリプトの「Sphere」フィールドに新しいオブジェクトを設定するだけでOKです。また、スクリプト内のロジックを調整すれば、複数のオブジェクトを連動させることも可能です。

Q
スクリプトが動作しない場合の対処法は?
A

以下のポイントを確認してください:

  • Cubeにスクリプトをアタッチしていますか? スクリプトをCubeにドラッグ&ドロップして適用する必要があります。
  • Sphereが「Sphere」フィールドに設定されていますか? ヒエラルキーからSphereをドラッグ&ドロップしてください。
  • エラーメッセージは出ていますか? Unityコンソールでエラーが表示されている場合、コードのスペルミスや構文エラーがないか確認しましょう。
  • Unityを再起動してみましたか? たまに再起動で問題が解決することもあります。
Q
スケール変更をもっと滑らかにする方法は?
A

スケール変更を滑らかにするには、UpdateScale メソッドに補間処理を追加すると良いでしょう。例えば、Lerp を使って次のように書き換えることで、サイズが徐々に変化するようになります:

void UpdateScale()
{
float newScale = 1.0f + scaleStep * scaleLevel;
Vector3 targetScale = new Vector3(newScale, newScale, newScale);

// Cubeのスケールを徐々に変更
transform.localScale = Vector3.Lerp(transform.localScale, targetScale, Time.deltaTime * 5);

// Sphereのスケールも同様に変更
if (sphere != null)
{
sphere.transform.localScale = Vector3.Lerp(sphere.transform.localScale, targetScale, Time.deltaTime * 5);
}
}

このコードでは、スケール変更がフレームごとに滑らかに進むため、自然なアニメーション効果が得られます。

おすすめのアセット

「Game Launcher – Patcher and Updater [PRO]」は、Unityでのゲーム開発において、自動更新機能やパッチ適用を簡単に管理できる便利なアセットです。このツールを使用することで、ゲームをインストールした後、ユーザーが最新バージョンを常に利用できるように、ランチャーやアップデーターを統合できます。特に、ゲームの大型アップデートや小さな修正をシームレスに提供するために役立ちます。

タイトルとURLをコピーしました