
レッスン 6.2 - 調査とトラブルシューティング
Tutorial
Beginner
+0XP
60 mins
(45)
Unity Technologies

概要:
このレッスンでは、Prototype 1 の車両に速度計と RPM 表示を追加することを試みます。このレッスンでは、新機能を実装したり、プロジェクトのバグをトラブルシューティングしたりする際のオンラインでの調査プロセスを学びます。新しい機能を追加することは、当初の印象ほど簡単ではないことがお分かりいただけると思います。普通はあまりオンラインでの調査を必要としない、予想外のやエラーに必ず突き当たることになるでしょう。このレッスンでは、そのような調査のやり方を学び、自分のプロジェクトでもそれができるようにします。
プロジェクトの成果物:
このレッスンの終わりには、車両はより現実に近い物理に従って動作するようになり、スピードメーターと毎分の回転数(RPM)表示が付いた状態になります。
Languages available:
1. 自動車が力学に従って動くようにする
速度計を実装するために、まず最初にしなければならないのは、力学に従った、実車のような加速、減速の挙動をさせることです。これは Translate を操作する方法とは対照的です。
- Prototype 1 プロジェクトを開き、バックアップを作成します。
- Translate の呼び出しを車両の Rigidbody に対する AddForce の呼び出しに置き換え、変数「speed」の名前を「horsePower」に変更します。
- 車両が動くようになるまで horsePower を大きくします。
- 車両を適切な方向に移動させるには、AddForce を AddRelativeForce に変更します。
2. 車がひっくり返らないようにする
車両に実世界の物理を実装しましたが、このままだと非常に簡単に横転してしまいます。車をより安全に運転できるようにするにはどうすればいいでしょうか。
- 車両の車輪にホイールコライダーを追加し、半径と中心位置を編集し、車輪の他のコライダーを無効にします。
- 新しく GameObject centerOfMass 変数を作成し、Start()で playerRb 変数を centerOfMass の位置に代入します。
- 車両の子オブジェクトとして「Center Of Mass」という名前の空のオブジェクトを作り、再配置し、インスペクターの Center Of Mass 変数に割り当てます。
- Center Of Mass の位置、速度、およびターン速度の値をいろいろ変えてみて、車両を思い通りに操縦できるような設定にします。
3. 速度計のディスプレイを追加する
ほぼ運転可能な状態になったので、ユーザーインターフェースに速度を表示してみましょう。
- 新しい「TextMeshPro - Text」を作り速度計に表示するテキストのオブジェクトを作ります。
- TMPro ライブラリをインポートしてから、TextMeshProUGUI 変数を作り、speedometerText に割り当てます。
- 速度を管理する新しい float 型変数を作成します。
- Update() で、速度を mph または kph で計算し、それらの値を UI に表示します。
4. RPM ディスプレイを追加する
多くのカーシミュレーターに搭載されているもう 1 つのクールな機能は、RPM(分あたりの回転数)の表示です。計算方法を考えるのが少々頭を使う部分です。
- 新しく「RPM Text」オブジェクトを作成し、新しく rpmText 変数を作成して、そこに割り当てます。
- Update() で、モジュロ(剰余)演算子(「%」) を使って RPM を計算し、その値を UI に表示します。
5. 空中を走らないようにする
車の機能はほぼ完ぺきになりましたが、まだ 1 つだけ大きなバグが残っています。空中にあるときも、車は加速、減速、ターンをしたり、スピードや RPM が増加したりするのです。
- allWheels(または frontWheels、backWheels)という名前の新しい WheelCollider のリストを宣言し、インスペクターで各ホイールをそのリストに割り当てます。
- 新しく int wheelsOnGround を宣言します。
- bool IsOnGround() メソッドを記述し、すべての車輪が地面に接地している場合は true、接地していない場合は false を返します。
- 加速、ターン、速度、回転数に関する機能を実装している部分を、車が地面に接地しているかをチェックする if 文で囲みます。
6. レッスンのまとめ
新しい概念とスキル
- Unity Answers、Unity フォーラム、スクリプティング API を検索する
- バグを解決するためのトラブルシューティング
- AddRelativeForce、Center of Mass、RoundToInt
- モジュロ(剰余)演算子(「%」)
- ループしてリストを検索
- bool 型の戻り値を返すカスタムメソッド