すぎしーのXRと3DCG

主にXR, Unity, 3DCG系の記事を投稿していきます。

【VRM, glTF】3Dアバターファイルフォーマット "VRM" の構造をのぞいてみよう

本記事のテーマは「"VRM" の中身を覗いてみよう」です。ガチガチな解説ではなくおおまかにイメージできるぐらいで紹介しようと思います。

UnityでMoqを使う (Unity2021バージョン)

こちらは クラスター Advent Calendar 2022(2ページ目)の17日目の記事です! 前日はスワンマンさん (@Swanman) の「Unityのエディタ拡張で動的にメニューを追加・削除する」でした! まさかエンジニアではなくカスタマーサポートの方からReflectionを使っ…

【GitHub Actions】Composite ActionのTipsと注意点

概要 動作環境 用語 使用するプロジェクト Composite Actions の実装 Composite Actions を組み込むワークフロー Composite Actions 対応 Composite Actionのファイル構成 Composite Actionの組込方針 .Netのビルドの一連の流れを集約 (複数のステップを1つ…

【Unity Localization】 GCPのサービスアカウントでプライベートSheetsと連携 (Cronジョブ対応含む)

概要 前回の記事 動作環境 備考 GCPのサービスアカウント対応手順 サービスアカウントの作成 サービスアカウントの認証用JSON形式の鍵をダウンロード 対象のSheetsにサービスアカウントのアクセス権限を付与 GCPのサービスアカウント向けSheetsServiceProvid…

【Unity Localization】 複数のStringTableCollectionを一括PullのTips (拡張ツール提供有り)

概要 環境 補足 StringTableCollection GoogleSheetsService Tips スクリプトで StringTableCollection をPullする方法 複数のStringTableCollectionを一括でPullする方法 StringTableCollectionを一括で取得するEditorコード 余談、公式サンプルコードにつ…

GitHub ActionsのWindows self-hostedでpwshとbashを使う方法

今回は GitHub ActionsのWindows self-hostedでpwshとbashを使う方法を紹介します。 残念ながら素のWindowsマシンでshellとしてpwshやbashを指定しても使用することができません。 Windows上でpwshとbashが使用できるとCIで行えるフローの選択肢が大幅に増え…

pwshをコマンドラインでインストールしてPATHを通す方法

前回に続いて、今回はWindowsのコマンドラインで PowerShell7 をインストールする方法を紹介します。 PowerShell5はWindowsに標準で搭載されていますが、`pwsh` コマンドは搭載されていませんが、 PowerShell7をインストールすることで `pwsh`コマンドとして…

【Windows, PowerShell】SETX vs. [Environment]::SetEnvironmentVariable

`SETX` と `[Environment]::SetEnvironmentVariable` の違いに躓いたので調査したことを共有します! どちらもWindowsで環境変数を設定する手段ですが、細かいところで違いがありました。 知らずに使ってしまうと最悪Windows上でアプリが起動しなくなるかも…

Git for Windowsをコマンドラインからインストールする方法

今回はWindowsのコマンドラインでGit for Windows (Git Bash) をインストールする方法を紹介します。 Git for WindowsはWindows上でGitやBashを使用する場合にインストールしておくと何かと役に立つパッケージですが、 GUI経由でのインストールは必要オプシ…

【Unity, XR】Single Pass Instanced向けURP Render FeatureのTips 【2020.3, 2021.2】

概要 追記 略語 動作環境 Tips Unity 2020 ポストエフェクトでは cmd.Blit は使用不可で cmd.DrawMesh を使用 サンプルのColorBlitRenderFeature について (2021.2以降) SwapBufferはSPIでは実質的に使用不可 画面キャプチャは不透明オブジェクトのみ 完全な…

【Moq】Moqはメソッドチェーンでまるごとモック化できるよ

メソッドチェーンのモック化 何が起こっているの? Setupで指定しない場合はdefault 検証コード 雑感 メソッドチェーンのモック化 IFoo -> IBar -> IBaz のようにinterfaceのプロパティが連結されている場合、 以下の2つのモック化は同等になります。 // set…

【Unity, VSCode】Visual Studio Code Editor 1.2.5 への更新のススメ

概要 対象Unity 1.2.4の問題 1.2.5のススメ 雑感 概要 Visual Studio Code Editor 1.2.5 が 02/09 (日本だと2/10) に公開されたため、 1.2.4の問題と合わせて、1.2.5を紹介したいと思います。 今回はVSCode愛用者向けの記事となります。 対象Unity Unity 202…

【Unity】Transparentシェーダー レンダリングTips (RenderQueue編)

概要 動作環境 検証対象のTransparentシェーダー Transparentシェーダーの特徴 アルファブレンドの場合、描画の順番で結果が異なる アルファブレンドは描画順で結果が変わる理由 加算ブレンドのみの場合、描画の順番に関わらず結果が同じ RenderQueueが2501…

【Unity C#】 IReadOnlyListとアロケーション

概要 環境 IReadOnlyList の アロケーション発生ポイント foreach使用時などのIEnumerable.GetEnumerator アロケーションの原因 アロケーションの回避方法 IEquatable<T>を実装しない値型(struct)でEquals アロケーションの原因 アロケーションの回避方法 IRead</t>…

【Unity C#】 IReadOnlyListの紹介

概要 IReadOnlyList について 注意事項 追記 2022/02/25 2022/02/26 IReadOnlyListは読込専用のList C#標準の一次元配列はIReadOnlyListにキャスト可能 IReadOnlyCollectionとの違いは index指定で要素にアクセスが可能なこと IReadOnlyListのTに値型を宣言…

【Extenject】Composite Installer を紹介!

概要 Compsote Installer について Compositeパターン Compsote Installer の活用術 1. 再利用可能なInstallerグループを作成可能 2. 疎結合Installer, 抽象Installerとして活用 3. 特定の機能提供向けInstallerとして配布 Compsote Installer の使い方 Comp…

【GitHub Packages for Unity】限定配布も可能, GitHub Packages で Unity アセット配布

Unity向けにGitHub Pakcagesでアセットを配布する方法を紹介

(旧)【GitHub Packages for Unity】限定配布も可能, GitHub Packages で Unity アセット配布

以下にページに移行しました tsgcpp.hateblo.jp

【感想】 Adaptive Code のススメ

概要 知見 リスコフの置換原則 (Liskov Substitution Principle) の保証 LSPの概要 LSPの保証方法 LSP保証のテストクラスのサンプル テスト対象のinterface ルール定義 ベースのテストクラスを定義 継承クラスのテストを作成 テストの実行 LSPのまとめ 投機…

【Unity】OculusIntegrationがPackageManager対応しやすくなりました!

概要 環境 追記 Meta公式によるPackage Manager対応 (2022/10/12 追記) PackageManager対応方法 1. Oculus Integration パッケージ化専用のUnityプロジェクトを作成 2. Oculus Integrationをインストール 3. gitignoreにOculus向け設定ファイルを追加 4. pac…

【Unity】Physics.SyncTransforms の特性調査

経緯 検証環境 前知識 物理オブジェクトの物理エンジンへのFlush Physics.SyncTransforms Physics.autoSyncTransforms Flushの発生条件 Flushの発生タイミング 登場人物 PlayerColliders AnimationColliders PhysicsAnimationColliders DisabledAnimationCol…

(旧)【Extenject】Composite Installer を紹介!

以下にページに移行しました tsgcpp.hateblo.jp

【Moq】UnityでのMoq導入方法 と MoqのTips集を紹介!

概要 Moqの導入 Github Moqの依存ライブラリとそのライセンスについて MoqをUnityに導入する方法 Moqおよび依存ライブラリのダウンロード nupkgを展開 dllファイルの取り出し .NET Standard 2.0 .NET 4.x or .NET Framework dllのプラットフォームの指定 Sys…

【Extenject】AsTransient, AsCached, AsSingle を使い分けよう!

概要 動作環境 関連 前知識 ContractType と ResultType について Zenjectによるインスタンス生成 コンストラクタが複数ある場合 WithArguments の引数の数について Scope (AsTransient, AsCached, AsSingle) Scopeの違い AsTransient AsTransient の 利用例…

【Unity】Shader Graphで走査線っぽいもの

概要 動作環境 今回作るもの 実装機能 シェーダーテクニック UVノード と 分離(Split) Fraction Time + UV + Split + Fraction 三角波 三角波 + Step 三角波 + Smoothstep 余談:Time + Fraction + Smoothstep 波の出現の周期を変える 完成形 サンプルプロジ…

【C#】え、Generic Interfaceでメソッド引数を設定すれば構造体のBoxingを回避できるの?

C#

概要 Constraints on type parameters について 例:structで制約を付けた場合 interfaceを継承した構造体のboxing intefaceを引数としたメソッドに渡した場合のBoxing なぜBoxingが発生したのか Generic Interfaceによる構造体のBoxingの回避 Generic Inter…

【Unity】指のポーズをブレンドしてハンドジェスチャーを作ろう

概要 動作環境 使用アセット ポーズの用意 ポーズの条件 用意するポーズ HandOpened ThumbClosed, FingerClosed ポーズの簡単な作り方 パーからグーを作る方法 Blender グーから一部の指をデフォルトに戻す アニメーションをExport UnityでFBXをImport 非ル…

【UniRx】UniRxのDelayFrameが初回だけ1フレーム余計に遅延する問題と解決方法

概要 UniRxについて DelayFrameの問題について 現象の確認方法 問題の原因 簡単に言うと 詳細に言うと バグではないの? 制限事項とする理由 余談:修正できないの? 問題の回避 方法1. MainThreadDispatcher.Initialize()をコール 方法2. Scheduler.SetDefa…

【Unity】Physics.Raycast のパフォーマンスはシーンに存在するColliderの数に影響するのか

概要 動作環境 Raycastについて 検証の集計に関して 検証 検証方法 使用するCollider 検証1. ボックス状にコライダーを複数配置し、Raycastの時間を検証 2 x 2 x 2 合計1000の結果 10 x 10 x 10 合計1000の結果 40 x 40 x 40 合計8000の結果 検証1での考察 G…

【Unity】Boltなどのビジュアルスクリプティングで気づきにくいミスパターン

概要 Boltについて Boltの参考動画 補足 問題 答え 要注意ポイント 処理の流れ 解決策 Set Variable のOutput から取得 変数から直接取得 複雑なグラフでの例 雑感 概要 Boltが正式に無償化したということで、今回はBoltなどのビジュアルスクリプティングで…