UnityUnityメモ

Unity コルーチンを使用してオブジェクトのサイズを徐々に大きくする

Unity

はじめに

こんにちは!今回は、Unityでオブジェクトのサイズを徐々に大きくする方法を紹介します。特に、コルーチンとfor文を使って、一定の時間ごとにサイズを変更する方法について説明します。具体的には、Cubeオブジェクトを少しずつ大きくして、約2倍のサイズで止める方法です。初心者でも分かりやすく説明するので、ぜひ試してみてください!

Cubeオブジェクトの作成

まず、Unityを開いて、新しいプロジェクトを作成します。その後、Cubeオブジェクトをシーンに追加します。以下の手順で進めてください。

  1. ヒエラルキーウィンドウで右クリックします。
  2. 「3D Object」→「Cube」を選びます。

これでシーンにCubeが追加されます。



スクリプトの作成

次に、Cubeのサイズを徐々に大きくするスクリプトを作成します。Cubeオブジェクトにアタッチする新しいC#スクリプトを作成しましょう。

  1. 「Assets」フォルダで右クリックして「Create」→「C# Script」を選びます。
  2. スクリプトの名前を「CubeScale」にします。
  3. スクリプトをダブルクリックして開きます。

以下のコードをスクリプトに貼り付けてください。

コード全体の説明

このスクリプトは、オブジェクトがゲームの開始時に大きくなる(スケールアップする)ようにするものです。Startメソッドでコルーチンを開始し、そのコルーチンの中でオブジェクトの大きさを徐々に大きくします。

各部分の説明

  1. ライブラリのインポート
    • System.CollectionsSystem.Collections.Genericはコレクション(リストなど)を使うためのものです。
    • UnityEngineはUnityの基本機能を使うためのものです。
  2. クラス定義
    • CubeScaleという名前のクラスを定義しています。
    • MonoBehaviourを継承しているので、このクラスはUnityのスクリプトとして動作します。
  3. Startメソッド
    • StartメソッドはUnityでオブジェクトが初めて有効になったときに呼ばれるメソッドです。
    • StartCoroutine("ScaleUp")ScaleUpという名前のコルーチンを開始します。
  4. ScaleUpコルーチン
    • IEnumeratorはコルーチンを表す型です。コルーチンは中断と再開ができる特別なメソッドです。
    • forループを使って、変数iを1から2まで0.1ずつ増やします。
    • this.transform.localScale = new Vector3(i,i,i);でオブジェクトの大きさをiに応じて変更します。new Vector3(i,i,i)はオブジェクトのX軸、Y軸、Z軸の大きさをiに設定します。
    • yield return new WaitForSeconds(0.1f);で0.1秒待ってから次のループに進みます。

全体の動き

このスクリプトがアタッチされたオブジェクト(例えばキューブ)は、ゲームが開始されると徐々に大きくなります。最初は1.0のサイズで、最終的に2.0のサイズになるまで、0.1ずつ増加します。増加の間隔は0.1秒です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CubeScale : MonoBehaviour
{
    void Start()
    {
        StartCoroutine("ScaleUp");
    }
 
    IEnumerator ScaleUp()
    {
        for ( float i = 1 ; i < 2 ; i+=0.1f ){
            this.transform.localScale = new Vector3(i,i,i);
            yield return new WaitForSeconds(0.1f);
        }
    }
}

このスクリプトは、Startメソッドでコルーチンを開始し、ScaleUpメソッドでCubeのサイズを徐々に大きくします。for文を使って、サイズを変更し、WaitForSeconds(0.1f)で0.1秒待つようにしています。

スクリプトのアタッチ

作成したスクリプトをCubeオブジェクトにアタッチします。次の手順で行います。

  1. ヒエラルキーウィンドウでCubeオブジェクトを選びます。
  2. 「CubeScale」スクリプトをドラッグ&ドロップして、インスペクターウィンドウのCubeオブジェクトにアタッチします。



テストプレイ

これで準備完了です!シーンを再生してみて、Cubeが徐々に大きくなるのを確認してください。

二倍のサイズになると停止します。



よくある質問

Q
WaitForSeconds(0.1f)ってどういう意味ですか?
A

WaitForSeconds(0.1f)は、0.1秒待つことを意味します。この間、他の処理が実行されます。

Q
コルーチンって何ですか?
A

コルーチンは、Unityで時間の経過を扱うための方法です。特定の処理をフレームごとに少しずつ実行することができます。

Q
Cube以外のオブジェクトでも使えますか?
A

はい、このスクリプトは他の3Dオブジェクトにも適用できます。ただし、this.transform.localScaleをオブジェクトに合わせて調整する必要があります。

Q
サイズの変更速度を速くしたい場合はどうすればいいですか?
A

WaitForSecondsの値を小さくしてください。例えば、WaitForSeconds(0.05f)に設定すると、より速くサイズが変わります。