【Unity Editor】AssetDatabase.SaveAssetIfDirty()を使って変更点を保存する

UnityのEditor拡張時、ScriptableObjectを保存したい時に調べたメモになります。

SaveAssetIfDirty

SaveAssetIfDirtyUnityはアセットが変更された場合の保存時に利用をします。 指定されたアセットが変更されている場合にのみ、そのアセットを保存するので、パフォーマンスの向上に役立ちます。

public class HogeScript : Editor
{
    private void Save()
    {
        // ScriptableObjectの変更を行う
        

        // アセットが変更されていれば保存を実行
        AssetDatabase.SaveAssetIfDirty(targetScriptableObject);
    }
}

SaveAssets

同じようなメソッドでSaveAssetsがあります。 こちらは、変更があったアセットが何であるかに関係なく、すべての変更が保存されます。

public class CustomEditorScript : Editor
{
    void SomeFunction()
    {
        // 何らかのアセットの変更を行う

        // アセットが変更されていれば保存を実行
        AssetDatabase.SaveAssets();
    }
}

最後に

以前まではSaveAssetIfDirtyを知らなかったのですが、意図的に保存する処理を書く場合は大概SaveAssetIfDirtyを使えば大丈夫でそうです(パフォーマンスも良さそう。

List<T>.AsReadOnly() について

自分用のメモのような記事です。

var list = new List<string> { "tarou", "hanako", "jirou" };

// 読み取り専用に変換
ReadOnlyCollection<string> readOnlyList = myList.AsReadOnly();

readOnlyListは要素へのアクセスできますが、配列要素の追加や削除、変更はできません。 ReadOnlyリストにすること値を保護しながら他のコンポーネントやクラスへ渡すことができます。

2023年目標

仕事

ここ1年のスケジュールがヤバそうなので、スケジュール送れないようするのが目標。 上手く回していくのが大事なのですが、各所相談をしっかりして調整もしていく必要があるので、臨機応変に動けるようにする。

応用上技術者試験 に受かる

4月の 応用上技術者試験 に合格する。 試験を受ける目的は、IT周りに広い知識を得るためなのですが、どうせなら合格したいと思っています。 ただ、去年の10月から週一(1時間)ほどやっているのですが、5割ほどの得点率ぐらいでした。 ここまだ本と過去問をやっているのですが、自分は理系出身でないので、全然知らないことがあり知識は増えている気がします。

合格は6割なのですが、おそらくもっと本腰を入れないと受からない感じがするので、頑張らないと行けない。

ちょびちょび絵の勉強を勉強をしているのです。

C101で描いた表紙が直近時間(3日くらい)をかけて書きました。

上手く行かなかった点

  • 線画 : 単純に上手く引けない、線と線とのつなぎ部分、あとグニャグニャな線になる。
  • 色 : そもそも何も勉強していないのですが、ただ色を塗るしかしていない。
  • 影 : 影が適当に引いているので、納得感のある影を引きたい
  • 全体 : そもそも全体的に最低限のレベルになっていない。

おそらく次のコミケの出来がどうなるかですが、線画と色を頑張りたいと思っています。

【C101】サークル「albatrus」にお越しいただきありがとうございました!

本日、東京ビックサイトで行われたコミックマーケット101・西-す05b「albatrus」にお越しいただきありがとうございました。 夏のC100に続いてサークルスペースをいただくことができたので、毎回恒例のUnityの本を持って行きました。 albatrus.com

お誕生席

今回は初めてのお誕生席でした。 dic.nicovideo.jp

ただお誕生席だから何か特別なことないので、普段どおりの持ち物を持っていきました。

前回はなかったチラシが今回は机の上に置いてました。

今回のサークルスペース

1点ミスをしてしまった点がポスターのサイズです。 思ったより一回り小さかった(A2)ので、次はB1にしてみようかと思います。

配布本

「UNITY UI BOOK」を書きました。

表紙

今回もオンデマンド印刷で1冊あたりの値段を押さえました。 コロナ対策は前回に引き続き行いブックカバーを見本誌につけました。

配布結果

今回は20部印刷をしました。 前回も20部刷って、12:00くらいに完売だったのですが、部数は増やしても良かったのですが、大晦日、帰省する予定があり、同じ部数にしました。

今回は12:30頃に完売しました。

感想

周りのサークルさんを見ても、明らかに初動、技術書周りのサークルの人の流れがない状態でした。自分のサークルも11:30くらいまでは本当に止まってくる人が少なかったです。 前回は、サークル参加者の方が買いに来てくれる割合が多かったイメージがあったのですが、今回は午前組の入場が入り始めて、会場の人の流れも良くなった感じです。 コロナ前と明らかに人の層が変わってきていると今回で確信できました。 Unity(ゲーム関連のサークル)もおそらく今回2つしかなかったので、そのあたりも影響しているかもしれません。個人的には今後も同じ体勢だと厳しくなってきそうだなと感じました。

C102に関しては申込みが3月ぐらいまであるので、検討中です。もしスペースをいただくことができましたら、その際はよろしくおねがいします。

【Unity】コンポーネントのプロパティ名を取得する

UnityのEditor拡張時に、プロパティ名が知りたいときがあります。 プロパティ名を知る方法はいくつかあります。

差分を見る

Gitの差分を見れば、プロパティ名がわかります。 SourceTreeの例ですが、画面上に次の画像のように表示されます。

SourceTreeの差分の例

Editor拡張

SerializeObjectを使えば、コードで取得が可能です。 UnityのTimelineを拡張する際に、GatherProperties関数で使えそうです。。

var serializedObject = new SerializedObject(component);
var iterator = serializedObject.GetIterator();
while (iterator.NextVisible(true))
{
    if (iterator.hasVisibleChildren)
    {
        continue;
    }

    driver.AddFromName<TBinding>(component.gameObject, iterator.propertyPath);
}