ループしないアニメーションの遷移でハマったのでメモ。

上昇したら止まって、適当なパラメータが有効になったら下降するアニメーションを作成する。

上記のようなステートをもつAnimatorControllerを用意する。up(3秒かけてy:0からy:5に上昇する)からdown(3秒かけてy:5からy:0へ下降する)への遷移はboolのパラメータがtrueの場合に遷移する。

このときupがループアニメーションでない場合、up最後のフレームでアニメーションは止まっている。Has Exit Timeにチェックが入っているとパラメータがtrueになったときにすぐにdownに遷移せずに一定時間待つとdownのアニメーションが始まる。

どうやら表示的にはアニメーションのタイミングは最後までいっているが、内部的にはループしているため3秒ごとに遷移タイミングがきている。上昇アニメショーンが終わっていて、パラメータがtrueになったらすぐに下降アニメーションをさせたい。

解決方法

上記のようにステートを1つ追加する。ここで追加したloopのステートはアニメーションをつけないでWrite Defaultsのチェックもオフにする。

そしてupからloopへの遷移はHas Exit Timeを有効にして、loopからdownの遷移はHas Exit Timeを無効にしてパラメータがtrueのときに遷移するようにする。

こうすることでupのアニメーションが終わるとloopステートに遷移して、loopステートからdownステートへはHas Exit Timeが無効なのでパラメータがtrueになったら即座に遷移するようになる。

広告

サブウェポンとかも描き出した。(2015/10)

2015_october_dot

なんで載せるのが遅かったかというとTwitterの仕様変更でPNGがJPEGにされるようになって透過色使ってなかった画像がサルベージできなくなったから。

スプラトゥーンの武器だらけ。

september2015_dot

これ描いたの一昨年だ…

投稿者 tel | 2017年1月6日

2017年

2017

あけましておめでとうございます。
今年はたくさんアウトプットしたいです。

何らかの理由でRendererについているマテリアルがmissingになってしまったときを検出する場合はrenderer.sharedMaterialがnullかどうかでチェックする。
https://docs.unity3d.com/jp/current/ScriptReference/Renderer-sharedMaterial.html

missing_ss

マテリアルがmissingだとピンク色になる。(エラーのシェーダでレンダリングされている)

missing_ss2

Debug.Assert(renderer.sharedMaterial != null);

sharedMaterialを参照するとAssertに引っかかる。

Debug.Assert(renderer.material != null);

materialを参照するとgetした瞬間に新たなマテリアルが生成されてしまうのでAssertが通ってしまう。

ちなみにmissingになっているときにmaterialをgetして生成されるマテリアルは実行環境によって異なる。(おそらくシェーダの有無で違う)

投稿者 tel | 2016年11月23日

UnityでMenuItemが動かない

MenuItemで追加したメニューから関数が呼ばれなかった場合があったのでメモ。(Unity 5.4.2)

以下のようにMenuItemの関数と同じ名前のオーバーロードされた関数を用意するとメニューは項目が追加されるが選択しても関数が実行されなかった。

public class MenuItemTest : Editor
{
    static void Test(int i)
    {
    }

    [MenuItem("Editor/Test")]
    static void Test()
    {
        Debug.Log("test");
    }
}

ちゃんとメニューには出てくる。
menu_item_ss

ただし以下のようにオーバーロードされた関数をあとに書いておくと実行される。

public class MenuItemTest : Editor
{
    [MenuItem("Editor/Test")]
    static void Test()
    {
        Debug.Log("test");
    }
    static void Test(int i)
    {
    }
}

Unity 5.5では直っていた。
https://issuetracker.unity3d.com/issues/override-existing-menu-items-does-not-work-until-reimporting-scripts

ParticleSystem.Pause を呼び出してパーティクルをポーズして、再度Playして一時停止を解除するとStart Delayの経過時間がリセットされている挙動をする。つまりPauseとPlayを交互に繰り返すと、いつまでたってもパーティクルが放出されない。

エフェクトの一時停止をしようとした場合、Start Delayが設定されているパーティクルは再生時間がずれてしまい困ったことになる。

https://docs.unity3d.com/ja/current/ScriptReference/ParticleSystem-startDelay.html

どうやらバグのようだが、Issue Trackerでは直ったことになっている。

https://issuetracker.unity3d.com/issues/shuriken-particlesystem-dot-pause-resets-start-delay
https://forum.unity3d.com/threads/5-3-5p5-754270-particles-start-delay-still-have-problem.413072/?_ga=1.122247371.1793905693.1359169028

続きを読む…

投稿者 tel | 2016年11月17日

油壺マリンパーク

油壺マリンパークに行ってきた。1700円。

犬と一緒に入場できるみたいで犬を連れているひとが結構いた。

img_20161104_144858

img_20161104_141323

img_20161104_151603
イワトビペンギン

img_20161104_145526
相模湾に面していて景色がいい。

img_20161104_154717
イルカ、アシカショー。演出が凝ってた。

img_20161104_162731

img_20161104_143545
メガマウスの剥製?

コツメカワウソがいっぱいいた。モモンガ探したけれど巣にはいっているようでみつからなかった。

Animatorコンポーネントのインスペクタにアニメーションのパラメータを表示するエディタ拡張を書いた。

動機

AnimatorControllerのパラメータを直接さわってアニメーションを確認していると、実行中でないときに編集してしまいそのままリポジトリにあげられてしまう場合がある。

parameter_ss

そのため、確認するときになるべくパラメータの部分は触らせたくない。

インスペクタの拡張

以下のようにAnimatorにのインスペクタにAnimatorControllerが持っているパラメータを表示した。これなら実行中でないときに編集しても元のAnimatorControllerには影響がない。

animator_inspector_ss

問題点

デフォルトのAnimatorのインスペクタが上書きされた状態なのでメッセージの表示とかがされない。継承して作ろうと思ったがinternalになっていた。

投稿者 tel | 2016年10月17日

すみだ水族館

9月の23日にすみだ水族館に行ってきた。2050円。

img_20160923_144540

img_20160923_123911

img_20160923_124213

img_20160923_125048

テヅルモヅルかなにか。

img_20160923_132147

チンアナゴ

img_20160923_140248

img_20160923_135931

img_20160923_135848

img_20160923_140026

ちょうど金魚展をやっていた。

新しいので内装がきれいでおしゃれだった。料金高めの割には魚の種類は他の水族館に比べると少ない。

img_20160923_150111

曇っていたのでスカイツリーの上の方は見えなかった。

« Newer Posts - Older Posts »

カテゴリー