[Unity] Unityちゃんのサンプルプロジェクトをしらべてみる1

導入

かっこいいエフェクトとか、演出したいんだけどどこから手をつけていいか
全然わからかったので、とりあえず動かせて、ソースコードが全部公開されてる、
なおかつかっこいいサンプルプロジェクトを探してました。

で、公開されたのは結構前みたいですが、Unityちゃんが踊るサンプルプロジェクトが
公式で公開されていたので、これを参考にしてみることにしました。

サンプルプロジェクトの動かし方とか、そういうのは配布ページ等を参照してください。

※前提としてこれを書いてる人は、プログラムとかはある程度仕事でやってるけど
3DCGやらUnity歴一ヶ月弱程度で、理解が追いついていない部分が多々あるかともいます。。。
なにか間違ったことを言っていればTwitter等で教えていただけれると喜びます!

動かすとこんな雰囲気のMVが流れてきます。

Screen Shot 2016-03-06 at 19.51.15

まずはMainシーンを開いて、動かしてみる

すると、Scene上に目視できるオブジェクトは何も配置されておらず、
Hierarchyを見てみると、Stage DirectorとApp Configのみ。

再生すると、一気にステージやキャラクター、空などが生成されます。

App Config

GlobalConfig.csがアタッチされています。

が設定されているのみ、です。
フレームレートの設定と、シェーダLODのしきい値を設定してます。
(シェーダLODのしきい値については公式を参照してください。
デフォルトで1000が設定されてますが、要するに使えるだけ全部シェーダ使う設定です。)

Stage Director

子にClose-up,Close-up2,FinaleというEmptyObjectを
持っています。

そしてStageDirector.csがアタッチされています。
(Animationも設定されていますが、あとまわし)

以下ちょくちょく抜粋

起動したら、とにかくいろいろ生成してる。
* 音声プレイヤー (musicPlayerPrefab)
* カメラいろいろ (cameraRigPrefab)
* objectsNeedsActivationに含まれている
* Confetti
* Stage
* を生成してメンバに格納
* objectsOnTimelineに含まれている
* CandyLockStar
* LipSyncController
* を生成してメンバに格納
* miscPrefabsに含まれている
* BackScreen
* BackScreenCameraRig
* Background
* CharacterRight
* Visualizer
* を生成

それぞれのPrefabについては、それぞれ別記事か何かで。

メソッドの名前と挙動から推測すると、全て踊り終わった時点で
上記のメソッドが呼び出されてループするようになってるようです。

ここは音楽再生スタート。
他の周りがいろいろ準備ができた段階で呼び出されるもの、だと思われます。

音楽プレイヤー (musicPlayerPrefab)

MusicPlayerというPrefabには4つのSpectrumという名前の
オブジェクトとMainというオブジェクトになっています。

Mainを含めて計5つのオブジェクト全てがAudioSourceコンポーネント
をもっていて、いずれもソースはUniteInTheSky.mp3です
(MVの曲)

MainをInspector内のチェックを外すと音が消えることから、
これが映像中で流れている音楽そのものだということがわかります。

それでは4つのSpectrumはなにをしているのでしょうか。
Spectrunには

  1. BaseBandFilter.cs
  2. AudioInjector.cs
  3. Reaktor.cs

これらは Reaktionというパッケージで
音声の成分を分解して、他に渡すようなもの、だと思われます。
仕組みを全部説明するのは大変なので、割愛します。
この段階ではどこで利用されているか、はわかりませんが
おそらく音声に反応する何かしらを利用している部分が出てきそうです。

カメラいろいろ (mainCameraRigPrefab)

今回(僕が)まず参考にしたいメインのひとつ、カメラです。
ここでいろいろわかるといいな。

MainCameraRigPrefabはふたつの子をもっています。

  • CameraSwitcher
  • CameraPositions

ひとつずつ見ていきます。

CameraSwitcher

子にMainCameraをもっていて
CameraSwitcher.csがアタッチされているだけのオブジェクト
公開プロパティはこんな感じ

targetNameは、カメラが移す中心になるオブジェクトの名前
Transform[] pointsには、カメラの初期位置を入れとく配列で
Prefabには初期値として32個のTransformオブジェクトが設定されていました。
(おそらくこれが仮想的なカメラの台数になる)

その他の値は、処理を追いながら・・・・
まずはインスタンス生成時

tagetNameのオブジェクトがもつtransformを取得し、それに加えてposition
をメンバに格納しています。

その後は子がもつ DepthOfFieldScatter (おそらく何かのエフェクター)
があれば初期化

autoChangetrueならStartAutoChange()を開始

下記一部抜粋

すごいざっくり言うと、上記の状態だと2秒毎にカメラ切り替え(のシミュレーション)
が行われていて、カメラとUnityちゃん間距離と、
視野角をInspectorから設定したカーブからいい感じに計算してます
(数値計算をどうやってるか、はChangePosition()だけ見ればOK)

知ってみれば以外と力技。
キメのとこでは、Unityちゃんによったり、すこし中心から逸らしたような
カメラワークとかもできたらいいですね。

カメラの切り替えとは別に、カメラの移動はUpdate() で制御されています。

とりあえず今回はここまで

次は

  • Confetti (紙吹雪)
  • Stage (ステージ)

この辺の処理をおってみたいです。

ライセンス

この記事の内容は以下のライセンスで提供されます

© Unity Technologies Japan/UCL

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です