なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Unity

Unity で動的に UXML を生成・読み込みしたい

Unity で UXML を動的に生成したいことってありますよね?わたしはあります。 例えば、 UXML で記述できる HTML もどきは仕様が古すぎて、 HTML Living Standard っぽく記述した物をトランスパイルするとか......。 ということで、その方法のメモ。 とはいっ…

Unity のカスタムトラックで表示名を設定したい

比較的最近の Unity では、 Timeline 関連の API も公開されていて、ある程度自由にカスタマイズすることが出来ます。 今回はそのうち、 TrackAsset についてのお話です。 TrackAsset を継承したクラスを作ることで、 Timeline に任意のトラックを追加するこ…

Unity でスクリプトから Prefab Variant を作成したい

Prefab Variant 、便利ですよね。 今回はそれをスクリプト経由で作成する方法の紹介です。 といってもそれ専用のメソッドがあるわけでも無く、以下の処理で自動的に作成されます。 var go = (GameObject) PrefabUtility.InstantiatePrefab(_prefabPath); // …

Unity で GameObject の Duplicate を検出したい

Unity で Ctrl + D によるコピーを検出したい場合のやり方です。 といってもカンタンで、 hierarchyWindowItemOnGUI でヒエラルキーの OnGUI を受け取ってそこで処理してあげるだけ。 あとは、 delayCall で処理を遅延させないと activeGameObject がコピー…

Unity の Vector3 を Newtonsoft.Json でシリアライズ・デシリアライズしたい

ちゃんとした Unity アプリケーションを作っていると、 Json でアプリケーションデータを永続化したくなることがあると思います。 ただ、 PlayerPrefs はゴミらしいのと、 Unity 標準の JsonUtility だと物足りない......!となると、やはり Json.NET が選択…

OpenVR SDK でデバイスのアイコンパスを取得したい

今回は、 OpenVR SDK にてコントローラーや各トラッカーなどのデバイスのアイコンの場所を取得してみようと思います。 といっても、やり方はカンタンで、ランタイムパスと GetStringTrackedDeviceProperty で取得できるパスを組み合わせれば OK です。 とい…

OpenVR SDK で SetOverlayTransformTrackedDeviceRelative した座標の絶対値が知りたい

DLL Injection の記事はどうした!と言われそうですが、この後に書く予定です。許してください。 ということで、この記事では、 OpenVR SDK で SetOverlayTransformTrackedDeviceRelative あと適用した座標についての絶対値をとる方法についてメモです。 と…

Unity の UXML で作成した独自のコントロールで、子要素を取得したい

前回は UXML で独自のコントロールを作成しましたが、今回は子要素を取得していろいろやってみようと思います! 渡し方は Unity 公式ドキュメントで触れられている slot ではなく、単純に以下のような子要素 (ここでいう TabContent )となります。 <controls:Tab> <controls:TabContent title="全体設定"> </controls:TabContent> </controls:Tab> とい…

Unity の UXML で独自のコントロールを作成したい

前回はコールバックを作成しましたが、今回は独自のコントロールを作ってみましょう! ということで、早速 UXML と C# スクリプトを書きます。 たとえば、こんな感じのメッセージボックスを作りたい場合は、 以下のような UXML になると思います。

Unity の UXML で Binding したフィールドの変更を受け取りたい

C# + UXML でエディター拡張を書いている際、 Binding 中の変数に対して、値が代入されるタイミングである処理を呼びたい、みたいなことはあると思うんですが、その方法の紹介です。 といっても Unity 2019 と 2020 では微妙にやり方が変わっているので、今…

Unity の UXML + USS で Media Query を実現する

みなさん Unity 2019 辺りから搭載されてる UXML と USS 使っていますか? Web で調べてもほぼほぼ情報が出てこないこいつ、 Web 界隈であり WPF 界隈でもあったわたしからすれば天国のような開発環境なんですが、 CSS の弱めのサブセットということでしかな…

UnityPackage を Unity なしで作成できる GitHub Actions を作ったよ

昨日は仕事でも趣味でもひたすら GitHub Actions と戦っていましたが、その成果! ということで、 Unity なしで UnityPackage を作成できる GitHub Actions を作りました。 使い方は簡単で、こんな感じにするだけで、 UnityPackage を作れます。 name: "Auto…

Unity 2018.x で自動的に UPM パッケージをインストールしたい

BOOTH とかで商品を配布していて、共通の部分とかを配布するときに、 UPM 経由で依存を入れたいときとかの方法。 UnityPackage に含めると他のと被った場合、古いものをインポートされると困る!的な場合、 (個人的には) UPM 経由でインストールさせるのがよ…

Unity で EBUSY: resource busy or locked とでてパッケージがインポートできない

UPM 経由でパッケージ入れたり、再構成したりするとタイトル通りのエラーが出て、 まともにインポートされなくなってしまいました。 修正は簡単で、とりあえずディレクトリのロックを取っているプロセスが何処かにあるので、 競合するものを閉じてあげれば動…

Unity で monorepo っぽいものをなんとかしたい

なんやかんやあって Unity のパッケージで、1 レポジトリで複数のパッケージを管理しているのですが、 もろもろ自動化したかったので、 Node.js 界隈でよく見る monorepo 風に管理してみました。 誰か正しい方法知ってたら教えてください。 ~だって package.…

Unity のカスタムシェーダー GUI で、Tiling & Offset を良い感じに表示したい

最近は Toon Shader の勉強をしている私です。 Unity のシェーダーでは C# コードで GUI を自分で組めるのですが、 Tiling と Offset に対応していると、邪魔だと感じるときがあるので、良い感じに表示するための方法。 普通に作るとこんな感じになるとおも…

Canvas Image を Mesh に変換したい

なんでそんな必要があるのかって? Canvas 使いまくったものが送ってこられて Vket 入稿できなかったからです。 そういう需要があるにはあるので、放流します。 以下ソースコード全文 /*------------------------------------------------------------------…

UdonSharp コンポーネントをエディターから動的生成したい

Prefab からのセットアップ自動化みたいな想定で、 UdonBehaviour (U#) の中身をいじりたい。 そんなときのいじりかた。 といっても、基本は Unity で Component 変更するのと変わらない。 private static void AttachUSharpComponent(GameObject gameObject…

UdonSharp の特定のクラスのみを受け入れる入力フィールドを作りたい

そんなことをする必要があるかどうかはさておき、やりたくなったので。 ということでいつもの前提環境 Unity 2018.4.20f1 UdonSharp 0.18.6 といっても、実装は簡単で、こんな感じ。 もしかしたらこんなことしなくても良いカモだけど。 [SerializeField] [Ud…

Unity でカメラが近づいたら消えていくシェーダーを作る

最近シェーダーを書くことが増えてきた私です。 ということで今回は「近づくと消える」シェーダーを書きました。 Vertex Shader は変わりないので、 Fragment Shader のみ float4 fs(v2f i) : SV_TARGET { const float d = abs(length(i.worldPos - _WorldSp…

Unity だけでメッシュを作ってアセットとして保存したい

危うく今月の学びがなくなるところでした。 ということで、 Blender などを使わずに任意のメッシュを作成して保存する方法。 やり方は簡単で、以下のコードで 1 tris なメッシュが作成・保存されます。 // see: https://www.wikiwand.com/ja/%E6%AD%A3%E4%B8…

Unity で File (Local) ID を元に Object を検索したい

まあ普通にやっていてそんなケースは無いと思うのですが、以下の場合。 Unity のシーンファイルを解析中 YAML のタグ情報は使えない みたいな場合、 GetComponentsInChildren<T> からがんばって探すことになります。 そういったときのやり方。 まずは、以下のプ</t>…

Unity で Animator Controller を動的生成したい

前回、 Animation を動的に生成しましたが、 Controller の方はテンプレートでした。 今回はそこも C# Script から生成してみました。 ちなみに動機は同じですが仕様上不可能だと分かったので供養としておいておきます。 Animator Controller の生成自体も、…

Unity Editor のカスタムエディター上で配列を良い感じに扱いたい

配列を出すためのメソッドが標準で用意されていなかったので、メモしておきます。 例えばこういう配列があったとして。 [SerializeField] private VRCAvatarDescriptor[] _avatars; これをカスタムエディター上で良い感じに表示して欲しいとき、 下のように …

Unity で Animation を動的生成したい

元は VRChat 関連だけど、アバターの GameObject のツリー構造に依存せず、 自由にギミックを仕込む為の仕組みを作りたかった。 ただ、そのまま anim を配布しただけだと対応できないので、動的に生成してみました。 Animation を動的に生成するには、以下の…

VRCSDK2 から VRCSDK3-AVATARS へ移行したときに気をつけること

VRChat の Avatars 3.0 なるものがでるようなので、早速入れて触ってみました。 が、既存のプロジェクトをアップグレードすると動かない、なぜ。 原因は Define Symbols にありました。 Unity の Player Settings から、 Configuration セクションにある以下…

Unity で Humanoid で作成した Animation を Generic に適用したい

VRChat とかで、意図的に Humanoid だったものを Generic にする場合など、 Humanoid で作った Animation を Generic に適用したい場面があります。 そういうときの解決方法。 解決方法は簡単で、 Animation を変換してあげれば良い。 そして、そういうアセ…

Unity でプロジェクト外部の参照を追加したい

ここでいう外部の参照っていうのは、 NuGet ライブラリだったり、 .NET Framework には含まれてるけど追加参照が必要なものを指します。 NuGet ライブラリを使う場合 公式ドキュメントでは nuget.org から DL する方法が紹介されていましたが、 いちいち落と…

Particle System の Stop Action が動かないのでなんとかしたい

VRChat で Particle System を当たり判定として使っているときに見つけた仕様。 知らないとハマりがちなので、メモしておきます。 いつも通りの前提条件はこちら: Unity 2018.4.20f1 Personal 実験を行ったリポジトリはこちらにあります。 GitHub - mika-sa…

テクスチャを切り替えられるシェーダーを作りたい

暫く前に、Texture2DArray を作成する記事を書いたのですが、その続きです。 Texture2DArray を元に、テクスチャを切り替えられるシェーダーを作ってみます。 といっても実装は簡単。 まずは Texture2DArray を宣言しておきます。 あとは、テクスチャを切り…