ノートの端の書き残し

UnityやらC#やら。設計が得意かもしれない。

Unity

【Unity】Deep Profiler Supportをオンにしてビルドするだけでも多少重くなる

DevelopmentBuild Development Build: DevelopmentBuildのフラグ。これがオンなら下2つも有効にできる。 Autoconnect Profiler: 起動時にUnity のProfilerに自動で接続するフラグ。 Deep Profiling Support: ビルド後でもDeep Profileを使えるようにするフラ…

【Unity】エディタ上でだけ編集可能なパラメータ

エディタ上でだけ編集可能にする 「エディタ上で編集不可能にする」ではなく、その逆です。 ↓こういうこと ReadonlyInScript属性が付いたフィールドはインスペクタでは普通に編集できますが、スクリプトで代入しようとするとエラーで怒られます。 ネタバラし…

RoslynAnalyzer自作勉強 -特定の戻り値を許さないアナライザ-

やること RoslynAnalyzerの使い方はだいたいわかったので、簡単なものから自作できるようにします。 BannedApiAnalyzersという、特定のAPIを禁止にするめっちゃ便利なアナライザがあります。 github.com 例えばUniTaskを採用しているUnityプロジェクトではas…

Dispose漏れを検知してくれるRoslynAnalyzer「IDisposableAnalyzers」

RoslynAnalyzer 詳しくはググれば色々出てきますが、1つ参考リンクを貼っておきます。 note.com 要するに、本来のC#コンパイラでは異常と判断されない書き方を、いや俺はそんな書き方は許さない!としたい場合に、禁止ルールとして定義してコードエディタやU…

色々入ったRoslynAnalyzer「codeCracker」

github.com Code Cracker C#プロジェクトにおいて、ちょっとしたパフォーマンスの向上であったり可読性の向上に役立つRoslynAnalyerです。 個人的には、DisposableのDispose漏れを警告してくれるらしいのが嬉しくて試してみたんですが…… 最終更新が2018年 Co…

【Unity】TimelineのClipにBehaviourを生成させない

Timeline(というかPlayableAPI)の基本 Timelineはその実態を掴むのが結構難しいパッケージだと思います。(実態を掴まなくてもなんとなく使えてしまうんですが。) まず今回の話の前提として「TrackAssetやTimelineClipはScriptableObjectで、実際にアニメ…

【Unityエディタ拡張】Undo.RecordObjectの記憶範囲について

エディタ拡張をした際に、Undoに対応する Undoが効かない書き方 通常のUnityコンポーネント編集のように、ctrl + zのUndo操作、Redo操作に対応するためには、コンポーネントのクラスを直接操作せず、SerializedObjectやSerializedPropertyを介して操作する必…

Renderer.materialとsharedMaterial

Renderer.materialのGetterはマテリアルを複製する なのでsharedMaterialを使いましょう、というのはよく聞く話です。 が、これだけだと実際何が起こってるのかわからんので具体的にインスタンスIDを見てみる方がわかりやすそうです。 確認 確認用シーンとコ…

ToUniTaskしたコルーチンの寿命について

コルーチンとasyncの寿命 コルーチンの寿命はコンポーネントに依存 Unityにおいて、以下のコンポーネントを適当なゲームオブジェクトにアタッチすると、コンポーネントが破棄されるとログ出力は止まります。 public class CoroutineSample : MonoBehaviour {…

Unity2021で使えるパフォーマンス強化のAPI(要するにSpanなど)

Spanとは Unity2021でデフォルトで含まれるようになったライブラリで、System.Memoryに含まれる構造体。 source.dot.net 前からDLLを入れれば使ことはできたけども。 何をするためのものか 連続するメモリ領域を読み書きするためのもの。 配列は勿論、stacka…

AssetBundleを読み込む手段 メモリの使用量について

Addressable Asset Systemをそろそろ理解したいのだが、その前にAssetBundleのベストプラクティスを考える前提知識を整える必要がある。 AssetBundleにはいくつか利用方法(読み込み方法)があるようだが、それぞれ特徴があるようなので確かめてみる。 Asset…

全人類が待ってたUnity公式多言語対応パッケージ

Unity公式ローカライズ用パッケージが 出たぁ~~~!!(結構前) www.youtube.com あんまり個人製作でローカライズはしないと思うんですが、仕事だとかなりありがたい。 (ボタンのラベルとか、ロジックにな~んにも関係無いテキスト表示をコードで制御した…

UIElementsとUIBuilder

UIElementsとUIBuilderについて まずはUIElementsとUIBuilderについて軽く触れておきます。 Unity2019.1から新しく導入されたUIElementsについて。 簡単に使い方やどんなところが良さそうなどメモっておこうと思います。 UIElementsのいいところ 見た目をす…

SerializeReferenceでシリアライズしたときyamlファイルはどうなってるのか

先日投稿いたしました、こちらの記事の補足、というか余談です。 nigiri.hatenablog.com Unityのアセット、シーンやプレハブ、ScriptableObjectはyamlファイルとして保存されています。 SerializeReferenceを用いた場合、yamlファイルはどうなっているのでし…

SerializeReferenceとSubclassSelectorがすごい便利

Unity2019.3から使用可能なSerializeReferenceと、 docs.unity3d.com 下記で公開くださっているSubclassSelectorがすっごい便利でしたので布教したくなりました。 github.com SerializeReferenceについても素晴らしく丁寧な説明をしてくださっています。 lig…

【Unity】transform.positionのメンバ変数を直接変更できない理由

小ネタです。(言語をちゃんと理解してる人には当たり前の話です。) transform.position.x = 1f; Unityを使い始めの頃、だれしもこんなコードを書いたことと思います。 そしてエディタに怒られたことでしょう。 これを解決するために、 var newVec = new Vect…

【Unity】UnityEventのRemoveAllListenersはインスペクタから登録したコールバックを削除しない

小ネタです。 [SerializeField] private Button button; button.onClick.AddListener(callback); ButtonのonClickにはスクリプトからコールバックを登録できます。 そして、 button.onClick.RemoveAllListeners(); スクリプトから、登録したコールバックを削…

Unityレイマーチングでメタボール

簡単にレイマーチングのやり方を学んだので、試してみるのに丁度よさそうなメタボールを書いてみました。 参考にしたのはこの2つのページです。 techblog.kayac.com yagiri000.hatenablog.com 3D化しただけです。 うーん…… 何かに使える気はしないけど楽しい…

SpriteAtlasをコード上で編集する

Unity2017から導入されたSpriteAtlasという仕組み。 これは、複数の画像を一つの大きな画像にまとめて、描画命令を少なくしてパフォーマンスに貢献するための仕組みです。 詳しくはこれらを読むとわかりやすい。かも。 tsubakit1.hateblo.jp kan-kikuchi.hat…

UnityでGUIDをいじって楽する

Unityの適当なシーン(.unity)やプレハブをテキストで開いてみると、 m_Script: {fileID: 何らかの数字列, guid: 何らかの文字列, type: 3} こんな行が見つかるはずです。 「テキストファイルで開く」ができない場合は Edit -> Project Setting -> Editor -> …

ローカル関数とラムダ式

私は普段仕事でも趣味でもUnityを使っているので、基本的に用いる言語はC#です。 ゲームプログラミングで重要なのはやはり速度ですが、複数人で開発したり長期的に改修が続く場合は可読性も大切です。 Unityでは読みやすいC#でプログラミングして、それが最…