icon

時間とられちゃってまだ終わってないけど、目がショボになってしまってもうだめだー

icon

あーやっと直った。
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的な事をして回避した。

はまりちらかして疲れた。