この記事について
この記事では Transform.localScale を使ってオブジェクトの大きさを変更・取得する方法を解説します。
位置(position)、回転(rotation)と並んでよく使うのが「拡縮(scale)」です。ゲーム開発ではサイズ変更やアニメーションに欠かせません。
この記事でわかること
- transform.localScale でオブジェクトの大きさを取得・変更できる
- Vector3 でX/Y/Z方向の拡縮を制御できる
- transform.localScale *= 倍率 で相対的にサイズ変更できる
- Lerp を使ってスムーズに拡縮できる
Transformとは?
Transformについては以下の記事を参考にしてください。
Transform.localScaleをスクリプトで制御
Transform.localScaleをの準備
まずはヒエラルキーで右クリックをして空のGameObjectとCubeを1つずつ用意します。
・「右クリック」→「Create Empty」
・「右クリック」→「3D Object」→「Cube」
作成できたらCubeを空のGameObjectの子オブジェクトにして、空のGameObjectのScaleを(5,2,3)にして、Rotationを(0,30,0)にしてください。
次にスクリプトを作成してCubeにアタッチしてください。

現在のスケールを取得する
現在のスケールは「transform.localScale」で取得できます。
using UnityEngine;
public class Transform_localScale : MonoBehaviour
{
void Start()
{
Vector3 scale = transform.localScale;
Debug.Log("現在のスケール: " + scale);
}
}
実行してみると、 ローカルスケールなので(1,1,1) ですね。
new Vector3()でスケールを変更する(絶対指定)
直接、Vector3を代入して拡縮を指定することもできます。
using UnityEngine;
public class Transform_localScale : MonoBehaviour
{
void Start()
{
// 2倍に拡大
transform.localScale = new Vector3(2, 2, 2);
Debug.Log("現在のスケール: " + transform.localScale);
}
}
実行してみると、ローカルスケールが(2,2,2)になりましたね。
*=でスケールを変更する(相対変更)
現在のサイズを基準に倍率を掛けることもできます。
※ここからは親オブジェクトのスケールを(0.1f,0.1f,0.1f)ぐらいにしておいてください。
using UnityEngine;
public class Transform_localScale : MonoBehaviour
{
void Update()
{
if (transform.localScale.x >= 30) return; //制限はかけておきましょう
// 毎秒1.1倍に拡大
transform.localScale *= 1.01f; //* Time.deltaTime;
Debug.Log("現在のスケール: " + transform.localScale);
}
}
実行してみると、どんどん大きくなりますね。
スムーズに拡縮する(Lerp)
「Vector3.Lerp」を使うとアニメーションのように自然に拡縮できます。
using UnityEngine;
public class Transform_localScale : MonoBehaviour
{
[SerializeField] private Vector3 targetScale = new Vector3(30, 30, 30);
[SerializeField] private float speed = 2f;
void Update()
{
transform.localScale = Vector3.Lerp(transform.localScale, targetScale, Time.deltaTime * speed);
}
}
実行してみると、目標値近くになると時間がかかるみたいですね。
まとめ
- transform.localScale → サイズを取得・変更できる
- Vector3(x,y,z) で絶対値指定
- localScale *= 倍率 で相対拡縮
- Lerp を使えばアニメーション的な拡縮も可能