Unity技術ブログ

Unity 3DGameKitの分析

こんにちは!フレンズひらたソフトの平田です!

この項では、3DGameKitのプロジェクトの分析を行っていきます!

まずはじめに

Unity2018のβ版を開きます。

(僕の環境では、2018.1.0b13で確認しました。)

3D Game Kit をAsset Storeからインポートします。

こちらから

Edit->Projrct Settings -> QualityのFantasticからFastest に変更

(初期だと非常に重たい設定になっているので変更します。)

注意:現在の3D GameKit βでは、エディタインポート後にエラーがでるので、Unityを再起動する必要があります。

(一度目のインポートでコンソールに大量にエラーがでます)

 

一旦ゲームをプレイしてみる

Assets/Scenes/Start.unityを開きます。

開きましたら、ゲームを再生します。

Startボタンを押下

Loading画面後にゲームが開始します。

主な操作方法など

・Spaceキーでジャンプします。

・mouseの座標をみてカメラの視点が切り替わります。

・各矢印キーで移動ができます。

・武器入手後は左クリックで攻撃ができます。

攻撃で特定ブロックなども破壊できます。

ギミックを解いてゲームを進行させていきます。

ゲームシーン中のオブジェクトをざっくり調べて見ました

Assets/Scenes/GamePlay/Level01.unityを開き、Hierarchyの内容をざっくりと確認しました!

SceneController

ゲームシーンをコントロールするような処理を行うスクリプトがアタッチされています。

SceneController.cs

SceneController.Instance

からアクセスできるシングルトンなスクリプト

initialSceneTransitionDestination

RestartZone( bool resetHealth = true)

でシーンの再スタートが可能

RestartZoneWithDelay(float delay, bool resetHealth = true)

で遅延させてシーンの再スタートが可能

TransitionToScene(TransitionPoint transitionPoint)

で引数で渡してやったTransitionPointへ移動可能

SceneTransitionDestination GetDestinationFromTag(SceneTransitionDestination.DestinationTag destinationTag)

宛先タグからシーンの遷移先を取得する

 

SceneControllerWrapper.cs

SceneControllerWrapperのラッパークラス

ScreenFader

ScreenFader.cs

CanvasGroupのフィールドをいくつか持っていて

画面遷移や読み込み中のUIイメージを表示することを管理しているオブジェクト

ScreenFader.Instanceからアクセスできるシングルトンなクラス

bool  IsFading

でフェード中か否か取得できる。

public float fadeDuration

でFadeにかかる時間を設定

public static IEnumerator FadeSceneIn ()

メソッドからFadeInを実行可能

public static IEnumerator FadeSceneOut (FadeType fadeType = FadeType.Black)

メソッドからFadeOutを実行可能

public static void SetAlpha (float alpha)

直接alpha値を入れてcanvasの透明度を変えることも可能です。

EditorCamera

初期ではdiasbleになっている。

おそらくEditorにおける表示確認チェック用のカメラコンポーネント

アタッチされているLayerCullDistances.csの各Layer名の値を変えることで

Layerの表示順を変えることができるみたいです。

また、

アタッチされているScreenshotWithAlpha.cs を右クリックすると出てくるコンテキストメニューから

ゲームシーンのスクショを取得してDeskTopに保存可能だったりします。

 

GlobalShaderSettings

GlobalShaderSettings.csがアタッチされていて、各種フィールドの値を変えることでリアルタイムに

ゲーム中のオブジェクトのシェーダーのパラメーターを変えることができます。

HealthCanvas

ゲーム中の体力表示を行うためのuGuiのCanvasです。

CameraRig

各種カメラの制御をおこなっているオブジェクト

以下のようなゲームオブジェクトを配下に持ってました。

CameraBrain

メインカメラがアタッチされているオブジェクト

また、Cinemachine系のコンポーネント(カメラの動きをコントロールするためのコンポーネント)や

PostProcess系のコンポーネントやLayerの重なり順などを制御するためのスクリプトがアタッチされていました。

KeyboardAndMouseFreeLookRig

KeyboardやMouseでの操作に応じてカメラを動かすためのオブジェクト。

CinemachineFreeLookやCameraShake、ChinemachineColliderがアタッチされています。

CinemachineFreeLookで自由自在に指定されたカメラを移動させることができます。

CameraShake.csで画面を揺らしたい時の制御なども行っている模様。

ControllerFreeLookRig

こちらもChinemachine系のコンポーネントがアタッチされたオブジェクト。

Ellen

このゲームのプレイヤーキャラクター(Ellen)さんのオブジェクト

子オブジェクトの構成は以下のようになっています。

TrailEffect

武器で攻撃を行った際のエフェクトオブジェクトを格納普段は非表示ですが、攻撃時に表示に切り替わります。

Ellen_Body

3Dのモデルデータになります。

AudioSources

各種効果音などが入っています。

 

Ellenのインスペクター

AnimatorやCharacterControllerや

Damageableという攻撃を受けた際に各種トリガーに応じて

Messageを受け取る処理を指定することができるコンポーネントがアタッチされています。

また、PlayerInputやPlayerControllerなどのプレイヤーの入力を受け付けるためのスクリプトもアタッチされています。

 

Enemies

各種敵キャラクターオブジェクトが配下に入っています。

Chomper_Gameplay(配下の敵キャラクターの一例)

 

TransitionStart

InformationZones

画面のメッセージや、その他表示を行うためのCanvasなどが格納されているオブジェクト

Destructables

ゲーム中に点在するDestructableBox が格納されています。

Level01Gameplay

各レベルのゲーム中に点在する、スイッチやクリスタルなどのオブジェクトが格納されています。

DeathVolume

コライダーがアタッチされており、

触れると死亡扱いになるスクリプトがアタッチされています。

Level01Audio

レベル1に点在している各種Audio Sourceがアタッチされたオブジェクト群を格納しています。

Level01PostProcessVolumes

このステージにおけるPostProcessVolumeの調整データ群が入っています。

Level01_Music

ゲーム中で流すBGMのAudio Sourceを格納しています。

Level01_ReverbZones

ゲーム中に点在するAudio Reverb Zone(残響効果)コンポーネントがアタッチされたオブジェクト群を格納しています。

Effects

ゲーム中に点在しているパーティクルエフェクトを格納しています。

Skybox

ゲーム中のSkyboxを表示するためのCameraやGeometryを格納しているオブジェクトになります。

Environment

ゲーム中の地形オブジェクトが入っています。

Level01_Lights

ゲーム中のLightオブジェクト群が格納されています。

ShadowBlockers

名前からして光を遮るようなオブジェクト群のようです。

LightProbes

Light Probe Groupがアタッチされたオブジェクト群を格納しています。

Water

水を表現するためのオブジェクト

反射を行うためのスクリプトなどもアタッチされている。

ReflectionProbes

ゲーム中で配置されているReflectionProbe群(周囲の球状のビューをキャプチャするカメラのようなものキャプチャしたイメージはその後、反射マテリアルを持つオブジェクトに使用されるキューブマップとして保存される)が格納されているオブジェクト