時間とられちゃってまだ終わってないけど、目がショボになってしまってもうだめだー
あーやっと直った。
uGUIのImageの一般的なシェーダーはUVスクロール無いから、SpriteのWarp Mode: Repeatにしてmaterial.SetTextureOffset()
でスクロールしてたの、いつの間にか動かなくなってたのが。
原因は、このスクロールしてるImageが親のMaskの影響下にあると、スクロールしない。というか一瞬だけ動くけど止まってしまう。マテリアルの方のoffsetの変更は効いてるんだけど、レンダリングがされてない感じ。
あと、いくつか注意点。
ImageコンポーネントにはMeshRendererなら持ってる.sharedMaterial
フィールドが無い。.material
が.sharedMaterial
みたいに、マテリアルの複製ではなくアタッチしてるマテリアルそのものを返す。
なので、同じマテリアルを使ってるとこ全部がスクロールしてしまう。
そしてImageコンポーネントのMaterial未指定だと、デフォルトのマテリアルが適用されるので、uGUIのあらゆるImageがスクロールしてしまう。
多分一番標準であろうUI/Default
shaderのマテリアル作ってImageコンポーネントのMaterialに設定しておくと、そのImageのSpriteだけスクロールする。
だけど、VRChatの場合UI/Default
を使っていたらVRChat/Mobile/Worlds/Supersampled UI
shaderに置き換えるんだけど、Material未指定のもUI/Default
なので、一緒くたにVRChat/Mobile/Worlds/Supersampled UI
を使った同一のマテリアルにされてしまう。
uGUIのあらゆるImageがスクロール再び。
なので、スクロールしたいImageコンポーネントの作成したマテリアルを予めVRChat/Mobile/Worlds/Supersampled UI
shaderにしておいて、VRChatによる差し替えを回避する。
これで数週間前は回避できてたと思うんだけど、何故か今は差し替えられてしまった。話が違う。
This will detect uses of the original Default/UI shader and dynamically attempt to replace it with VRChat/Mobile/Worlds/Supersampled UI.https://docs.vrchat.com/docs/vrchat-202342#creators
Start()
でthis.image.material = this.myMaterial
的な事をして回避した。
はまりちらかして疲れた。