バージョン
Unity 2019.1.9f1
はじめに
Assertion failed on expression: 'IsNormalized(dir)'
Assertion failed on expression: 'IsNormalized(ray.GetDirection())'
クリックしてもそれ以上の情報はなく、どこに問題があるのかどころか、誰がこのアサーションを吐いているのかさえ分からず。
とりあえず調べてみると公式フォーラムでFlare Layerを切ると消えたという情報が出てきます。
切ってみると確かに出なくなりましたが、このままではレンズフレアが使えない、ということで色々試して回避できそうな方法が分かったので共有します。
再現手順
- 空のシーンを作成します。
- Directional LightにLens Flareを追加します。
- Main CameraにFlare Layerを追加します。
ここまではレンズフレアを使うときにやる普通の作業かと思います。
このあと下記の2パターンで確認できました。
パターン1(Orthographicカメラ)
- Main CameraのProjectionをOrthographicにします。
- 再生します。
- Main CameraとDirectional LightのPositionを一致させます。
パターン2(Perspectiveカメラ)
- Main CameraのProjectionをPerspectiveにします。
- 再生します。
- Main CameraとDirectional LightのTransformを一致させつつ、PositionとRotationを適当に動かします。
(例えばPosition: -2, -13, -10、Rotation: 77.2, 112.32, 0とか)
原因ははっきりとは分からないのですが、カメラとLens Flareの位置関係によってはレンズフレアの計算ができない状況になるのでしょう。
対処法
このアサーションに遭遇する原因として一番ありそうなのがカメラにLens Flareが付いてしまっているパターン。
この場合、Lens Flareの使い方が間違っていると思われますので、まずは使い方が合っているか確認するのがいいかと思います。
こちらやこちらを参考にさせて頂くと、空のオブジェクトやLightに付けるのが正しいかと思いますので、そのようにしましょう。
それでも、再現手順でやったように、カメラとLens Flareの位置が一致する状況があれば発生してしまうことでしょう。
その場合は両者の位置関係を意識したうえで、スクリプトやオブジェクト配置を見直してみるのがいいかと思います。
おわりに
すぐに原因箇所が分からないアサーションなので、解決に時間を取られてしまわないよう、一助になれば幸いです。