【Unity5でレースゲーム】ゴールを演出するカメラを設置
これまではゴールが無く何周でも好きなだけ走れたこのゲームですが、それではレースにならないので一応ゴールを設置しました。
最後のチェックポイントは通常のチェックポイントと違い、赤色の矢印が上から下に動くようにしてみました。
そして、ゴールの瞬間に車をコース脇に設置した固定カメラから映すような演出を入れてみました。
レースゲームで良くあるこういうヤツです。
普通のゲームではこのとき自動操縦モードになってゴールの余韻に浸ったりできるわけですが、このゲームの場合は今のところ自動操縦にはならず、自分でアクセルを踏み続ける必要があります。
動画です。
ゴール用カメラのDepthの値はメインカメラより大きくしておき、普段はカメラコンポーネントとオーディオリスナーコンポーネントをディセーブル(.enabled = false)にしておきます。
ゴールした瞬間にプレイヤーカーからEnableCamera()メソッドが呼ばれるとカメラコンポーネントとオーディオリスナーをenableにします。
このとき、プレイヤーカーのオーディオソースのSpatialBlendを1に設定しています。
通常時は高速走行時の音の濁りを防止するため自車のSpatialBlendは0にして3D効果を切っているのですが、それだとカメラの目の前を通り過ぎて行く感じが出ないためです。
あとはメインカメラとゴール用カメラのタグを入れ替えゴール用カメラをメインカメラとし、メインカメラとメインカメラのオーディオリスナーをディセーブルにします。
メインカメラが生きたままだと、ゴール用カメラに切り替わった後も裏で処理をしておりフレームレートが下がるのでこうしています。
タグを入れ替えるのは、車のオーディオ処理用スクリプトがメインカメラを参照しているからです。
最後に自車を映し続けるコルーチンを起動して完了です。
スクリプトです。
using UnityEngine; using System.Collections; using UnityStandardAssets.Vehicles.Car; public class GoalCamera : MonoBehaviour { private Camera _goalCamera; private GameObject _mainCameraObject; private Camera _mainCamera; private AudioListener _goalAudioListner; private AudioListener _mainAudioLister; private float _initialSpatialBlend = 0f; // とりあえず3D offで初期化しておく private IEnumerator _coroutine; private Transform _target; void Start () { _goalCamera = GetComponent<Camera>(); _goalCamera.enabled = false; _goalAudioListner = GetComponent<AudioListener>(); _goalAudioListner.enabled = false; _mainCamera = Camera.main; _mainCameraObject = _mainCamera.gameObject; _mainAudioLister = _mainCamera.GetComponent<AudioListener>(); _coroutine = FollowPlayerCar(); } public void EnableCamera(Transform target) { _target = target; AudioSource audioSource = _target.GetComponent<AudioSource>(); _initialSpatialBlend = audioSource.spatialBlend; _target.GetComponent<AudioSource>().spatialBlend = 1f; // 自車の3D効果をONにする gameObject.tag = "MainCamera"; _goalCamera.enabled = true; _goalAudioListner.enabled = true; _mainCameraObject.tag = "Untagged"; _mainCamera.enabled = false; _mainAudioLister.enabled = false; StartCoroutine(_coroutine); } IEnumerator FollowPlayerCar() { while(true) { transform.LookAt(_target, Vector3.up); yield return null; } } }
https://itunes.apple.com/jp/app/toraberushutingu-retorona/id917570972?mt=8&uo=4&at=10laCt
https://itunes.apple.com/jp/app/beecluster-wu-liaono-zongsukurorushutingugemu/id663801586?mt=8&uo=4&at=10laCt