読者です 読者をやめる 読者になる 読者になる

unity study

Unityでサクッとモックを作れるようになることを目指して、基本的なテクニックを抑えていく過程を残すブログのつもりだったけど、今はただ自分のトラブルシューティングメモになってるブログ

Mechanimでアニメーションしながら、SpriteRenderer.enabledをスクリプトで触る際の注意

敵がスプライトアニメーションしていて、やられると点滅する。ということを実装しようとした。
スクリプトからSpriteRendererのenabledをいじることで実現できるはずだったのだが、何故かenabledがfalseにならない。
一時停止して直接Inspectorからenabled=falseにしても、次のフレームではtrueにされてしまう。
同じような点滅を敵以外では実装できているのに何故?
試しにAnimatorを外してみるとうまくいく。

調べてみると敵の持つアニメーションの中に1つだけSpriteRenderer.enabledを触っているものがあった。
試しにそのアニメーションでSpriteRenderer.enabledを使うのをやめてみると、思い通りの結果になった。
これは推測だが、SpriteRenderer.enabledを触るアニメーションが一つでもあると、
その他のアニメーションは暗黙的にSpriteRenderer.enabled=trueとなるキーフレームを持つのと同じ扱いになり、
それがためにenabledをfalseにしても次フレームでtrueに書き換えられていたのではないだろうか。

う〜ん、今回はアニメーション側でSpriteRenderer.enabledを使わないことで対応できたけど、どうしても外せない場合はどうするんだろう?