【Unity】配列の引数でparamsパラメーターを使う

引数に配列を指定する場合、何も考えずに実装をすると次のようになると思います。

private void Hoge(string[] texts)
{

}

この関数を使う場合、一旦配列を作って引数に渡して上げる必要があります。

var texts = new[] { "hoge", "hoge2","hoge3" };
Hoge(texts);

引数に指定する配列は別途どこかで定義されているのであればこのままで良いと思うのですが、先程のようにわざわざ配列を定義するのは面倒くさいです。 そこでparamsパラメーターを使うと便利になります。

docs.microsoft.com

params パラメーター

引数の前にparamsをつけます

private void Hoge(params string[] texts)
{

}

引数にそのまま配列の要素を設定できます。

Hoge("hoge","hoge2","hoge3");

// こちらもいけます
var texts = new[] { "hoge", "hoge2","hoge3" };
Hoge(texts);

【Unity】Timeline用のショートカットを実装する

Timelineで何かしらショートカットを登録したい場合、専用の属性(TimelineShortcutAttribute) がありますのでこれを利用すると簡単に実装できます。

docs.unity3d.com

 [TimelineShortcut("Custom Shortcut", KeyCode.RightArrow, ShortcutModifiers.Shift)]
public static void CustomShortcut(ShortcutArguments args)
{
}

属性の設定

この属性には次の3つの指定ができます。

  • ID : このショートカットのID、好きに命名して良い
  • Defaultkey : 適切なKeyCodeを設定
  • ShortcutModifiers : AltやShiftなどKeyCodeと組み合わせるKeyがあれば指定する。

上記のコード例では 「Shift + →」のショートカットになります。

ShortcutArguments

付属情報としてShortcutArgumentsが渡ってきます。もし必要ならこちらを使います。

  • object : TimelineWindow
  • ShortcutStage : Endが帰ってくる?

注意

いざショートカットを使うと、次のWindowが出れば重複していることがわかります。

既存のショートカットとの重複警告

すでにTimelineではデフォルトでショートカットが登録されています。

これはUnity => Shortcutsで確認ができます。

categoryをTimelineに合わせて、空いているショートカットがないか探しましょう。 ShortcutModifiersで組み合わせると使えるショートカット増えそうです。

【Unity】TimelineのUndo処理

何かしらClipを操作するEditor拡張を作る場合に変更を取り消したい場合があるかと思います。 その場合、Undo処理を実装すれば Command + Z で簡単に戻すことができます。

UndoExtensions

通常のEditor拡張ですがUndoクラスを使うのですが、Timeline周りではUndoExtensionsに色々と便利な処理が準備されています。

docs.unity3d.com

例えば、clipの場合には UndoExtensions.RegisterClip を利用します。 clipを操作する「何かしらの処理」の前に呼びます。

UndoExtensions.RegisterClip(clip,"Edit clip");

// 何かしらの処理

TrackやMakerにも専用の関数が用意されています。

東京競馬場へ行ってきました - フローラS

コロナの影響で、事前に抽選を通らないといけなくなったため、今回は11月以来の来場でした。

天気は余り良くなく、午後はずっと雨が降っていました。 競馬場へ行く目的は写真を取ることなので、濡れても大丈夫なように装備(カッパなど)はしっかりと整えてきています。

コロナ対策でマス目が引かれている

写真など

写真撮影位置は、ゴール板から少し手前の場所です。 ゴールから大体200m手前付近から写真を取り始めます。

フローラSを勝ったエリカヴィータ
ゴール前付近は、報道陣のカメラマンがいるため邪魔になり上手く移せない場合があります。 またゴール過ぎあたりでは自分の手元のレンズでは大きく写すのが難しいです(大きく撮れても、騎手が手綱を緩めて真剣に走っていないことが多い)
ボーデンはまた2着

ちょうど目の前
ゴール手前300mくらい。ここだと写真取るのには遠い
ダートはそもそも遠いので目の前でこれくらいの大きさ

武豊

武豊騎手のファンなので勝ってほしかったが、最高で3着だった......

蛯名調教師

今年から調教師の蛯名元騎手。

佐々木朗希投手の連続完全試合のかかった試合を観てきました!

約7年ぶりの千葉マリンスタジアム。 チケットは1ヶ月前くらいに取っていたのですが、何かのめぐり合わせか佐々木朗希投手の連続完全試合なるかどうかの試合になってました。

天気は余り良くなかった

コロナで海浜幕張駅で降りるのも2年以上空いていました。 この日はチケット完売ということで、どこもかしこも人だらけ。 毎回球場に行くと何かしら記念グッツを買うのですが、この日はそれどころではありませんでした。

球場前では、ちょうど1週間前に達成された佐々木朗希投手のイベントをしてました。

完全試合の記念パネル

記念の新聞?

今回は初めて一眼レフカメラを持ってきましたが、自分が持っているレンズでは余り大きくれませんでした。(席が4階席というのもありましたが)

話題のBIGBOSSも撮れました。

BIGBOSS監督

感想

試合の結果はご存知の方多いかもしれませんが、終盤まで緊張感のあるゲームでした。 この日はとても寒くなる予想で、ダウンジャケットを着ていったのですが、現地は全然寒くなく荷物になっただけだったのが唯一の残念な点でした。

【Unity】SessionStateで値を保存する

SessionStateはエディタ起動時のみ値を保持する仕組みです。 エディタ拡張時、SerializeFieldなどで保持しなくても良い重要度の低い値を保存するときに便利に使えます。

保存

保存するKeyを定義します。 これは取得する際に必要になります。

string key = "Save_Key";
bool isHoge = false;
SessionState.SetBool(key, isHoge);

取得

Keyを使って取得します。 第2引数はデフォルトの値になります。

var isHoge =  SessionState.GetBool(key, false);

種類

上記ではBoolを使いましたが、次の種類の型に対応をしています。

  • Bool
  • Float
  • Int
  • Array
  • String
  • Vector3

【Unity】Presetを使ってコンポーネントの設定の自動化を行う

Unityの機能にPresetと呼ばれる機能があります。

docs.unity3d.com

プリセットは特定のコンポーネントの設定を保存して、それを同じコンポーネントで使うことができます。

プリセットの保存

例としてImageコンポーネントの「Raycast Target」を外したプリセットを作ってみます。

適当にImageコンポーネントをアタッチして、Raycast TargetをOffにします。

f:id:albatrus:20220112142108p:plain
ImageのRaycast Targetを外す

コンポーネントの左上に上下矢印ボタンがあります。

f:id:albatrus:20220112142233p:plain
真ん中

Save Current to...を押すとプリセットが作成されます。

f:id:albatrus:20220112142623p:plain
Save Current to...

プリセットを利用する

プリセットを利用する場合、上下矢印ボタンを押して、対象のプリセットを選択します。

f:id:albatrus:20220112143436p:plain
プリセットを利用する

自動設定をする

プリセットの設定で「Add to image default」を押せば、該当のプリセットをデフォルト設定にすることができます。

f:id:albatrus:20220112143611p:plain
デフォルト設定