読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ユニティちゃんライブのシーン構造、オブジェクト間やコンポーネント間の参照関係を解析してみる [Unity]

Unity 日記 ユニティちゃん

昨日言っていたシーン解析機能の一つで、シーン内のオブジェクト間参照関係を図として出せるようにしたので、ユニティちゃんライブのシーンの参照関係を出力してみました。*1

この画像の出力にはGraphvizを使用しています。


Python から Graphviz を使う( pydot を日本語で出力) | 傀儡師の館.Python - 楽天ブログ

 

f:id:tsubaki_t1:20141125003221g:plainf:id:tsubaki_t1:20141125005418g:plain

 

まずはGameObjectの依存関係。大体緑の線がStageDirectorの影響範囲で、その他は独立して動作しているので、他のもので差し替えてもそれ程影響ない…といった感じです。

この図だとパットは気づきにくいですが、"Character1_Head"と"Camera Target"、それとMTH_DIFFはCandyRockStarプレハブ以下に配置されているオブジェクトなので、モデルを差し替える場合は注意が必要です。

これらを参照しているCameraSwitcherは、カメラの位置をスイッチする機能と対象の方向を向く機能を持っています。なので、キャラクターを差替えた時もカメラの向きを調整して欲しい場合は、この項目は確認しておくと良いです*2

f:id:tsubaki_t1:20141125005957p:plain

Rng 1等のシリーズは、背景のエフェクト群です。これらは完全に独立して動作しているみたいなので、参照関係を崩さない程度に適当に動かせそうです。

ちなみにSpectrumはMusic Playerの下に配置されてるオブジェクトで、つまりオーディオ解析なんかしちゃってるっぽいです。つまりオーディオにある程度影響して動くということ。スミカ・ユーティライネンです(´・ω・`)ノシ

f:id:tsubaki_t1:20141125010045p:plain

StageDirectorからの参照は、大体こんな感じの奴。Camera PointsClose-UpとかFinalとかは位置調整用に使用していて、他は何らかのメッセージ通知用に区別しているみたい。

f:id:tsubaki_t1:20141125141155p:plain

FinalとかClose-Upの位置はこんな感じ。Confetti(紙吹雪)はその名の通り紙吹雪をばら撒くやつ。一定時間後にPropActivatorでアクティブになります。

f:id:tsubaki_t1:20141125141430p:plain

 

 次にコンポーネントレベルの参照関係を。こっちの機能はGameObjectよりも若干充実していて、Animationからの呼び出しやSendMessageからの呼び出し、CameraやColliderからのコールバックもグラフ化されるようになっています。*3。文字列やAnimationEventでの参照は点線で表現されます。

それ以外の、変数やプロパティやEventや静的な参照は普通に線で表現されます。

f:id:tsubaki_t1:20141125010158g:plain

f:id:tsubaki_t1:20141125010213g:plain

 

まず目につくのが、StageDirectorがAnimationClip(StageDirector)からイベント呼び出しされてる点です。同様にFaceUpdateやMusic Starterがアニメーションにより制御されています。

 

右にはカメラ制御系が(偶然)固まっています。カメラにくっついてるコンポーネントは大体Cameraのコールバックを受けている事から、ImageEffect系のコンポーネントであると予想出来ます。

面白い点は、DOF(遠距離ぼかし)やScreenOverlay(画面全体に絵を表示する)をStageDirectorやCameraSwitcherが制御している点です。

あと上でも書いたとおり、レーザー等のギミック系がReaktorコンポーネント(オーディオとか解析する奴っぽい)をアクセスしているので、それを外さないように注意が必要です。

目とか口パクとか、とにかくMeshに関連する物は左下に集まってました。LipsyncController(口パク)やら、AutoBlink(目パチ)DeltaLookataxis(首周し?)等々。

 

 

まだグラフ出力機能の制御が完璧ではなくて、Lipsync機能とか追跡しにくい所があるのでアレではありますが、案外そこまで複雑な構造はしてないですね。

とりあえず「OBJ1・OBJ2・OBJ3」とか、「Player1(プレイヤーとは言ってない)」みたいなコンポーネントは無いので追えそうです

 

ユニティちゃんライセンス

このコンテンツは、『ユニティちゃんライセンス』で提供されています

*1:ちなみに揺れものを入れるとオブジェクト間参照がそこだけが凄いことになったので抜いてます

*2:Character1_HeadとCamera Target実行時にはオブジェクト名で探してるので、モデル内にこのオブジェクトを配置すると自動で追跡してくれます

*3:厳密に追跡してる訳では無いです