Unity

【Unity】uGUIで編集中にサイズや位置、スケールを変更するスクリプト

ugui-adjustment-script

Mayaのmelみたく、コード打ったら、その場でサイズとか変更できないかなーと思って試してみました。

独学なので、もっと良い方法がありましたら教えてください。

アタッチするとサイズや位置、スケールを変更するスクリプト

using UnityEngine;
[ExecuteInEditMode]
<span class="synType">public</span> <span class="synType">class</span> test : MonoBehaviour {
<span class="synComment">// Update is called once per frame</span>
<span class="synType">void</span> Update ()
{
RectTransform rectTransform = <span class="synStatement">this</span>.GetComponent<RectTransform>();
<span class="synComment">//サイズ変更</span>
rectTransform.sizeDelta = <span class="synStatement">new</span> Vector2(<span class="synConstant">256</span>, <span class="synConstant">128</span>);
}
}
  • [ExecuteInEditMode]を記述すると編集中にスクリプトが実行されます。

  • rectTransform.localPosition = new Vector2(0, 0);  //座標移動

  • rectTransform.localScale = new Vector3(3, 3, 3);  //スケール変更

カスタムメニューからサイズや位置、スケールを変更するスクリプト

  • Editorフォルダに下記のスクリプトを格納します。
using UnityEngine;
<span class="synStatement">using</span> UnityEditor;
<span class="synType">public</span> <span class="synType">class</span> test : MonoBehaviour {
[MenuItem(<span class="synConstant">"Custum/サイズ変更"</span>, <span class="synConstant">false</span>, <span class="synConstant">1</span>)]
<span class="synType">static</span> <span class="synType">void</span> ChangeSize(MenuCommand command) {
GameObject obj = Selection.activeGameObject;<span class="synComment">// 選択しているゲームオブジェクトを取得    </span>
RectTransform rectTransform = obj.GetComponent<RectTransform>();
Undo.RecordObject (rectTransform.transform, <span class="synConstant">"Undo"</span>);
rectTransform.sizeDelta = <span class="synStatement">new</span> Vector2(<span class="synConstant">256</span>, <span class="synConstant">128</span>);
}
}
  • 選択したオブジェクトに対して、上部メニューからスクリプトを実行
  • Undoも追加

参考

UnityのEditorを拡張して自前のメニュー項目を表示する | Unityを使った3Dゲームの作り方(かめくめ)

感想

思いついたことを、なんとか実現。

今回のスクリプトは、デザイナーにも扱えて応用がききそうです。

Unityの参考紹介
ABOUT ME
すいみん
東京在住。デザイナー寄りのテクニカルアーティスト。 ブログは技術検証の備忘録として書いています。