渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

UnityタイムラインのAnimationEventを受け取る方法と罠

f:id:esakun:20150730215258g:plain

UnityのタイムラインとAnimationEventを組み合わせた場合の備忘録。

  • AnimationEventを仕込んだAnimationClipを用意
  • AnimationTrackに先のAnimationClipをセット

この場合、どうやってAnimationEventを受け取るか?

PlayableDirectorではなくAnimator側で受け取る

感覚的にはPlayableDirectorがアタッチされたGameObjectにレシーバーのコンポーネントをくっつけておけばイベントを取得できるかなーなんて思っていましたが、それだと以下のエラーが出ちゃいます。

'AnimationTrackにセットされたGameObject名' AnimationEvent 'AnimationEvent名' has no receiver! Are you missing a component?

エラー内容から分かるように、AnimationTrackにセットされたGameObjectにレシーバーコンポーネントをくっつけるのが正解です。

これで正しくイベントを受け取ることが出来ます。

バージョンの罠

Unityのバージョンによって、AnimationEventが発火しない致命的なバグが存在します。

Unity Issue Tracker - Event added to animation window, which is linked to sequence editor, doesn't get activated

こちらのissueにあがっていますが、Unity2017.2.0b10からUnity2017.3.1f1までの間はこのバグが存在するためタイムラインによるAnimationEventは使用できません。

Unity2017.3.1p1で対応が入っているので、それ以降のバージョンをお試しください。

Unity - Unity QA - Patch Releases

余談

ちなみにAnimationEventをテーマに記事を過去に書いてます。

AnimationEventはAnimationClip自体にイベントを仕込んで、それをプログラム側で取得する、アーティストとプログラマーの作業を分離させてくれる機能といえます。

実績的には、剣を振った時の衝突のタイミングにイベントし込んだりしました。便利っちゃあ便利です。

検証環境

  • Unity2017.3.1p4

続・もう諦めないWebGL進捗


何がきっかけだったのか分かりませんが、毎日諦めずに生WebGLに向かって1日1ソース何か書いてます(全く同じコードを書くこともあります)。

基本はコチラのサイトのお題をできるだけソースを見ないようにして、自分で考えて解いていくスタイルです。

執筆時点でこのように平行光源によるライティング辺りまで進捗しています。


完成したらTwitterで吐き出し、明日の自分へプレッシャーを書けておきます。
ソースのリンクも張ってるので、ご興味ある方はどうぞ。

ソースを見るとわかりますが、基本的に処理を関数などにまとめず、ほぼすべてのコードを記述しています。
行列計算と立方体生成コードは使わせてもらっている、または関数化して使用

やっぱり何度も書くとさすが覚えます。
個人的には以下のメソッドがどうしても覚えられなくてやられましたが、今ではスラスラ〜です。

  • getAttribLocation
  • enableVertexAttribArray
  • vertexAttribPointer


このように基礎の基礎の基礎にあたる部分で、あまり楽しくはありませんが、少し分かるようになって楽しくなってきています。

まだ大分お題が残っていますが、コツコツと無理せず、諦めずに進捗できればと思います。

もう諦めないWebGL

この記事書いたのが既に3年前。

あれから全くWebGLを書かずに過ごし、今また再ブームが自分の中に到来しております。

まずは勘を取り戻すために、ライブラリなど使用せず生WebGLで三角形を出してみようと思って書きました。

f:id:esakun:20180309025207p:plain:w300

実行するとこんな邪悪な色味の三角形が表示されます。

  1. シェーダをコンパイルする
  2. プログラムオブジェクトを作って、シェーダをリンクする
  3. 頂点座標のバッファを作って頂点情報をセットする
  4. 頂点シェーダの頂点属性posに値をバインドして渡す
  5. 画面をクリアして、描画

という手順を踏んでいます。

あきらめたくないので、
こちらのサイトを参考に1つずつお題をこなして、コンスタントにアウトプットしていきたいです。

Mayaからfbxでファイル書き出した際のエラーログ The plug-in has detected mesh nodes with unsupported... の対応

モデルをこねくり回していると、FBX書き出し時に下記エラーが出て中身の存在しないFBXファイルが出力されてしまいました。

The plug-in has detected mesh nodes with unsupported operators that affect the vertex and/or face count. To correct this, delete the Non-deformer history before exporting. The following nodes will not be processed: pCube1

再現方法がわからないのですが、エラー内容に沿って解決方法だけ掲載しておきます。

f:id:esakun:20180302170454p:plain:w400

編集 -> 種類ごとに削除 -> デフォーマ以外のヒストリをクリックします。

するとエラーが解消されます。

参考

環境

  • Maya2015