ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

眺めてコピペするだけ!Odin便利属性7選!

いきなりですが注意!

「Odin?何それ?」って思った方!
実はコレ、二部構成の後半記事です。

前半記事(きつねうどんさん担当)を読んでなくても大丈夫な構成になっていますが、『Odinとは?』について解説されているので是非読んでみてください〜!

qiita.com

はじめに

『Unity アセット真夏のアドベントカレンダー 2018』も本日が最終日! 皆さんも最終日なので読み疲れて来たんじゃないでしょうか?

なので...最終日はOdinの便利な属性たちを《Gif動画+サンプルコード》でお届け致します! 眺めて便利なものをコピペするだけ!最終日に相応しいラクだと思いませんか?!

簡単に追加できるのに便利!というものを全属性から7つ選びました! Unityを扱う全員が使えるかどうかを第一に考えているので、是非ご覧下さい!

では、早速紹介していきますよー!

便利属性7連発!

その1:アタッチ間違いを回避だ!

「Prefabをアタッチしようとしたら、Scene上のオブジェクトをアタッチしてた!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031439g:plain

  • Asset Only Obj
    • AssetであるPrefabObjectはアタッチできる
    • AssetではないSceneObjectがアタッチできない
  • Scene Only Obj
    • Scene上にあるSceneObjectはアタッチできる
    • Scene上にないPrefabObjectはアタッチできない

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [AssetsOnly]
    public GameObject AssetOnlyObj;
    
    [SceneObjectsOnly]
    public GameObject SceneOnlyObj;
}

その2:アタッチし忘れを回避だ!

「Inspector上でアタッチし忘れてた!これがバグの原因の元に...」 そんな悲しい思いをしたことがある方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031630g:plain

何もアタッチされていないと、エラーが出ているのが確認できると思います!

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [Required]
    public GameObject NeedObj;
}

その3:試作でGUIのボタン作るの面倒だ!

「『ボタンが押されたら〇〇』の動作を確かめるのにSceneに仮のボタン配置は面倒!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031734g:plain

もちろん、ゲームを再生中にも有効なのでGUIのボタンなしでテスト可能です!

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    public int Number;
    
    [Button]
    private void AddNumber()
    {
        Number++;
    }
}

[Button]の配置の派生バージョンとして
[InlineButton]
[ButtonGroup]
[EnumToggleButtons]
があるので、気になる方は使ってみてください。

その4:要素に見出しを付けるのだ!

「見出しをつけて、変数を見やすくしたい!」 そんな方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031813p:plain

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [Title("Player")]
    public string PlayerName = "PAFU";
    public int PlayerAge = 80;
    
    [Title("Enemy", "SubTitle", bold: false, horizontalLine: false, titleAlignment: TitleAlignments.Centered)]
    public string EnemyName = "MODOKI";
    public int EnemyAge = 10;
}

追加で設定できる要素は以下の4種類です。
・SubTitle:サブタイトルを設定できます。
・bold:太さを設定できます。デフォルトはtrueです。
・horizontalLine:水平線の有無を設定できます。デフォルトはtrueです。
・titleAlignment:Titleの表示場所を設定します。

その5:要素の名前を分かりやすくするのだ!

「コードでStage Numを定義したけど、Inspectorでは現在のステージと表示したい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031832p:plain

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [LabelText("現在のステージ")] public int StageNum;
}

「Inspector上の名前を動的に変更したい!」 そんな方に追加情報!

Odin05.gif

コードも置いておきます!

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{   
    [LabelText("$text")] public string text = "自由な変数名";
}


敵キャラが沢山いて、キャラの名前を動的に変更したい時に便利なのかも??

その6:ドロップダウンを使って値をセットするのだ!

「予め登録しておいた値をInspectorからセットしたい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830031922g:plain

GIF動画でも分かるように型によっては検索機能も付いています。

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [ValueDropdown("speedArray")]
    public int Speed;

    private int[] speedArray = { 10, 20, 30 };
}

応用として、値に名前を付けて設定しやすく出来ます! (コードは公式のやつ持って来ちゃいました。)

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [ValueDropdown("myVectorValues")]
    public Vector3 MyVector;

    // The selectable values for the dropdown, with custom names.
    private ValueDropdownList<Vector3> myVectorValues = new ValueDropdownList<Vector3>()
    {
        {"Forward", Vector3.forward },
        {"Back",    Vector3.back    },
        {"Up",      Vector3.up      },
        {"Down",    Vector3.down    },
        {"Right",   Vector3.right   },
        {"Left",    Vector3.left    },
    };
}

↑のようにコードを書けば... ↓のように設定できます...!

f:id:PafuOfDuck:20180830031945g:plain

その7:インフォメーションを表示したい

「Inspector上にもメモを残したい!」 という方はコチラ↓↓↓

f:id:PafuOfDuck:20180830032115p:plain

ちなみに[InfoBox("お知らせ", InfoMessageType.XXX)]と書くことで、枠内のアイコンが変更できます。

f:id:PafuOfDuck:20180830032143p:plain

上から
InfoMessageType.None
InfoMessageType.Info(デフォルト)
InfoMessageType.Warning
InfoMessageType.Error
に設定したものです。

サンプルコード

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    [InfoBox("ここにお知らせが書けるよ!")]
    public int Num;
}

インフォメーションを出すかどうかをbool値で管理出来ます。

using UnityEngine;
using Sirenix.OdinInspector;

public class OdinSample : MonoBehaviour
{
    public bool IsDisplay;
    
    [InfoBox("ココに情報を書けるよ!", "IsDisplay")]
    public int Num;
}

↑のようにコードを書けば... ↓のようにインフォメーションを表示or非表示に出来ます...!

f:id:PafuOfDuck:20180830032309g:plain

おわり

バババッ!と7つ紹介しました!気になる使い方はあったでしょうか? Odinを持っているかに関わらず参考になった箇所があれば嬉しく思います!

大トリですが、締めもなくサッと終わりますよ!
執筆者の方々&読者の方々お疲れ様でしたー!!!