読者です 読者をやめる 読者になる 読者になる

ただの適当な開発記

会社勤めしつつUnityでアプリ作ってる人の雑記

Inspector上の反復作業はなるべく減らし隊 ~Reset編~#Unity

UnityでInspector上で同じような操作を何回もするケースって結構あると思います。

個人的に最近一番多かったのが、
Trigger検知をしたいオブジェクトに対してColliderとRigidbodyをアタッチし、Collision判定と重力をオフる操作
です。

f:id:cocokyoro:20170320015749p:plain

こういうやつ。

これ毎回手作業でやってると、いつか絶対付け忘れたオブジェクトが出てきます。
で、それに気づかず実装して予期せぬオブジェクトが物理的な当たり判定を持っちゃってどっか飛んでく、といったバグが起こりうるわけです。

こういうのを起きないようにするためにPrefabがあるのでは?という意見もあると思いますが、作成したPrefabの抽象度によりけりだと思うので、今回はInspectorで操作せざるを得ない状況ということで。

Inspector上での反復作業を避けるには幾つか対応方法はあります。

そのうち自分がよく使うのはReset関数+RequireComponentでInspector上の設定をスクリプトからやってあげるというもの。


Resetの使い方例

RequireComponentで指定した型のComponentが自動でアタッチされます。

[RequireComponent(typeof(Collider))]

とやると下記のようなエラーがでます。

f:id:cocokyoro:20170321011018p:plain

Colliderじゃなくて継承先のColliderクラスを指定してあげましょう。

そして、ResetはGameObjectにスクリプトがアタッチされた瞬間に呼ばれます。
Resetの中で値を設定してあげればInspectorを直接いじる必要はありません。
Unity - スクリプトリファレンス: MonoBehaviour.Reset()

> Reset はインスペクターでデフォルト値を設定するときにもっともよく使用されます。

リファレンス的にもこの使い方を推奨しているようです。

広告を非表示にする