こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのlocalScaleってなに?」
「localScaleでどうやって反転させるの?」
というお悩みの方に向けた内容となっています。
Unity内でオブジェクトの拡大率を設定しているのが、localScaleという変数です。
このlocalScaleは、Transformコンポーネントで定義されているScaleプロパティの値を管理している変数で、オブジェクトの大きさをX軸・Y軸・Z軸のVector3型で拡大率を指定することができます。
また、localScaleを使うことで、2Dゲームなどでキャラクターの反転する処理を行うこともできます。
そこで、このページでは、UnityのTransformで管理されているlocalScaleについて、どんな変数なのか、また使い方までをまとめていきます。
localScaleとは?
まずは、localScaleがどういうものなのかを紹介していきます。
オブジェクトの大きさを決めるTransformの変数
localScaleとは、Transformコンポーネントで管理されているオブジェクトの大きさを決めている変数です。
もう少し詳しく言うと、オブジェクトのTransformコンポーネントのScaleプロパティで、オブジェクトの大きさをX軸・Y軸・Z軸方向に比率で指定することができます。

このScaleプロパティの値を変更すると、1をデフォルト値として、設定した軸方向に比率分、オブジェクトを大きくしたり小さくしたりすることができます。

そして、Scaleプロパティで指定した値をスクリプトから変更したり取得したりする場合に、localScaleという変数を使います。
このlocalScaleでは、X軸・Y軸・Z軸における比率をVector3型で値を保持しています。
オブジェクトを反転させることができる
2DゲームではlocalScaleを使うことで、オブジェクトを反転させることもできます。
オブジェクトを左右で反転させる場合は、X軸方向のlocalScaleの倍率をマイナス(-)に設定することで、反転するようになります。
例えば、オブジェクトのlocalScaleのXの値を-1から1までで設定した場合、以下のようにそれぞれ表示されます。

値がマイナス(-)になると、反対方向にオブジェクトが拡大されていくことになり、「-1」にすると完全に左右を反転させることができます。
なお、同様のことをY軸方向に設定した場合は、オブジェクトを上下反転させることもできます。

localScaleの使い方
ここからは、localScaleを実際にUnityで使う方法についてまとめていきます。
transform.localScaleと記述して使う
localScaleをスクリプトから使う場合は、Transformコンポーネントで管理されているので、
transform.localScale
と記述して使います。
例えば、現在のScaleの値を取得したい場合は、
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
Debug.Log(transform.localScale);
}
}
7行目のように記述してあげることで、以下のようにVector3型の値で取得できているのが分かります。

また、ScaleのXだけの値を取得したい場合は、
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
float x = transform.localScale.x;
Debug.Log(x);
}
}
7行目のように、「transform.localScale.x」と記述することで、X軸の値をfloat型で取得することができます。

localScaleの値を変更する
localScaleの値をスクリプトから代入して変更することで、ゲームの途中でオブジェクトの大きさを変更したり、反転させることができます。
例えば、スペースキーを押したらオブジェクトの大きさを2倍にする処理を作りたい場合、
using UnityEngine;
public class Test : MonoBehaviour
{
Vector3 largeSize = new Vector3(2, 2, 1); // 拡大用のVector3型の変数
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
transform.localScale = largeSize; // Scaleの値を置き換える
}
}
}
5行目で代入したいVector3(ここでは2倍)の変数を準備しておき、11行目でlocalScaleに代入する処理を行っています。

また、localScaleでオブジェクトを左右に反転させたい場合、
using UnityEngine;
public class Test : MonoBehaviour
{
int arrow = 0; // どちらの矢印を押したかを判定する変数
void Update()
{
if (Input.GetKeyDown(KeyCode.RightArrow))
{
arrow = 1;
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
arrow = -1;
}
if (arrow != 0)
{
transform.localScale = new Vector3(arrow, 1, 1); // オブジェクトの向きを変える処理
arrow = 0;
}
}
}
11行目で右矢印キーを押した場合に変数arrowの値を「1」、15行目で左矢印キーを押した場合に変数arrowの値を「-1」として、20行目で矢印キーが押された際にlocalScaleのxの値が変わるように記述しています。
これでゲームを実行してみると、

右矢印キーを押すとオブジェクトが右向きになり、左矢印キーを押すとオブジェクトが左向きになります。
なお、20行目の代入する処理の部分ですが、
transform.localScale.x = arrow;
と書きたくなりますが、アクセス修飾子の関係でそれぞれの座標を直接代入することはできないため、注意しておきましょう。
まとめ
このページでは、Unityで使うことができるlocalScaleについて、どういう変数なのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?
localScaleとは、Transformコンポーネントで管理されている変数で、オブジェクトの大きさをX軸・Y軸・Z軸における比率で決めている項目です。
このlocalScaleを使うことで、オブジェクトの拡大縮小率を設定できるので、オブジェクトの大きさを変えたり、反転させたりといった処理をスクリプトから行えるようになります。
Unityの中でも使うことが多い変数なので、覚えておくと良いでしょう。
最後までお読みいただきまして、ありがとうございました!
コメント