【Unity】スクリプトから大きさを変更する

  「【Unity】スクリプトから位置座標を変更する」とほぼ同じだがscale【スケール】ではなくlocalScale【ローカルスケール】を使う点に注意。
 手順は大きく以下3つ。
①仮の変数に今の座標取得
②仮の変数の値を変更
③オブジェクトの座標に仮の変数を代入

 代入という言葉がわからない場合は「【C#】代入のはなし」を参照。またVector3【ベクタースリー】という言葉がわからない場合は「【Unity】Vector3がざっくりわかるはなし」を参照。さらにTransform【トランスフォーム】コンポーネントについては「【Unity】位置、回転、大きさを変える」も参照しておくことを推奨。

Vector3 kero = new Vector3(1, 1, 1);  //①仮の変数宣言&初期化
kero.x = 2;                           //②変数keroのx座標を2に書き換え
gameObject.transform.localScale = kero; //③位置座標に変数keroを代入

 本来スクリプトからコンポーネントの変数にアクセスするときは同じオブジェクトであってもコンポーネントの指定や取得をしておく必要があるが、Transformは基本的にどのオブジェクトにも標準搭載なので省略できる。

 よくある落とし穴のポイントとして以下のように直接localScale【ローカルスケール】の座標を変更したくなるが、これはできない仕様。Vector3で代入できるので仮のVector3型変数を作っている。

//エラーになるパターン
gameObject.transform.localScale.x = 1;

 また、勘のいい方ならscaleを使うと思ってしまうが、localScaleを利用する。これはオブジェクトを子オブジェクトとして設定した際親オブジェクトに連動してサイズが変わるため、全体から見たサイズ情報とオブジェクト自身が持つサイズ情報を区別するためにあると思われる。

Leave a comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA