Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Cuttの特徴 • インゲームでリアルタイム編集 – リアルタイム=編集しながらプレビューできる • 高速な編集イテレーション – 編集作業すべてをインゲーム(プレイ状態)で行う • 編集時と実際の動作時で違いが発生しずらい – データ構造がツールとランタイムで共通だから可 能 • Unity上に実装されたツールの利点 – といっても、実際には利用タイトル側もインゲーム 編集を考慮した作りにしないとダメ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT *OD "MM3JHIUT3FTFSWFE

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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