UIToolkitのButtonのコールバックはPointerDownEventではなくClickEventを使う

問題

ButtonのコールバックにPointerDownEventを指定すると発火しない

解決策

ClickEventを使うか,イベント登録時にTrickleDownを指定する

理由

Buttonは特殊な実装な上に昔書かれたやつだから.
以下PointerDownEventを使う場合

公式による説明

forum.unity.com

追加したいコンポーネントが表示されない時は,パッケージを再インポートする

症状

Unity Physicsをpre.65にアップデートしたら,PhysicsShapeなどのコンポーネントが追加できなくなり,表示されなくなった

同じ症状が起きた人
Question - [pre.65] how to add PhysicsStepAuthoring Component and etc - Unity Forum

解決策

パッケージを右クリックから再インポートする

(再起動では直らないのは邪悪すぎる・・・)

RuntimeInitializeOnLoadはジェネリックなクラスでは呼ばれない

ドキュメントに書いてないので注意
Unity - Scripting API: RuntimeInitializeOnLoadMethodAttribute

// 通常クラス
public class Hoge {
  [RuntimeInitializeOnLoadMethod]
  static void OnRuntimeInitialize() {
    _count = 100;
  }

  public void ShowCount() {
    Debug.Log(_count); // 100
  }

  private static int _count = 0;
}

// ジェネリック
public class Hoge<T> {
  [RuntimeInitializeOnLoadMethod]
  static void OnRuntimeInitialize() {
    _count = 100; // ここには一度も到達しない
  }

  public void ShowCount() {
    Debug.Log(_count); // 0
  }

  private static int _count = 0;
}

静的ジェネリックでも同様.とにかくジェネリックはすべて呼ばれない.

2022/4/20 追記

RuntimeInitializeOnLoadに限らず,CustomPropertyDrawersはすべてジェネリックをサポートしていない.
Addressablesのドキュメント見てて気づいた.

Class AssetReferenceT<TObject> | Addressables | 1.19.19

Error: .NETFramework,Version=v4.7.1の参照アセンブリが見つかりませんでした。の解決策

エラーログ

f:id:SiunCyclone:20220314122920p:plain

解決策

.NET Framework 4.7.1SDKを入れる(開発者パックのこと)
.NET Framework 4.7.1 をダウンロード | 無料の公式ダウンロード

図解

f:id:SiunCyclone:20220314122831p:plain

色のメモ

1. 基礎

光と色の三原色

RGBは光の三原色(加法混色)(加算レイヤー)
CMYは色の三原色(減法混色)(乗算レイヤー)
C: 1-R, M: 1-G, Y: 1-B

光源色と物体色

HSVは光源色
HSLは物体色

2. 色彩

PCCS

カラーサークルをHLS空間にすればPCCSの概念をほぼそのまま使える*1

目の錯覚

ofo.jp www.psy.ritsumei.ac.jp www.youtube.com

レイヤー合成

dentakumanga.com compojigoku.blog.fc2.com

3. 物理

8.まとめ 『イメージで分かる』光源の明るさ |大塚電子

カンデラ - Wikipedia

光度は放射強度に似ているが、光源のスペクトル中の全ての波長の寄与を単純に合計するのではなく、それぞれの波長について標準的な比視感度(異なる波長に対する人間の目の感度のモデル)によって重みづけする

比視感度 - Wikipedia

明るい場所に順応したときに、ヒトの目が最大感度となる波長での感じる強さを "1" として、他の波長の明るさを感じる度合いをその比となるよう、1以下の数で表したものである。

明るい所では555nm(ナノメートル)付近の光を最も強く感じ、暗いところでは507nm付近の光を最も強く感じるとされる。

輝度と明るさ

輝度(Luminance): 光源の明るさを表す心理物理量(cd/m2)
 心理物理量といわれているのは,cd自体が比視感度によって重みづけされた値のため.

明るさ(Lightness): 見た目の明るさのこと.物理量ではない.
 関数の値なので,色空間が異なれば(関数も変わるので)値が変わる.
 例えばHSLのL,HSVのV,CIEL*C*h*のL*,これらの明るさの値は異なる.

HSVやHLSにおけるカラーサークル上の輝度(CIEXYZのY)
クリスタの色相レイヤー等を用いたグレースケールは,CIEXYZのYを表している

CIEXYZ色空間は,均等な空間ではないので,1と3の差と7と9の差が同じではないということが起こる
より均等な空間なのがCIEL*a*b*やCIEL*u*v*

CIEL*C*h*(ab)のL*の値
R: 54.2 G: 87.8 B: 29.5
C: 90.6 M: 60.2 Y: 97.6

XYZの1と3の差はL*C*h*では24.7,7と9の差は7になっているのがわかる

qiita.com

4. リニアとガンマ

分かる!リニアワークフローのコンポジット - コンポジゴク

5. 色空間

色空間の関係

sRGB(ガンマ)
sRGB(リニア) <=> XYZ <=> L*a*b* <=> L*C*h*

sRGB色空間

sRGBはデフォでガンマ補正がかかってる(スクリーン上で自然な明るさに見えるようにするため)
よってsRGBからXYZへ変換する際は,sRGBをリニアにしてから行う必要がある

XYZ色空間

qiita.com

第29回 色の客観的な表現と伝達 (その3)|CCS:シーシーエス株式会社

xy色度図はX + Y + Z = 1とすることで得られる.(Z = 1 - X - Yと表せるためZが消える)

CIELAB色空間(L*a*b*色空間)

基準の白色点から求められる
白色点には主にD65とD50がある(6500Kや5000Kの光を元にしてる)
sRGBの白色点はD65(世の中のディスプレイほぼD65ということ)

Lab色空間 - Wikipedia

XYZ空間から単純な式で変換できるが、XYZよりも知覚的に均等になっている。「知覚的に均等」とは、色の値が同じだけ変化したとき、人間がそれを見たときに感じられる変化も等しいことを意味する。

CIELCh色空間

www.konicaminolta.jp

色空間の変換行列

RGB値について

RGB値を用いているのは,主にsRGB色空間とAdobeRGB色空間の2種類
RGB値は,色空間の広さに対する相対的な数値を表す
よって色空間が変われば同じ値でも違う色になる.(sRGBからAdobe RGBや,その逆)
RGB値を見る時は,それがsRGBかAdobeRGBか常に把握しておくこと

その他

*1:HLS自体が比視感度を考慮していないので,Hueを回すだけだと輝度が異なるように見える.HLSにおける色ごとの輝度も考慮するといい