yotiky Tech Blog

とあるエンジニアの備忘録

Unityゲーム開発における実践的な立体的設計アプローチ

※ChatGPTとの壁打ちの雑メモ。 雑すぎて人に読んでもらうにはわからなそうなので、遂行するため一旦閉じ。

Unity - CancellationTokenの生成・使い方完全ガイド

UniTask(Cysharp製)で非同期処理を行う際に欠かせない CancellationToken の使い方を、生成方法・基本構文・応用・GC削減テクニック・ベストプラクティスまで、完全網羅で解説します。 目次 目次 ✅ CancellationToken の生成・取得手段【完全リスト】 1.…

Unity - 横断的な例外処理

UniRxやUniTaskなどを使った場合の横断的な例外処理についてのメモ書き。 基本的にUniRxでのExceptionは、ストリームが壊れないように堅牢な方向に機能が実装されている。ストリームの内から外へ例外を搬出するのは楽ではない。そういう閉じた世界(例えば画…

Unity - UnityWebRequestをToUniTaskしてキャンセルするとAbortが呼ばれるようになってる

メモ書き 2018年の記事。Abortが呼ばれなかった様子。 [UniRx.Async] UnityWebRequestAsyncOperationConfiguredAwaiter周辺で困った話 #UniTask - Qiita その話のIssue。 UnityWebRequest cancellation is not call UnityWebRequest.Abort · Issue #361 · ne…

Rider - Tips

目次 目次 Tips どこでも検索 (Search Everywhere) スコープとファイルカラー 検索ダイアログ一般 スコープ(Scope) ファイルカラー 使い所 参考 Tips どこでも検索 (Search Everywhere) ショートカットキーは、 Shift 2回 もしくは Ctrl + ,。 使い方は以下…

Unity - Sentry を利用する

目次 目次 検証環境 導入 基本 構成画面 プログラム 初期化 スコープ パッケージの分離 Web画面 Issues Discover Tag User 検証環境 Unity 6000.0.34f1 Sentry Unity 3.0.2 導入 公式ドキュメント。 docs.sentry.io SentryのWebページから、Settings > Proje…

LitMotion Animation を拡張する

注意点として、Awake で実行すると予期せぬ動きになるのでStart以降で実行するのが良さそう。 完了 モーションを完了させる。未再生の場合は再生してから完了させる。 モーションは再生中のままになる。 public static void Complete(this LitMotionAnimatio…

Fork - git worktreeを利用する

検証環境 Fork 2.6.0.0 使い方 Fork で Worktreeを使う場合、メニューから「Add Worktree...」を実行する。 現状メニューからしか追加できない。 Worktreeに追加できるのは、ローカルに存在するブランチのみ。ロケーションでディレクトリを指定する。 次の場…

Unity - 自作パッケージの dependencies の gitベースの依存関係を解決する

Unity Package Managerで自作のパッケージを参照する場合、自作のパッケージのpackage.jsonにdependenciesを設定しても、gitベースの依存関係は解決してくれない。 以下のパッケージを追加することで、gitベースの依存関係を解決してくれるようになる。 gith…

UnityにおけるDI依存症への警告 (Warning excessive dependence on dependency injection in Unity)

はじめに 昨今Unity界隈では、DIが流行していると言っても過言ではない。 依存性注入(DI)とDIコンテナは、モダンなソフトウェア開発において広く使用されているパターンだが、その使用には慎重な考慮が必要である。特にUnityのようなゲーム開発環境では、…

複数のリポジトリをモノレポ化する (multirepo to monorepo)

TL;DR 複数のリポジトリをモノレポ化した際の備忘録 tomono スクリプトを修正したスクリプトを使用 リポジトリを移行することにフォーカスした記事 以下の内容はこの記事では扱わない モノレポ自体の説明や移行の検討 CI/CD、ツールなど 運用ルール サンプル…

error: Authentication required: You must have push access to verify locks

複数アカウントを使ってて、操作対象のリポジトリとは異なるアカウント情報が使われてる時に起きてた。 リポジトリを持つアカウントで操作するように設定したら行けた。

複数のGitHubアカウントを使わないようにしてもアカウント選択画面が出続ける場合の対処方法

GitやForkで複数のアカウントを使い分けれるようにしていたが、設定を消して1つにしてもコマンド実行時にアカウント選択画面が出続ける場合の対処方法。 設定でアカウントが1つになっていることを確認してみる。 ~/.sshの鍵 ~/.ssh/config Forkの設定 それで…

UnityにおけるViewとModelの境界線 (The View and Model Boundary in Unity)

前提 ViewとModelは、MVPのViewとModelのイメージ 以下は自分の認識 MVxはそもそもViewをView以外とどう切り離すかの話なので、Model=View以外の処理 DDDなどのドメインは、システム化するメインのルール、仕様のこと Model⊃ドメインの関係 UnityにおけるVi…

git lfs push が100%で止まって終わらない問題

TL;DR 前半は結果的に上手く行かなかったので、結論は追記の方参照されたし 試行錯誤 GitHubでリポジトリの統合(モノレポ化)の検証をしてて起きた事象。 以下のような状態から10時間以上経過しても終わらなかった。 $ git lfs push monorepo --all Uploadi…

REST API がゲーム開発に向かない理由 (Why REST API is not suitable for game development)

ゲーム開発にREST API が向かない理由は以下の通り。 あらかじめ仕様の全体を見通すことができない 処理もデータも複合されたものを求められる事が多い 仕様の変化が激しい REST REST の原則は以下の4つがあるらしい。 原典には6つあるとかないとかあるが、…

コマンドプロンプト(Git Bash) の表示行数を増やす

コマンドプロンプトのタブの外側を右クリックして設定を開く。 左のメニューから「コマンドプロンプト」を開いて、追加の設定 > 詳細設定 > 履歴のサイズ で変更可能。 Windows 11のデフォルトは 9001。 Fork の Console からなど、「コマンドプロンプト」で…

投げっぱなしのタスク処理(async void、UniTask.Void、Forget)

async void Awake() { try { Debug.Log("async void"); await UniTask.Delay(5); throw new Exception($"async void exception : frame {Time.frameCount}"); } catch (Exception e) { Debug.LogError("catch exception:" + e.Message); } } private void St…

ドメイン駆動設計(DDD)がゲーム開発に向かない理由 (Why DDD is not suitable for game development)

ドメイン駆動設計は、Wikipediaによると以下の説明がなされている。 ドメイン駆動設計(ドメインくどうせっけい、英語: domain-driven design、DDD)は主要なソフトウェア設計手法の一つであり[1]、ドメインエキスパートの言葉に基づき、ドメインにおけるプ…

Advent Calendar 検索 2024

TL;DR Xで「Advent Calendar」を含み、いいねが10個以上ついた投稿を1日毎に検索するリンク集 カレンダー Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

エンジニアリングマネージャー(EM)とは

「エンジニアリングマネージャー」と言われて何をする人かピンとこなかったので、軽く調べてまとめる。 まず、EMと言うと「エンジニアリングマネージャー」と「エンジニアマネージャー」に別れるらしい。 どっちが正しいのか分からないのでGoogleで調べてみ…

Slack - ワークフローの投稿メッセージに投稿日以外(翌日等)の日付を含める

TL;DR Slackで扱える変数は投稿日時のみ Google スプレッドシートを踏み台にして、カスタマイズした文字列を取得する 応用すれば結構色々できそう 目次 TL;DR 目次 手順 スプレッドシートに変数を用意する ワークフローを作成する 実行結果 手順 スプレッド…

LINQPad - BenchmarkDotNet を利用する

NuGet Manager で BenchmarkDotNet を追加する。 属性をつけてそのまま実行すると次のエラーが出力される。 // Validating benchmarks: // * Assembly LINQPadQuery, Version=1.0.0.569, Culture=neutral, PublicKeyToken=null is located in temp. If you a…

Unity - Editor 拡張のチートシート

目次 目次 検証環境 全般 リファレンス OnGUI Unity 起動時の処理 値の更新と保存 フォルダ構成 Editor フォルダ リソース Resources フォルダ Editor Default Resources フォルダ 拡張対象 オリジナルウィンドウ 既存ウィンドウ Inspector Hierarchy Projec…

Visual Studio Code - 拡張機能「Text Tables」

概要 Markdownのテーブル作成を少し便利にしてくれる拡張機能。行や列の入れ替えが簡単にできる。 marketplace.visualstudio.com 目次 概要 目次 機能 コマンド Table Mode 補足 機能 コマンド コマンドパレットの呼び出し Windows : Ctrl + Shift + P Mac :…

Unity - 既定のウィンドウのクラス名をすべて取得する

private void Main() { var builder = new StringBuilder(); var list = GetAllEditorWindowTypes(); foreach ( var n in list.Select(x => x.ToString()).OrderBy(x => x) ) { builder.AppendLine( n ); } Debug.Log( builder.ToString() ); } private stat…

Unity - シンボリックリンクを操作するエディター拡張

機能 フォルダのみ操作可能 ルートで指定したディレクトリ配下のシンボリックリンクを検索して一覧表示 シンボリックリンクの作成と削除 ソースコードは以下に。 github.com

C# - 管理者権限でコマンドプロンプトを実行する

Verb に RunAs を設定して、UseShellExecute を true にする。 Hidden が設定されている時に、WaitForExit で待機すると処理が終了しない可能性があるので注意。 public static class Cmd { public static void CreateSymbolicLink(string src, string dest)…

LINQPad - LINQPad 5 で使われる .NET Framework のバージョンを確認する

LINQPadはインストールされている最新 .NET Framework 4.xを対象としている。 以下のフォーラムで最新のバージョンが何であるか確認する linq ファイルが共有されている。 forum.linqpad.net 以下コードの抜粋。 void Main() { GetFWVersion().Dump(); } sta…

C# - シンボリックリンクを操作する(.NET 5以前)

TL;DR .NET 6 でDirectoryクラスにCreateSymbolikLinkメソッドが追加されたが、5以前では使えないため Win32API を使って操作する。 注意する点は実行に管理者権限が必要なため、Unity などから利用するのは難しいかもしれない。 .NET 6 以降は以下を参照。 …