みかづきメモ

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

Parcel Bundler を使ってるときに、 manifest.json までビルドされるのをなんとかしたい

つい最近気がついたのだけども、どうやら Parcel で manifest.json を含んだ
index.html をビルドすると、 JavaScript としてコンパイルされてしまうらしい。
それに気がつかず約半年 ServiceWorker を消すスクリプトが動いていなかったようだ
それの防ぎ方。

以下のように、 manifest.json ではなく manifest.webmanifest を指定する。

<link rel="manifest" href="/manifest.webmanifest" />

そして、 manifest.jsonmanifest.webmanifest にリネームしてあげる。
すると、 JavaScript にビルドされることなくそのまま出力される。

ちなみに拡張子変えちゃってもいいの?という話については、 MDN を見た限りは、
「標準は .webmanifest だけど .json でも読む込むよ」とのことなので、問題ない。

参考 :

TypeScript で配列かどうかを型付きで判別したい

下のような型をもつ変数 obj が提供されていて、
これが number なのか number[] なのかを区別したいとき。

type Value<T> = T | readonly T[] | undefined | null;

declare const obj: Value<number>;

こういう文法が使えるのを必要がなかったので知らなかったのだけども、
下のような形で isArray を定義してあげれば、良い感じに型が解決される。

const isArray = <T>(maybeArray: T | readonly T[]): maybeArray is T[] => {
    return Array.isArray(maybeArray);
}

if (obj && isArray(obj)) {
    const array = obj; // array is number[]
}

もちろん逆バージョン (T かどうかを調べる) を定義すればそういうふうに使える

const isSingle = <T>(maybeArray: T | readonly T[]): maybeArray is T => {
    return !Array.isArray(maybeArray);
}

if (obj && isSingle(obj)) {
    const single = obj; // single is number
}

User-Defined Type Guards という機能だったらしい。
ということで、メモでした

Unity のエディター拡張を DLL 形式で配布したい

Unity のエディター拡張とかでソースを公開したくない場合とか、
追加参照が必要なときに DLL で配布すると良い感じに出来たりします。

そういうときのための、 DLL でエディター拡張を作る方法についてのメモ。

前提環境は以下の通り:

基本的には .NET で DLL 作る方法と同じで OK です。
Visual Studio でいつも通り .NET Framework のクラスライブラリを作るだけ。
ただし、 UnityEditor などを参照する必要があるので、設定を行います。
参照マネージャーから参照に UnityEngine.dllUnityEditor.dll を追加すれば OK 。

あとは、ビルドしたもののうち、 Unity 関係以外を Plugins の適当な場所に
コピーしてあげれば、 Unity が読み込んで良い感じにしてくれる。

ちなみに NuGet パッケージを使ったり、追加参照をやってても良い感じにしてくれる。
ということでメモでした。

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

VRChat とかで、意図的に Humanoid だったものを Generic にする場合など、
Humanoid で作った Animation を Generic に適用したい場面があります。
そういうときの解決方法。

続きを読む

.NET 公式で定義されている P/Invoke シグネチャーを使って Win32 API を使いたい

暇だったので .NET Foundation (github.com/dotnet) のリポジトリ一覧を眺めていると、
Windows の P/Invoke の定義をしているリポジトリがあったので、
それを使って Win32 API を呼び出してみます。

続きを読む