yotiky Tech Blog

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

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 以降は以下を参照。 …

Unity - Editor拡張で使えるUI機能の概要 ( GUI / GUILayout / EditorGUI / EditorGUILayout)

目次 目次 環境 概要 関数一覧 GUI GUILayout EditorGUI EditorGUILayout 環境 Unity 2022.3 概要 Editor拡張で使えるUI機能はクラスが4つある GUI - Unity スクリプトリファレンス GUILayout - Unity スクリプトリファレンス EditorGUI - Unity スクリプト…

Unity - Path を操作する

目次 目次 検証環境 Path を操作する Assetsからの相対パス、絶対パス Assets を含む相対パス 検証環境 LINQPad で代替 Path を操作する yotiky.hatenablog.com Assetsからの相対パス、絶対パス void Main() { //var baseDir = Application.dataPath; var ba…

Unity - UPMのローカルパッケージ参照で特殊フォルダーを共有する

TL;DR 動的にロードされるアセットだけが含まれるフォルダー(ResourcesやStreamingAssets)を対象とした場合、AssetPostprocessorやPackage Managerのイベントが利用できる可能性がある。 条件が厳しいのはUPMにアセットを含める関係上、元のGUIDを維持でき…

C# - シンボリックリンクを操作する

TL;DR .NET 6 でDirectoryクラスにCreateSymbolikLinkメソッドが追加されたため、6以降ではバッチやProcessを使わなくても C# で直接シンボリックリンクを作成できるようになりました。 この記事はディレクトリを対象としていますが、ファイルを対象としたFi…

Windows 11 - ショートカットキーでアプリを別の仮想デスクトップに移動する

目次 目次 TL;DR 仮想デスクトップ AutoHotKeyの導入 スクリプトファイル TL;DR Windows 10 で使用していた MoveToDesktop が Windows 11 では使用できない AutoHotKey を使用して同等の機能を導入する 導入すると現在のウィンドウを [Win + Alt + → or ←] …

Unity - ZLoggerを導入する

目次 目次 検証環境 導入 実行 参考 検証環境 Unity 2022.3.21f1 ZLogger 2.4.1 ZLogger.Unity 2.4.1 CsprojModifier 1.2.1 github.com github.com 導入 NugetForUnityをインストール NugetForUnityで以下をインストール ZLogger Project Settings > Package…

Unity - R3 を使った Pure C# のModel層プロジェクトの作成

目次 目次 概要 環境 手順 サンプル実装 参考 概要 ピュアC# の.NETプロジェクトでModel層を作成する R3 を導入してRxをシームレスに利用する Unity プロジェクトはすでに存在するものとする 環境 Unity 2022.3.21f1 R3 1.1.11 手順 新しいクラスライブラリ…

Magic Leap 2 - MRTK3 とOpenXRを使ったプロジェクト環境の構築

目次 目次 開発環境 MagicLeap 手順 開発環境 Unity 2022.3.21f1 MRTK3 Input 3.1 UX Components 3.1.1 Core Definition 3.1.1 MagicLeap2 MagicLeap Setup Tool 2.0.7 MagicLeap MRTK3 1.0.0-pre6 MagicLeap SDK 2.0.0 MagicLeap 基本的な手順は公式や以下…

Magic Leap 2 - 既存のMRTK3を使ったプロジェクトでMLSDKからOpenXRに移行する

目次 目次 導入 環境 手順 補足 導入 MagicLeap2のMRTK3でOpenXRに対応したとのこと。 MRTK3 for ML2 の OpenXR 対応に関してMRTK3 を使った ML2 アプリ開発が、OpenXR SDK ベースで可能になりました。新しいプロファイルを使ったものとなるので、README に…