Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@sleepflower

SimpleAnimationでisPlayingが常にtrueを返す件

More than 3 years have passed since last update.

Unity初心者の備忘録的な何かです。
初投稿なので色々至らないところあるかも。

Unityのステートマシンがめんどくさすぎるので何か手を抜ける方法はないかと探してたもんですが、
何やらUnity公式が配布しているコンポーネントにSimpleAnimationなるものが。
これで楽できる!
と喜んだのも束の間。

isPlayingがfalseにならない

再生が終了したタイミングで処理させたいところがあったので、isPlayingで再生中かどうか確認。
ところが、アニメーション再生中だけtrueになるはずのisPlayingが、待てど暮らせどfalseにならない。

AnimationTest.cs
SimpleAnimation anim = GetComponent<SimpleAnimation>();
if(!anim.isPlaying){    //<- falseのとき動くかんじにしたかった
    //実行したい処理
}

元々アニメーション関連は避けて通っていたのでイマイチ原因が分からず詰み。。。
アニメーション名を指定できる関数版のIsPlaying()でも同じでした。

原因

このまま悶々とするのも嫌なので、SimpleAnimationPlayable.csの中身とかを覗いたりしてみました。

どうも、読み込んだAnimationClipのWrapModeがOnceの場合はきちんと終了するようなのですが、
何も設定していないとDefaultで読み込まれてしまい、終了処理に引っかからないみたいです。

自分は外側からWrapModeを設定する方法がいまいち分からなかったので、
SimpleAnimationPlayableのDoAddClip()中に「WrapModeがDefaultのときはOnceにする」という処理を加えて強引に終わらせる事に。

if(newState.wrapMode==WrapMode.Default) newState.wrapMode = WrapMode.Once;

これでとりあえず終了処理が効くようになりました。
2018/01/27追記:
newStateが取得された直後にOnceにしてしまうと、AnimationファイルのisLoopingがオンになっていても強制的に単発再生になってしまっていました。よく考えたら当たり前だ・・・
なので、isLoopingtrueかどうかを見てから上記のコードを差し込めば、ループも動くようになると思います。
もっといい方法がありそうだけど思いつきません:pensive:

元のコードとかライセンス的に書いていいのかよく知らないのでこんな説明になっちゃいました。わかりにくい・・・
とにかく、はやいとこ修正来てほしいです:cry:

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?