はじめに
こんにちは!今回は、Unityでオブジェクトのサイズを徐々に大きくする方法を紹介します。特に、コルーチンとfor文を使って、一定の時間ごとにサイズを変更する方法について説明します。具体的には、Cubeオブジェクトを少しずつ大きくして、約2倍のサイズで止める方法です。初心者でも分かりやすく説明するので、ぜひ試してみてください!
Cubeオブジェクトの作成
まず、Unityを開いて、新しいプロジェクトを作成します。その後、Cubeオブジェクトをシーンに追加します。以下の手順で進めてください。
- ヒエラルキーウィンドウで右クリックします。
- 「3D Object」→「Cube」を選びます。
これでシーンにCubeが追加されます。
スクリプトの作成
次に、Cubeのサイズを徐々に大きくするスクリプトを作成します。Cubeオブジェクトにアタッチする新しいC#スクリプトを作成しましょう。
- 「Assets」フォルダで右クリックして「Create」→「C# Script」を選びます。
- スクリプトの名前を「CubeScale」にします。
- スクリプトをダブルクリックして開きます。
以下のコードをスクリプトに貼り付けてください。
コード全体の説明
このスクリプトは、オブジェクトがゲームの開始時に大きくなる(スケールアップする)ようにするものです。Start
メソッドでコルーチンを開始し、そのコルーチンの中でオブジェクトの大きさを徐々に大きくします。
各部分の説明
- ライブラリのインポート
System.Collections
とSystem.Collections.Generic
はコレクション(リストなど)を使うためのものです。UnityEngine
はUnityの基本機能を使うためのものです。
- クラス定義
CubeScale
という名前のクラスを定義しています。MonoBehaviour
を継承しているので、このクラスはUnityのスクリプトとして動作します。
- Startメソッド
Start
メソッドはUnityでオブジェクトが初めて有効になったときに呼ばれるメソッドです。StartCoroutine("ScaleUp")
はScaleUp
という名前のコルーチンを開始します。
- 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オブジェクトにアタッチします。次の手順で行います。
- ヒエラルキーウィンドウでCubeオブジェクトを選びます。
- 「CubeScale」スクリプトをドラッグ&ドロップして、インスペクターウィンドウのCubeオブジェクトにアタッチします。
テストプレイ
これで準備完了です!シーンを再生してみて、Cubeが徐々に大きくなるのを確認してください。
二倍のサイズになると停止します。
よくある質問
- Q
WaitForSeconds(0.1f)
ってどういう意味ですか? - A
WaitForSeconds(0.1f)
は、0.1秒待つことを意味します。この間、他の処理が実行されます。
- Qコルーチンって何ですか?
- A
コルーチンは、Unityで時間の経過を扱うための方法です。特定の処理をフレームごとに少しずつ実行することができます。
- QCube以外のオブジェクトでも使えますか?
- A
はい、このスクリプトは他の3Dオブジェクトにも適用できます。ただし、
this.transform.localScale
をオブジェクトに合わせて調整する必要があります。
- Qサイズの変更速度を速くしたい場合はどうすればいいですか?
- A
WaitForSeconds
の値を小さくしてください。例えば、WaitForSeconds(0.05f)
に設定すると、より速くサイズが変わります。