RaycastHitのTexcoordが常に0ベクトルを返すのですよ
はじめに
RaycastHitのTexcoordが常に0ベクトルを返す問題に遭遇したのでメモとして残しておきます。
ちなみにUnity - スクリプトリファレンス: RaycastHit.textureCoordでも表記があるように、 コライダーがMeshColliderではなかった場合、 RaycastHitのTexcoordは常にVector2.zero を返しますが、これとは別案件です。
今回のケースではWebGLでビルドした時は正常にTexcoordが返ってくるのに、Standaloneでビルドすると常にVector2.zeroが返ってくるというちょっと不思議な問題です。
Texcoordを取得してその位置にインクを塗る、といった処理をしているのですが、見ての通り正常に描画されない場合、Texcoordが常に0ベクトルを返しています。
解決法
解決するのはものすごく簡単です。メッシュのインポート設定でRead/Write Enabledにチェックを入れるだけです。
上記事より引用(一部変更しています)すると
Read/Write Enabledを有効にするとランタイム時にメッシュを書込可能とし、メモリ内でコピーが作成されます。このオプションをオフにすると Unity がゲームのメッシュデータをアンロードできるためメモリが節約できます。しかし実行時に不均等なスケールでメッシュをスケールまたはインスタンス化するとインポート設定で “Read/Write Enabled” を有効化しないといけない場合があります。それは不均等なスケールはメッシュデータをメモリ保持する必要があるためです。通常、ビルド時にこれは検知されますがメッシュが実行時にスケールまたはインスタンス化すると手動で設定する必要があります。そうしない場合ゲームのビルド時に正しくレンダリングされないかもしれません。実行時にMeshColliderを作成する必要がある場合もこのことが適用されます。
ということらしいです。
何故WebGLでは正常に動いたのか詳細はわかりませんが、利用するモデルデータのコンバートの差異によるものかなと勝手に思っておくことにします。