【Unity】Odinで開発効率をアップ

Unityアドカレ2020/08/20 投稿記事
Unity アセット真夏のアドベントカレンダー 2020 Summer! – Unity公式 Asset Portal

前の記事: Unityでビジュアルスクリプティング:ゼロから始めるBolt入門 - にしあぷ さん
次の記事: Vtuberなら時止めくらい軽くこなしてエモを出していこう - パルディ博士の助手RDAG さん

注意

この記事は
Unityのスクリプトが少しわかる(GetCompornentしたりInstantiateしたり)
レベルの人向けです。

記事中で下記の有料アセットを使用しています。
Odin - Inspector and Serializer


はじめに

~ 毎回プレイモードに入るのが面倒なので編集画面から簡単にスクリプトを実行したい ~

Unityを使っていると
オブジェクトやコンポーネントを大量に配置、変更したいときってありますよね?

そういった状況では
基本的にプレイモード中にスクリプトから実施することになると思います。

状況に合わせて柔軟に配置することができて非常に便利です。

ただし、問題もあります。
当たり前ですが プレイモードにしか反映されない ことです。

起動は時間もかかりますし、
調整や確認のために編集画面とプレイモードを行き来するのもしんどいです。

誰しもプレイモードで修正して内容がリセットされてしまった悲しい経験があるはず。
ありますよね?

そっこっでっ♪
編集画面のまま簡単にスクリプトを実行してしまおう!
というのがこの記事の趣旨です。

実行するには何が必要か

~ Odin - Inspector and Serializerを使う ~

ではどうすれば実行できるのか?

調べたところ編集画面でも動くEditerScriptなるものを書くのが良さそうに思いました。
こちらは覚えれば便利そうです。

ただし使いやすくするには、たくさんスクリプトを書かなければならないようなので、
今回の”簡単に”という趣旨から外れるため却下です。

ということで主題のOdin - Inspector and Serializerを使うことにします。

手順

~ 1.Odinを入れる
→ 2.スクリプトにusing Sirenix.OdinInspector;と[Button]を書く
→ 3.ボタンを押す ~



1.AssetStoreからOdinを購入して自分のプロジェクトにインポートする
説明パネル?が出ますが閉じちゃって大丈夫です、暇な時に見ましょう。
f:id:sarisarinyama:20200804173500p:plain

2.実行したいスクリプトを編集する
using Sirenix.OdinInspector;を追加する。
実行したいメソッドの上に[Button]を追加する。

C#:Sample.cs

using Sirenix.OdinInspector; //usingを追加
using UnityEngine;
public class Sample : MonoBehaviour
{
    [Button]    //メソッドの上に追加
    void Test()
    {
        Debug.Log("息をするのもめんどくさい");
    }
}


3.スクリプトをつけたオブジェクトにボタンが生成されるので押す!
f:id:sarisarinyama:20200804173322p:plain
実行されました。
簡単ですね^^


注意
編集画面からのオブジェクト削除は結果が担保されないということなので、
スクリプト内で実行結果を確認する必要があります。

雑記

~ 思ったこと ~

・編集画面で動作しないメソッドがある
  ゲームオブジェクトを破棄するDestroyは代わりにDestroyImidiateを使用するみたいです。
  オブジェクト作る方は大丈夫です。

・高速動作
  編集画面で処理を走らせると異常に速いです。

・プレイモードでも動作します
  画面にテスト用ボタンを付けたり消したりしなくていいんです。
  創造主の都合で生み出され、
  邪魔者扱いされたあげく削除される悲しいオブジェクトが生まれずに済みます><

・オブジェクトの位置やサイズを再生中に調整したい
  ↓こういった情報を参考に、
  ボタンから再生中の値を保持反映するスクリプトを作る。
  (:3[kanのメモ帳]
   エディタ再生中に変更した値を、再生終了後もそのまま保持する属性
  プレイヤーの位置を初期位置に戻したりゴールさせたりと非常に便利です。

レベルデザインを編集画面からスクリプトで実行したり外部データと読み書きしたり

・非同期や時間の経過が必要な処理も編集画面から実行したい
  非同期処理 MonoBehaviour エディタスクリプト
  あたりで検索すると幸せになれるかもしれません。

・連携しているメソッドも実行したい
  [SerializeField]で引数に入れたいオブジェクトやコンポーネントを指定すれば
  本来面倒な連携も楽ちんです。

・アセットが高い?
  年末セールなどでよく半額になっています。
  クリスマスには作者ページでプレゼントしてたりも?

・購入したからには使い倒したい①
  PeekというScene内にインスペクタを表示できるアセットと連携させると、
  Scene編集しながらのスクリプト実行が視点移動無しでできます。
  すごい!
  Peek



・購入したからには使い倒したい②
  実はボタンをつけるアセットではなく非常に機能豊富なのでコスパは良いはず。
  isNullOrEmptyみたいな便利なメソッドも追加されていてもう手放せません。

おしまい