ペイント要素のあるゲームをUnityで作っていた時の話です。マウスポジションからレイを飛ばして、ヒットしたオブジェクトのUV座標に色を塗るという実装をしていたのですが、いくらクリックしてもテクスチャに色が反映されませんでした。
ログを挟んでみて、レイの当たり判定は問題なさそうで、ほかにエラーも出ていませんでした。見えないオブジェクトがジャマをしているのか、書き込むテクスチャを間違えているのか、と小一時間ほど悩んだのですが、さっぱり原因がわかりませんでした。
しかし、ふと解決の糸口を見つけることができたのです。RaycastHit.textureCoordがなんとゼロしか返していませんでした。
結論、convexがオンだとmeshのUV座標はゼロを返す
結論を申し上げると、MeshColliderのconvexがオンになっていると、 レイから メッシュのuv座標を取得することができません。このconvexは、rigidbodyを使った物理演算を行うのであればオンにしなければならないので、とくに気にせず使っている人もいるかもしれません。
convexは、メッシュの頂点から凸胞体を形成するオプションです。つまりレイがぶつかるのは、モデルのメッシュデータではなく、Unityが物理演算用に作成するコライダーメッシュです。なので、レイキャストで取得するuvに0が返る、というわけでした。
なぜだっ!!、と同じように沼に片足を突っ込んでしまった同志の助けになれば幸いです。