ノートの端の書き残し

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

2022-01-01から1年間の記事一覧

Clean Code読書感想文

Clean Code www.amazon.co.jp Cleanという名前から推察できる通り(にしては一般的な語ですが)、SOLID原則やクリーンアーキテクチャで有名なボブおじさんの本です。 どんな本 クリーンアーキテクチャなどの設計本よりは、具体的なコードの見た目のような詳…

コードのコメントについて、英語話者と日本語話者の違いは気にするべきだと思う

短い駄文です。 コードのコメントについて リーダブルコードのような設計本においてよく言われるのは「コメントは無くて伝わるのが一番いい」ということ。 その意図 これは「コード自体に意味を詰め込める余地があるなら全力でそうしろ」ということで、その…

計算機プログラムの構造と解釈、を読んでみた

計算機プログラムの構造と解釈 ja.wikipedia.org Wikipediaに記事があるくらい有名な古典的名著です。古典ってちょっと読むの躊躇うところがあって、タイトルは聞いたことあるけど……な状態だったんですが、この本はネットで公開されているので無料で読めるん…

【Unity】Unity Japanの動画で触れられていたTupleについての補足

C#

Unity Japanの動画 www.youtube.com 動画の概要 C#7から"タプル"が使えるよ。 タプルは"匿名構造体"みたいなものだよ。 タプルの作り方は柔軟で色々あるよ。 タプルを作るときは、メンバに名前をちゃんとつけたほうがいいよ。 タプルの使い方として、スワッ…

抽象化は何も継承やインターフェースの実装だけを言うのではない

抽象化 プログラミングの話は一旦横に置いといて。 「抽象化」とは「物事のある側面のみを切り分けて考えること」と言えます。 何当たり前のこと言ってんだ……と思う人は多分大丈夫、理解している、というか、普段の思考に抽象化が染み付いているはずです。プ…

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

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

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

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

読書感想文「Clean Craftmanship」

Clean Craftmanship 規律、基準、倫理 www.amazon.co.jp ~50% テスト駆動開発 前半は超具体的にテスト駆動開発の手法説明です。驚くくらい具体的。ボウリングのスコア計算とか、素因数分解とか、実際の仕事で使うか?というような いかにも教育的な実装例に…

Renderer.materialとsharedMaterial

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

インスタンスはArrayPoolから借りてくるToArray

C#

ArrayPoolから借りてくるToArray 以前の記事で触れた、UniTaskにあったArrayPoolUtilをほぼパクって汎用化させたもの。 nigiri.hatenablog.com /// <summary> /// 生成する配列をArrayPoolから借りてくる /// </summary> public static class ArrayPoolUtility { /// <summary> /// ToArr</summary>…

コードのコメント

フワッとしたポエムです。 コードにコメントはそれなりに書いた方がいい リーダブルコードなど、良いコードを書くテクニックとして、コメントに書くくらいならコードにその情報を載せろ、というものがあります。 それはその通りだと思いますが、それとコメン…

ArrayPoolUtil

C#

ArrayPool System.Buffers.dllに含まれるクラスで、名前の通り配列のオブジェクトプールです。 C#は配列を普通に作るとGC管理下であるマネージドヒープに必ず確保しなければならないというありがた迷惑な仕様をしていますが、この厄介な性質をほぼ完全に解消…

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

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

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

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

公開したリポジトリの継続的な管理ができる人すごいねという話

半年くらい前に、UnityのAddressableで暗号化AssetBundleを扱う記事をQiitaに投稿しました。 qiita.com ビルドシステムの改造部分はあんまり広まっていない且つ現実的な手法を提供できたと思っており、自分が投稿した記事の中では一番評判がいいです。 この…

継承を使うな

一応本記事はC#を想定して書いている。が、オブジェクト指向型の、継承が言語機能として用意されている言語なら同じことが言える。 継承 継承を使う際にはリスコフの置換原則を守るように言われる。 リスコフの置換原則とは S が T の派生型であれば、プログ…

Unreal Engine5勉強 残像を残す

UE5

空中ダッシュで残像を残す こんな感じ ダッシュ自体は前に作っているので省略。 実現までやること 残像用のActor BPを作る。(操作キャラと同じメッシュ構成にする) 残像用のマテリアルを作って残像用Actor BPのメッシュに割り当てる。 ダッシュ中一定間隔…

Unreal Engine5勉強 Niagara編

Niagara Unreal Engineにおけるパーティクルシステム。ナイアガラ。 Cascade(カスケード)の後継?と思われる。名前的に。 UE5でカスケードを作る方法はわからないが、カスケードアセットをインポートして使用はできる。 また、カスケードをナイアガラに変…

Unityプログラマ視点のUnreal Engine5メモ

UE5

UniRx(イベント) イベントディスパッチャーでイベントが生成できる。イベントさえ書ければ根本的な問題は解決できるが、ブループリントでも使い勝手をRxに近付けたいところ。 非同期 だいぶやり辛い感じがする。一定時間毎フレーム何かする、とかはマクロ…

UEブループリント勉強中

UE5

Unreal EngineのThird Person Templateを使ってブループリントの練習中…… 成果物 カスタムロボの空中ダッシュ的なやつのつもりです…… ダッシュ回数制限があって、着地したら回数が回復する。 ブループリントはこんな感じになりました。もともとのThird Perso…

プログラムはなぜ動くのか 第3版

プログラムはなぜ動くのか 第3版 www.amazon.co.jp を読みました。以下、感想です。 感想 恥ずかしながら詳細を知らなかったことが多いです……。もちろんヒープやスタック、データ構造は意識しているのですが、実際のCPUの動きを詳細にイメージしてはおらず、…

良いコード / 悪いコードで学ぶ設計入門(ミノ駆動本)読書感想文

書籍Amazonリンク www.amazon.co.jp 本の概要 オブジェクト指向を基本とした設計思想についてTwitterやQiita、テックコンなどで発信を行っているミノ駆動さんの設計本。 本の感想 読みながら、各章ごとに軽く感想を書いていきます。 1章 悪しき構造の弊害を…

僕はLinqのことを何もわかっていなかった

Linq コレクションのイテレーションを気軽に回せる処理。 var intEnumerable = Enumerable.Range(0, 10); var intList = intEnumerable.ToList(); // 0, 1, 2, ... , 8, 9 var oddList = intEnumerable.Where(value => value % 2 == 1).ToList(); // 1, 3, 5…

Pythonをチラッと触る

Pythonをチラッと触ってみました。 動機としては、UE5いじってたらエディタ拡張(というか業務効率化手段?)としてPythonAPIが用意されてるようなので、まぁ多少書けるようになっておくかというそれくらいのものです。 なお、実は以前にUnityの機械学習を動…

UE5チュートリアル実施中

UE5の正式版がリリースされまして、公式のチュートリアルを見ながらお勉強中です。 learn.unrealengine.com UE5チュートリアルをやる理由 特に無いですが、強いて言えば、Unityしかできないのはダメだろうとは思うからですね。 自分の場合は「単にツールが使…

実践Rustプログラミング入門読んだ(全部やったとは言ってない)

実践Rustプログラミング入門 https://www.amazon.co.jp/dp/4798061700 Rustに興味があって、ちまちま読んでいました。興味があった理由はやっぱり、「速くて安全らしい」というところですね。基本的に作るのがゲームということもあって、特に速さは興味を引…

自分の書いたQiita記事を振り返ってコメントしてみる

概要 ちょっと前からQiitaにも記事を投稿するようにしました。今回は、自分で書いた記事に自分でコメントして、内容の自画自賛とか言い訳とかしようかなと思います。 ところで、Qiitaにも投稿を始めたはいいものの、こっちのブログとどう使い分けるかは決め…

Unityの実行中にコンパイルが走らないようにする設定、シェーダーは含まなくてよくない?

Unityでは、エディタ再生中にスクリプトを変更した場合の動作を設定できます。 多分、大体の人はRecompile After Finished Playingに設定しているだろうと思われます。 実行中にスクリプトいじっても、再生を終了するまでは反映しない設定です。 一応、リコ…

Unityにおける、非MonoBehaviourなC#の依存関係と、Hierarchyの木構造は分離されるべきだった説

C#のオブジェクト依存関係図 私たちがUnityで開発している際に書くスクリプト。例えば以下のような2つのクラスがあるとします。 public class ClassA { private ClassB _instanceB = new ClassB(); } public class ClassB { ...... } このとき、クラスA(ま…

全ての基本は、使用者の目線に立つこと

チーム開発におけるコーディング、設計、アーキテクチャの話は数あります。 自分がこれまでとても参考になったなと感じているのは例えば以下の書籍です。 www.amazon.co.jp www.amazon.co.jp www.amazon.co.jp www.amazon.co.jp これらは全てチーム開発時(…