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

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【Unity5でレースゲーム】CarWaypointBasedで敵車を出す。そしてプロジェクトファイルが壊れる。

Unity オープンワールドレーシングゲーム

前回の

tf.hateblo.jp

の続きです。

今回は、UnityのStandard Assetsの中に入っているCarWaypointBasedというプレファブから敵車を作ってみました。

なお、CarWaypointBasedの使い方はこちらのブログを参考にさせて頂きました。tsubakit1.hateblo.jp


このオブジェクトをシーンに入れると初期設定ではグルグル同じところを回ってしまうので、道順を教えてあげる必要があります。

まずはEmptyオブジェクトを作成して名前を付け(例: Waypoints)、その子供としてさらにいくつかEmptyオブジェクトを作成し名前を付け(例: Waypoint000, Waypoint001…など)、シーン上の曲がりたい交差点に配置します。親のオブジェクトにStandard AssetsのUtilityに入っているWaypointCircuitスクリプトをAddし、スクリプトのAssign using all child objectsボタンを押すと子オブジェクトの情報が取り込まれるはずです。敵車は登録された最初の子オブジェクトを目標としてスタートし、そこに近づいたら次の子オブジェクトに目標を切り替え、目標を切り替えながら指定したコースを走って行きます。

私だけかも知れませんが、Assign using all child objectsボタンを押すと下記のようなエラーが出て子オブジェクトの情報の取り込みが失敗する事がありました。

NullReferenceException: Object reference not set to an instance of an object
UnityStandardAssets.Utility.Inspector.WaypointListDrawer.OnGUI (Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label) (at Assets/Standard Assets/Utility/WaypointCircuit.cs:332)

原因はわかりませんが、なぜか子オブジェクトをシーン上に配置してからボタンを押すと成功するようですので、先に子オブジェクトをシーン上に適当に配置する事をお勧めします。

シーンにオブジェクトを配置するのも初めは勝手がわからず一苦労でしたが、シーンを真上から見た状態でズームアウトし、動かしたいオブジェクトの中心にある緑色の四角形をクリックし、フチを黄色にした状態でShift+Commandを押しながら移動すると地面にへばりついた状態で前後左右に自由自在に動かせる事を知ってからはかなり楽になりました。

次にCarWaypointBasedプレファブをHierarchyにドラッグして敵車のオブジェクトを作ります。
WaypointProgressTrackerというスクリプトがアタッチされているので、Circuitに先ほど作ったWaypointsオブジェクトをドロップします。
Progress StyleをPoint to Pointに変更し、Point To Point Thresholdをだいたい交差点の半径くらいに合わせます。Point To Point Thresholdで指定した距離までWaypointに接近したら次のWaypointに目標が切り替わり、ステアリングを切り始めます。従いまして、この値を大きくすれば早めにステアリングを切り始めるので内側の壁に当たりやすく、値が大きいとステアリングを切り遅れて外側の壁に当たりやすくなります。

今回の動画です。

自車に影が落ちていないのと敵車のエンジンが離れても小さくならないのが気になりますので次回修正します。
今は、何故かUnityのプロジェクトファイルがおかしくなりシーンから何もかもがいなくなり地面と空と太陽だけになってしまったので泣きながらプロジェクトを1から作り直しているところです。
ちなみに、Time Machineのバックアップから復元を試みましたが、

“inspectorexpandeditems.asset”はコピーできません。コピー先ボリューム上に同じ名前の別の項目が存在しており、コピー先ボリュームはファイル名の大文字/小文字を区別しません。

というエラーがでて復元できませんでした。
これってゲームの完成直前で発生したら確実に発狂しますね。