
「【Unity】スクリプトから位置座標を変更する」とほぼ同じだがscale【スケール】ではなくlocalScale【ローカルスケール】を使う点に注意。
手順は大きく以下3つ。
①仮の変数を宣言
②仮の変数の値を変更
③オブジェクトの大きさに仮の変数を代入
代入という言葉がわからない場合は「代入の話」を参照。またVector3【ベクタースリー】という言葉がわからない場合は「【Unity】Vector3がざっくりわかるはなし」を参照。さらにTransform【トランスフォーム】コンポーネントについては「【Unity】位置、回転、大きさを変える」も参照しておくことを推奨。
その他Unityに関するTipsを「【Unity】サイト内Tips記事リンクまとめ」にまとめた。
3つのステップ
Vector3 kero = new Vector3(1,1,1); //①仮の変数宣言&初期化
kero.x = 2; //②変数keroのx軸の大きさを2に書き換え
gameObject.transform.localScale = kero; //③位置座標に変数keroを代入
上記のサンプルは基礎的な大きさ変更のための3ステップ。本来スクリプトからコンポーネントの変数にアクセスするときは同じオブジェクトであってもコンポーネントの指定や取得をしておく必要があるが、Transformは基本的にどのオブジェクトにも標準搭載なので省略できる。
今の大きさから変化させたいとき
少しずつ大きさを変えたい場合は毎フレーム現在の大きさを代入して変更を加えればよい。x座標に1ずつ大きくするサンプルは下記のようになる。
Vector3 kero; //①仮の変数宣言
kero = gameObject.transform.localScale; //◆現在の大きさを代入
kero.x = kero.x +1; //②変数keroのx座標を1増やして代入
gameObject.transform.localScale = kero; //③大きさに変数keroを代入
よくある落とし穴
よくある落とし穴のポイントとして以下のように直接localScale【ローカルスケール】の座標を変更したくなるが、これはできない仕様。Vector3で代入できるので仮のVector3型変数を作っている。
また、勘のいい方ならscaleを使うと思ってしまうが、localScaleを利用する。これはオブジェクトを子オブジェクトとして設定した際親オブジェクトに連動してサイズが変わるため、全体から見たサイズ情報とオブジェクト自身が持つサイズ情報を区別するためにあると思われる。
//エラーになるパターン
gameObject.transform.localScale.x = 2;
また、勘のいい方ならscaleを使うと思ってしまうが、localScaleを利用する。これはオブジェクトを子オブジェクトとして設定した際親オブジェクトに連動してサイズが変わるため、全体から見たサイズ情報とオブジェクト自身が持つサイズ情報を区別するためにあると思われる。