しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

はてなブログで数式を表示させる

色々調べても全然わからんかったのでここにメモ
自分の場合は「プレビューしたときに一瞬だけ表示されて消える」という現象だった。
おそらくフォーマットは合っているのだが、 「消える」という部分に対する解決方法の記事がなかった。

解決策としては、「設定 > デザイン > カスタマイズ > ヘッダ」に、以下を加える

<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

これで問題なく表示されるようになった。

あとは参考サイト様のように書けば表示された。

$$
e^{j\pi} + 1 = 0 
$$

$$ e^{j\pi} + 1 = 0 $$

参考URL

[Unite2018] Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session84

講演者

Florian Andreas Gantzert (KLab株式会社)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan002/unite-2018-tokyounity-ui

概要

  • UI
  • 結合
  • UIアゲイン
  • おさらい

内容

  • UI
    • ビジュアルでUIを作れる(uGUI)
    • にも関わらずプログラマがUIを作るケースが多い
    • よくするための鍵は? → 結合
      f:id:turgure:20180702091757j:plain
      f:id:turgure:20180702091806j:plain


  • 結合
    • 定義
      • 一方の偏光によって他方の変更が必要になる
      • Aを変更したらBも変更しなくてはいけない
    • 密結合
      • 結合している状態
    • 疎結合
      • 結合していない状態
    • 結合レベル
      • 結合はコードの話だけではない
      • コードの結合が、データとワークフローの結合につながる
        f:id:turgure:20180704085842j:plain
    • 結合と抽象化
      • 疎結合抽象化で実現させる
      • 抽象化
        • × 汎用化、一般化
        • 縛りのないシンプルな抽象化が望ましい
    • 結合バランス
      • 疎結合にバランスがある
      • 結合のバランスがプロジェクト規模に依存する
      • 問題点
        • 孤立しているタスクのはずが
          • 巨大化
          • 副作用が発生
          • 対応が複雑化
      • バランスがずれてもまだ手遅れじゃない
      • バランスの鍵は分野相互間コミュニケーション


  • UIアゲイン
    • ワークフロー
      • 同時作業によるコンフリクトはありえる
      • ワークフロー上でそのコンフリクトを阻止できない
        • 違うレベルで阻止する必要
      • データを分割してコンフリクトを阻止
      • コード上でその分割に対応
    • データ分割
      • UI専用のシーンを用意
      • UIシーンは他のゲームと連携
      • Unityのシリアライズ機能が使えない
      • UIシーンと他のシーンはどうやって連携させる?
        • MVC・MVVM
        • UnityEngine.ExposedReference<T>?
          • Timelineで利用される
          • ランタイム時にIDで参照を解決
          • ExposedReference<T>本体側でもルックアップテーブルIDを管理する必要
        • メッセージ・バス
          • 必要な情報だけメッセージとして抽象化、バスに飛ばす
          • バスの接続先でメッセージを処理
          • 発信元、接続先は互いの情報を知らなくていい
          • どのような情報を扱うか、どういうルールにするか
          • 発信源、接続先の差し替えでデザイナ向けのデバッグ機能の追加が容易


  • おさらい
    • 結合はコードの話だけではない
      • データとワークフローでも発生する
    • 規模とともに疎結合が必要になる
    • コードの結合はデータとワークフローの結合につながる
    • 疎結合の道は抽象化で開く
    • コードとデータの疎結合はよりよいワークフローにつながる
    • シーンを分けることでUnityにおける同時作業がやりやすくなる
    • メッセージ・バスで複数のシーンやロジックなどを疎結合的につなげる


  • おまけ
    • roll a ballの改造 中上級者向け
      • テストしたい
      • ML(Machine Learning)で動かしたい
        • →入力の抽象化
        • 入力情報を管理するinterfaceを作る
    • c#における抽象化
      • インターフェース化 ←ゲームはこっちのほうがいい?
        • 処理側がタイミングを決める
      • イベント化
        • 情報元がタイミングを決める
    • c#におけるイベント化
      • 言語レベルで対応している
        • delegate, event
      • Unity APIでも使われている
        • hierarchyChangedなど

[Unite2018] Unity 2D機能のアップデートとその周辺

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session79

講演者

山村 達彦 (ユニティ・テクノロジーズ・ジャパン合同会社)
京野 光平 a.k.a. ntny (ユニティ・テクノロジーズ・ジャパン合同会社)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyounity-2d

概要

  • ステージを作りやすく
  • もっと高度なキャラクター表現
  • その周辺
    • UI
    • パフォーマンス
    • アセット

内容

  • ステージを作りやすく
    • TileMap
      • Unity 2017.2から
        • タイルベースでステージを作る仕組み
        • タイルを塗るようにステージを作成
        • RPGツクールみたいな
      • Unity2018.2から
        • 六角形タイルもサポート
      • Tile     タイルのアセット
      • Palette    タイルを塗る際に使用するパレット
      • Brush    タイルをタイルマップに塗る
      • Tilemap   タイルをセットするグリッド
        f:id:turgure:20180702090943j:plain
      • 実装例
        • 隠し通路
        • 家の裏に行くと影
        • 当たり判定処理
    • 2D Sprite Shape
      • Unity 2018 Package Managerで提供
      • 伸縮するスプライトでステージを作る
      • フレキシブルなマップ
      • Spriteの面に応じて表示するものを設定できる
      • MeshCollider2DEdgeCollider2Dの当たり判定とも連携
        f:id:turgure:20180702091102j:plain
    • Cinemachine
      • カメラ移動制御
      • 必要なのはColliderのポリゴン情報
        • Colliderだが当たり判定は必要ない
        • Rigidbody2DのSimulatedをOffにする
          f:id:turgure:20180702091140j:plain


  • 高度なキャラクター表現
    • ボーンベースのアニメーション
      • スケルタルアニメーション
      • スプライトの回転や移動でアニメーションを実現
    • 2D Animation
      • 2D IK       IK実現
      • 2D Animation   Spriteの変形に対応
        f:id:turgure:20180702091250j:plain
        f:id:turgure:20180702091257j:plain
    • Simple Animation
      • アニメーションクリップを登録してPlay()するだけ
      • ステートマシンは不要
      • ピクセルパーフェクトなアニメ(開発中)
    • Timeline
      • Timelineは「タイミングを制御する」機能
      • 時間指定で処理を実行
      • ゲームを再生せずプレビュー
      • 4つのポイント
        • 動かすキャラとターゲット指定はTimeline再生前にバインド
        • 演出で使用する内容はPrefabにまとめておく
        • 移動はAnimation ClipではなくTween
        • 対象独自の動作はイベントを活用
          • 敵側、ダメージエフェクト
          • Timelineはタイミングだけ管理
      • Timelineは重い?
        • 意外と軽い
        • 重い場合はPlayable Assetを分ける
        • エディタとビルドで負荷がぜんぜん違う
          • ビルド前はとても遅い
          • Timelineウィンドウがとても遅い
          • ビルド前はロードも遅い


  • 周辺
    • パフォーマンス
      • Rigidbody 2Dのマルチスレッド化
      • テンプレートの設定が少し変化
      • Dynamic Batchingがデフォルトでoff
        • Instancingを使う
      • Scriptable Render Pipeline
        • いくつかの機能が使えなくなる
    • UI
      • 新しい機能はない
      • GUI LayerはCameraに標準で組み込まれなくなった
      • UIはPackage Managerに移行するかも
    • アセット
      • 新しい縮小アルゴリズム
        • Mitchell
      • テクスチャ
        • ETC2 8bit / ASTC 4x4
      • SVGサポート
        • ズームしてもくっきり

[Unite2018] スクリプタブルレンダーパイプライン入門

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session77

講演者

Jay Santos (Unity Technologies Lead Evangelist - SAPAC)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyo-96490229

概要

  • SRP (スクリプタブルレンダーパイプライン)とは?
  • SRPを使える場面
  • SRPの始め方

内容

  • SRPとは?
  • SRPを統合したわけ
  • Unity 2018.1でできること
    • ビルドインRender Pipeline
    • SRP API
      • Light weight(LWRP)
      • High Definition(HDRP)
      • Custom
    • ビルドインRender Pipeline
    • LWRP
      • パフォーマンスを重視
        • ターゲット:モバイル端末、XR
      • 1つの光源しか使えないなど、制限が多い
    • HDRP
      • ハイエンド向け
      • たくさんのマテリアル設定ができる
    • カスタムRender Pipeline


  • SRPを使う方法(Demo)
    • インポート方法
      1. テンプレートで High Definition / Light weightを使う
      2. Window > Package Manager > Render-pipelines.light を追加
    • 使用方法(LWRP)
      • Rendering > Lightweight Assetを選択
      • Edit > Project Settings > Graphicsインスペクタを編集
        • LWRPはstandard shaderをサポートしていない
        • Edit > Render Pipeline > Upgrade Project ... を選択
          • すべてのマテリアルを修正
      • LWRPのシャドウの優先度を変える方法
        • Render Mode
          • Auto
          • Important 最優先で実行される
          • Not Important
      • 光の発生数を変える方法
        • Rendering > Pixel Lights を調整
          • しかし、シャドウは生成されない
    • 使用方法(HDRP)
      • Lightコンポーネント構成が増える
        • Rectangle
        • Line
      • Image > Decal
        • Decal Blend
          • 透明度のようなもの
        • 壁に張り付いて画像を動かせる
      • Render > Window > Debug Pipeline


[Unite2018] Unityの開発サイクルとバグへの取り組みについて

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session71

講演者

黒河 優介 (ユニティ・テクノロジーズ・ジャパン合同会社)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-tokyo-2018unity-96492590

概要

  • Unity社の開発体制
  • バグが報告されてから改修されるまでの流れ

内容

  • Unity社が開発しているもの
  • 開発体制について
    • 機能単位でチームを構成
      • UI
      • Animation
      • など
  • 開発サイクルについて

    • バージョン管理はMercurial
    • βリリースを機会にブランチを切って開発
  • バージョンについて

    • Unity2017.3以前はバージョン名にfとpがついたもの
      • f
        • 網羅的なQAを行ったもの
        • 安定版
      • p
        • パッチリリース
        • バグ修正のみチェックしているため、安定性は低い
    • Unity2018からLTSの導入
      • LTS(Long Term Support)
        • 以前
          • メジャーバージョンリリース後に1年位はバグ修正のサポート
        • 今後
          • TechストリームとLTSストリームの2つ
            • その年の最後にリリースしたバージョンがLTS
            • 24ヶ月のサポート
  • 開発サイクルまとめ
    • pバージョンをなくしてfバージョンのみリリースする
    • LTSバージョンを追加してサポート対応する


  • バグへの取り組みについて
    • ユーザからバグレポートを収集して修正
    • バグレポートの修正対応
      1. バグレポート提出の流れ
        • Help > Report a Bug から報告
        • 一次請けはヨーロッパが多いのでできれば「英語」で
        • アドレス
        • カテゴリ、再現頻度
        • 現象の説明
        • Unityプロジェクトの添付
        • 再現手順
      2. バグレポートのエスカレーションフロー
        • バグトラッキングシステムへ登録される
        • QAチームが同様のバグをチェック
        • 再現確認
        • 確認できれば、チームに割り当て
        • Issue Tracker上にバク情報を登録し、バグの内容を公開
      3. 実際に修正され、適用されるまで
        • 開発チームが開発中の最新版に修正
        • その後サポート対応専用チームがサポート期間中の各バージョンにも修正確認
      4. そのたバグ修正に関するTIPS
        • Issue Trackerのステータス
          • 対応中、修正済、予定なしなど
        • Issue ID
          • Release NoteのIDとIssue TrackerのIDは同じ
        • Regression(エンバグデグレ
          • バージョンアップで発生してしまった問題
          • 2分探索で原因のコミットを探索
        • バグレポート
          • 最新バージョンに関するバグは優先度高い
          • 画像や動画を添付するとわかりやすい


  • ケーススタディ
    • ex) UIバグ
      • バージョンアップによって発生
      • 最小構成のプロジェクトを再度作って発生するか確認
      • バージョン前、後の途中のバージョンでそれぞれ発生するか確認

[Unite2018] 運営中コンテンツにおける大型アップデート成功のための考え方とUnity最適化手法

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session66

講演者

金井 大 (株式会社Cygames)
稲田 健人 (株式会社Cygames)

SlideShare

http://tech.cygames.co.jp/archives/3128/

概要

  • 大型アップデート実現に効果的な3Dグラフィック表現
    • アップデート規模と実現難易度が比例傾向
  • コンテンツと大型アップデート施策の概要
  • 大型アップデートで行われた3Dグラフィクスのクオリティアップの詳細
  • 運営中コンテンツの大型アップデートを成功させる考え方、Unityを使った開発の進め方

内容

  • コンテンツと大型アップデート施策の概要
    • 適用事例紹介
      • 2015年リリースゲーム
      • 60fpsを担保しつつ3Dグラフィクス表現
      • 2017/6に大型アップデート
        • 3ヶ月で開発
        • Unite2016で講演済 [Unity 3D 考え方] 検索
    • なぜ大型アップデートを行うのか
      • 3Dグラフィクス品質の底上げ
    • 行ったこと
      • 高品質版の作成(2D, 3D)
        • それぞれ3段階の設定
          • 軽量版
            • 限界までスペックを落としたもの
          • 標準版
            • ミドルレンジ端末
          • 高品質版
            • ハイエンド端末
    • 詳細
      • イメージエフェクトのクオリティアップ
      • キャラクタのクオリティアップ
      • 画面解像度
        • MSAAの導入
      • ETC2フォーマットの導入
        • OpenGLES3.0対応
      • イメージエフェクト
        • シェーダの対応が中心
      • 既存アセットの修正量は少ない
        • 処理負荷を基準に判断できる
      • 軽量版のパイプライン
        • UnityのレンダリングはCamera基準
        • 軽量版
          • ForwardBase
        • 標準版
          • UpdateDepthTexture
          • ForwardBase
          • ImageEffect
          • 描画頂点数は2倍弱に増える
        • 高品質版
          • プロジェクションシャドウ、ミラー処理等でカメラ追加
          • プロジェクションシャドウ
            • Unity標準のソフトシャドウはモバイルで利用できないので、自前で実装
            • ジャギーをなくす
          • ミラー
            • ミラー用カメラを用意
            • 鏡面レンダリング、プロジェクションで、地面への映り込みをリアルタイム処理
            • Replaced Shadersを利用
          • ライトシャフト
            • 深度値を参照しブラーをかける
            • 散乱光の表現
            • Legacy Image Effect > SunShaftsをベース
              • サンプル数やブラーのかけ方をカスタマイズ
          • レンズフレア
            • Unity標準のレンズフレアで対応
            • 光源が隠れた際にフレアが正しく消えないと不自然に見える
            • キャラクタは人型のみ
              • 雛形を作って量産
              • 問題があるデータは順次修正
          • ティルトシフト
            • 画面の上下、左右などをぼかす機能
            • Image Effectのみでかなり柔軟な表現が可能
            • DOFと異なり深度値情報が不要、頂点負荷に優しい
            • Legacy Image Effectをベースにカスタマイズ
          • まとめ
            • ImageEffectは採択しやすい、処理負荷のみ着目できる
            • 頂点スペックには配慮が必要
            • すべてを自作する必要はない
      • キャラクタのクオリティアップ
        • ライティングアルゴリズム変更の課題
          • 軽量化のためライティングを行っていない
            • diffuseテクスチャに陰影を書き込んでいた
          • ライティングを強化
        • 既存アセットの修正には作業コストと管理コスト
        • 以下のもの導入
          • リム
          • 環境マップ
          • スペキュラ
            • ○ キャラクタ、カメラ移動に応じた変化がある
            • ○ 費用対効果が高い
          • ノーマルマップ
            • △ UVの大幅修正が必要
          • トゥーンレンダリング
            • △ テクスチャ陰影とのバッティングする要素が多い
        • 制御マップの導入
          • 専用のテクスチャを用意
          • RGBチャネルで強度を制御
        • 正しいライティングを行うための課題
          • 正しい法線情報が必要
          • 3D標準はライティングをしていないので、法線情報がない
            • 正確には、アウトラインに調整した法線情報しかない
            • Unityメッシュデータは2つの法線情報を保持できない
        • 2つの法線を保持させる方法
          • Asset Import時に処理
          • UV2とUV3に法線情報を入れたFBXを別途用意
          • インポート時にUV2とUV3をtangentへ移動
        • オーサリングの課題と解決
          • 今まではMaya上の見た目がUnityと概ね一致していた
          • ライティングアルゴリズムの変更により一致しなくなった
            • アーティストにとって非効率
          • シェーダを組み直し
        • まとめ
          • ライティングアルゴリズムの変更は栄養範囲について最大の配慮が必要
          • 導入したアルゴリズムは非常に効果的だった
          • アーティストへの配慮も重要
      • 画面解像度
        • 標準解像度ではMSAAx4を適用
        • MSAA導入時の注意点
          • テクスチャのサンプリング範囲が広がる
          • UVレイアウトによってはノイズが表示される
          • テクスチャを修正して対応
          • 背景はノイズが目立つ箇所のみパディングを4ドットに拡張
          • キャラクタはUV
        • まとめ
          • 解像度変更は採択しやすい
          • パディングは統一ルールを設ける
          • ジャギーの緩和自体は効果がある
      • ETC2フォーマットの導入
        • なぜ必要?
          • テクスチャ圧縮時に発生するバンディング問題を解決したい
          • 繊細な表現に問題がある
            • グラデーション
        • バンディングの解決方法
          • TETC2は圧縮時間と品質をバランス良く担保
        • なぜ使っていなかった?
          • OpenGLES2.0ではETC2は拡張扱い
            • メモリ使用量が6倍になる
          • Unity5.1.2では例外対応できない
        • ETC2フォーマットを導入するために
          • Unityのバージョンアップをする
        • まとめ
          • ETCはテクスチャ品質が低い
          • ETC2を採用するには動作保証する端末を適切に行う


  • 運営中Unityバージョンアップを成功させるための考え方と開発の進め方
    • Unity 5.1.2 -> 5.4.5へバージョンアップ
    • 今回のバージョンアップの前提
      • リリースして2年、バージョンを上げたことがない
      • バージョンアップポリシーは大きく2つ
        • 安定版を利用、アップデートは最小限
        • 積極的に最新版に合わせる
      • 今回は前者
    • どのようにすすめるか?
      • どのバージョン、どの順番、どのように混乱を避けるか
      • まずバージョンの選定を行う
    • ブランチ運用の構成図
      • 運営
        • release
        • develop
      • アップデート
        • develop
        • develop_rich   すべての作業が終わったらdevelopにマージ
        • Unity5.4.5   develop_richにマージ
    • コーディングのポリシー
      • いつでもバージョンを切り替えができるようにする
        • #if UNITY_5_4_OR_NEWER #else ...
      • シェーダのAutoUpgrade対応
        • AutoUpgradeを無効にする
        • シェーダもバージョン分岐
      • AssetBundleの互換性を保つ
        • 意図しないシェーダを含むことがある
          • シェーダに互換性がなかった
        • シェーダの見つけ方
        • シェーダをAssetBundleから分離する
          • シェーダをAssetBundle化すれば分離できる


  • 大型アップデートを成功させる考え方、Unityを使った開発の進め方
    • 開発したものが運営に対してどういう影響をあたえるかを考える必要
      • 増えたリソース数7000件
      • 増えたAssetBundle数2150件
    • ほんの少しの懸念も大きな影響を与える可能性
    • 懸念点
      • AssetBundleのビルド時間増大
        • 実際は大きな問題にならなかった
        • 並列ビルドをしていたため
          • ビルド済みのManifestは再ビルド必要ない
          • アセットをカテゴリごとに管理し、ビルド不要なカテゴリは事前にManifestをコピー
          • アップデートで増加したAssetBundleを新カテゴリとすることで、ビルド時間の改善が可能
      • Assetインポート時間の増大
        • UnityCacheServerが導入されておらず、以前からインポート時間が問題になっていた
        • マテリアルを動かす際に問題
          • 再インポートを明示的に行いキャッシュを更新すればよい
      • 新規リソース追加による管理コスト増大
        • 今回追加したすべてのファイルの末尾に一律の単語をつけて管理
          • ex) folder_A_hq
    • まとめ
      • どう進めれば安定した運営を提供し続けられるか
      • 開発したものが運営に対してどういう影響をあたえるか
      • 開発の段階ですべて潰して運営に導入する

[Unite2018] スクリプトによるTimelineがっつり拡張入門

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session56

講演者

森 俊之 (ユニティ・テクノロジーズ・ジャパン合同会社)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyotimeline/UnityTechnologiesJapan/unite-2018-tokyotimeline

※本公演は多数のアニメーションGIF, ムービーを含んでいるため Slide Share での再現はできませんでした
下記URLより講演スライド(Power Point)とサンプルプロジェク トをダウンロードしご確認ください
http://prt.nu/0/timeline

概要

  • Timelineのおさらい
  • スクリプトでの拡張が必要になるとき
  • Timeline拡張の方法
  • さらなるスクリプト
    • After Effectからコンバート

f:id:turgure:20180624092129p:plain


内容

  • Timelineのおさらい
    • Animation track
      • bindしたGameObjectのパラメータを時間経過に従ってアニメーション
      • transform, colorなど様々なフィールドを書き換え可能
      • 自作シェーダのパラメータも対応可能
    • データ構造と用語の説明
      • playable拡張子
      • Track
        • コントロールするオブジェクトをバインド、クリップを保存
          f:id:turgure:20180626090346p:plain
      • Binding
      • Clip
        • キーフレームでコントロールするデータ値
        • 時間ごとのColor, position, rotationなどが入っている
          f:id:turgure:20180626090417p:plain


  • スクリプト拡張が必要になるとき
    • どんなとき?
      • インタラクティブなものを加えたいとき
        • ex) THE PHANTOM KNOWLEDGE
          • シーン遷移など
      • Gameobjectにないパラメータをコントロールするとき
      • Animation Trackでは操作が複雑になってしまうとき
        • ex) Fader
          • Animation Trackを使う場合
            • 5ステップくらい
            • 時間を変えたい場合作り直しが必要
          • カスタムトラックで作る
            • 3ステップ
            • 作り直しの必要がない
      • そもそもUnityに機能がないとき
        • ex) 連番画像はストリーミング処理したい
          • 画像を2Dスプライトに変換しない
            • スプライト画像は実行ファイルの起動時に読み込まれるため、起動時間が馬鹿にならないことがある


  • Timelineの拡張方法
    • Animation TrackとMonobehaviorをかませて管理
      • Monobehaviorに擬似的なフィールドを作って適用
      • Post Effectやプロジェクト全体設定を変えたいときに有効
      • 典型的な例
    • Control Track
      • ITimeControlインターフェースをMonobehaviorに実装
      • 複雑なパラメータが必要ないときにおすすめ
      • ex) スタートやエンドでとにかくコールバックがあればいいとき
        • デモ中の制御が必要ない
        • イベント再開までTimelineの更新停止も可能
      • ex) 時間が決まればsetTime()内に関数的にかける処理
        • カメラの軌道をプログラムで書く
        • UVスクロールやフェードアニメーション
        • Clipの長さが取れないとき
      • カスタムPlayable Track
        • 専用のトラックを構築
        • トラック全域に渡って対応可能なMixer.ProcessFrame()
      • 5つのクラスで構成
        • Track    どんなオブジェクトがバインドできるか
        • Clip     どんなパラメータを扱うか
        • Behavior   クリップ単位の補間
        • Mixer    トラック単位の補間
        • Drawer   グラフィックを美しく
          • Asset Storeで”Default Payables”で検索
            • 最初は自力で書いたほうがいい
        • 先にBehaviorとMixerについて
          • Behavior   クリップごとに作成されてフレームごとの処理
          • Mixer    トラックごとに作成されてフレームごとの処理
          • 両方ともProcessFrame()で処理
          • BehaviorのProcessFrame()を利用することはほぼない!
            • ex) 処理落ちした場合
              • 回復したフレームが処理終了後の場合コールされない
                • Mixer.ProcessFrame()のみ使う!
        • カスタムトラック
          • Track
            • 何がバインドできるのか定義
            • どんなクリップが貼れるのか定義
            • トラックの色
            • Mixerを管理
            • タイムラインで変更されるパラメータ定義
          • Clip
            • キーフレームに入れたいデータを定義
            • ClipCapsを定義
            • ClipのBehavior生成
          • Behavior
            • Clipの情報を解釈して処理
              • ProcessFrame()はあまり使わないほうが良い
          • Mixer
            • トラック全体に渡ってProcessFrame()が呼ばれる
            • Clipのミキシングが可能
      • Recordボタンやカーブ編集は?
        • いくつかのルール
        • 補間処理はUnityに任せる
          • playable.GetInputWeight(int)
          • durationを縮めた場合は最後まで再生されない
          • DefaultPlayableで作ったものはこのタイプ
            • ルール1. Clip内のパラメータ
              • Clip内にBehaviorを持つ
              • クリップ内のBehaviorは必ずpublic!
            • ルール2. カスタムDrawer推奨
              • Inspectorをすっきりさせる


  • Playable Track
    • これのProcessFrame()はBehaviorのもの
    • 要注意


  • さらなるスクリプト
    • ScriptからのTimelineを構築
      • ex) After Effectからコンバート
        • スクリプトのみでTimeline構築
        • UIのEventSystemCanvasスクリプトから構築
        • The PhantomKnowledgeで使ったMovie Proxy Pluginwを使用
        • 連番画像アニメーション限定
        • 試し方
          • AEで AEProject/testProject.aep を読み込む
          • AEで AEPlugins/AEJson.jsx スクリプト実行
            (環境設定でプラグインの書き込み許可を忘れずに)
          • 任意の場所に json ファイルを保存
          • Unity 側でメニューからMovieProxy/Sample/Import AE Timelineを選択
          • 先にセーブした jsonファイルを指定して読み込み