Upgrade to Pro — share decks privately, control downloads, hide ads and more …

内製タイムラインツールCuttの紹介

Cygames
November 30, 2015

 内製タイムラインツールCuttの紹介

2015/11/15 Cygames Tech Fes

Cygames

November 30, 2015
Tweet

More Decks by Cygames

Other Decks in Programming

Transcript

  1. 自己紹介
    • 中川均
    • エンジニア
    • Unityが得意
    • 開発経験は家庭用とスマートフォンの開発
    半々ぐらい
    • サーバー側やっていたことも
    • ツールを作るのが結構好き
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  2. Cuttとは
    • Cygames Unity Timeline Tool
    • Unity上に実装したタイムラインエディタ
    – タイムライン上にKeyを打って任意のパラメータを変更、ア
    ニメーション(イーズしたり)する
    – カメラワークをつけることも可能
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  3. 作成の経緯
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  4. 作成の経緯
    • あるプロジェクトでカメラワークを設定するツー
    ルが必要に
    • さらに、シーン中のオブジェクトのパラメータを
    タイムライン上で設定、アニメーションできる必
    要も出てきた
    • カメラワークをつけられるタイムラインツールを
    用意することに
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  5. 作成の経緯
    • まず、いくつか既存のアセットを調査・検証した
    – Animator - Timeline Editor
    – Aperture Cutscene Editor
    – uSequencer …など
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  6. 作成の経緯
    • 検証のポイント(評価基準)
    – コード変更可能なライセンスか
    • 仕様追加、仕様変更にツールが対応できない場合、コー
    ド修正でなんとかできる可能性
    – 機能的に十分か
    • 外部からの再生時間操作、カメラワークの設定、オブ
    ジェクト操作 etc…
    – かといってオーバースペックすぎはしないか
    • モバイル向けで、CPUに空きがなさそうな利用タイトル
    • ランタイムの処理負荷は可能な限り抑えたい
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  7. 作成の経緯
    • 検証の結果
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  8. 作成の経緯
    • 「これで大丈夫そう!」と言えるものは無かった
    – ずっと調査と検証ばかりしているわけにもいかな
    い・・・
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  9. 作成の経緯
    • では自分で作るのか?作れるのか?
    – 作るものの大枠は分かっている
    • カメラワーク、タイムライン
    – 時間は無いこともない
    • 当面必要な機能は少ない
    • 詳細な仕様はこれから。徐々に作っていける
    – リスクはむしろ低い
    • 全部自分のコード。コード変更も容易
    • 根っこのデータ構造から自由にできる
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  10. 作成の経緯
    • 覚悟を決めて内製へ …
    – ねんがんのコードがかけるぞ(心の声
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  11. そして出来上がったのがこちら
    (DEMO)
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  12. Cuttの特徴
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  13. Cuttの特徴
    • インゲームでリアルタイム編集
    – リアルタイム=編集しながらプレビューできる
    • 高速な編集イテレーション
    – 編集作業すべてをインゲーム(プレイ状態)で行う
    • 編集時と実際の動作時で違いが発生しずらい
    – データ構造がツールとランタイムで共通だから可

    • Unity上に実装されたツールの利点
    – といっても、実際には利用タイトル側もインゲーム
    編集を考慮した作りにしないとダメ
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  14. Cuttの特徴
    • 結果的に充実した編集補助機能
    – 基本的なKey操作、複数Key同時編集
    – Keyの検索処理
    – スクラッチシート
    – フレームのブックマーク機能
    – 任意フレーム間のループ再生
    – タイムラインのフィルタリング
    – タイムライン移動のホットキー設定
    • まさかこんなに実装することになるとは…
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  15. Cuttの特徴
    • 割とコードを書く必要がある
    – コーディングレスにするつもりは全くない
    – 内製の利点は柔軟性
    • 新規仕様、仕様変更に柔軟に対応できるようにガチガ
    チに固めない
    – 編集効率を上げるGUI、ワークフローを実現する
    • 利用タイトルの要望に最適化する
    • コードを書きたくないなら何か目的にあった既存ツールを…
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  16. Unity上でのツール作成Tips
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide

  17. Cuttタイムラインの描画方法
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • 白いテクスチャ(EditorGUIUtility.whiteTexture)に色
    を乗せてひたすらDrawTexture

    View full-size slide

  18. OnGUIの負荷軽減
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • 大量の描画物&負荷に配慮してないコードで
    処理負荷は跳ね上がる

    View full-size slide

  19. OnGUIの負荷軽減
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    使い倒してくれてありがとう本当に

    View full-size slide

  20. OnGUIの負荷軽減
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • 大量の描画物&負荷に配慮してないコードで
    処理負荷は跳ね上がる
    • 純粋に描画するだけならRepaintイベント時だ
    けで良い

    View full-size slide

  21. プレイ状態でPrefabのApplyを行う
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • そもそもPrefabはプレイ中だとApplyできなく
    なる
    プレイ!

    View full-size slide

  22. プレイ状態でPrefabのApplyを行う
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • なのでスクリプトからApply(NGパターン)
    Nullが返る

    View full-size slide

  23. プレイ状態でPrefabのApplyを行う
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • ただしくは

    View full-size slide

  24. ちっちゃいボタンを出したい!
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • こういうやつ

    View full-size slide

  25. ちっちゃいボタンを出したい!
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • スタイルが用意されているのでそれを使うだ
    け!
    • EditorStylesには他にもいろんなスタイルがあ
    ります。

    View full-size slide

  26. OnGUIでのしつこい例外に
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • 実行されるとどうなっちゃうでしょうか?

    View full-size slide

  27. OnGUIでのしつこい例外に
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • ウィンドウの閉じるボタンが反応しなくなって、
    最終的にUnityごと落とすほかなくなる・・・
    • 面倒くさい・・・。
    • そこで、保険としてこのコードをおすすめ

    View full-size slide

  28. OnGUIでのしつこい例外に
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE
    • これでWindowを閉じることができる

    View full-size slide

  29. 以上です。
    ご清聴ありがとうございました
    $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

    View full-size slide