RigidBodyUdonRailwayはUdonとRigidBodyを用いてVRCワールドに操作可能な鉄道を敷くことを目的に開発さた、エディタスクリプト、U#スクリプト及びPrefabが含まれています。
使用にはFBXExporterが必要となります。 https://docs.unity3d.com/ja/Packages/com.unity.formats.fbx@4.1/manual/index.html
参照を同期する必要からビルドプロセスにて全レール、列車を配列登録しています。
他に連結器参照の自動設定や、走行用コンポーネントの設定値変更が今後増える可能性があります。
- シーンルートにあるRailsManagerを探索します
- 全Rail_Scriptを収集し、レールリストにします。
- RailsManagerにレールリストを登録します。
- Rail_Scriptに対してレールリスト上のIndexを渡します。
- 全Rail_Scriptの子として、RailsManagerのパラメーターに基づきメッシュコライダーを生成します。(WheelCollider用)
- シーンルート上にあるtrainManager,RailsManagerを探索します
- 全Trainを収集し、レールリストにします。
- Trainにレールリストを登録します。
- Trainに対してレールリスト上のIndexを渡します。
- Trainに対してtrainManager,RailsManagerを渡します。
- レールモデルを敷くために用意された編集用スクリプトと、VRC内で車両にレールデータを受け渡す物
モデル敷設スクリプト。 カーブや中途半端な長さのレールを敷設するために使用します。
設定値及び機能
| 設定値 | 概要 |
|---|---|
| cinemachinePath | 敷設先Path。これに沿ってモデル変形し、子オブジェクトを配置します |
| meshrendererObjectPrefab | 敷設する元メッシュ。 Rootオブジェクトのメッシュが変形されます FBXモデルを用いる場合、Read/Writeにチェックを入れること。 なお、敷設時、Rootオブジェクトの回転は無視されます。 |
| modelLength | meshrendererObjectPrefabで設定したメッシュの長さ([m])。 |
| TilingStart | 敷設開始点 |
| TilingEnd | 敷設終点 |
| isZinverted | MeshRendererObjectが-Zに伸びているか。 -Z方向に伸びている場合にチェックを入れないと始端終端がおかしくなります。 |
| ignoreRoll | ロール無視。 CinemachinePathが捻られている時、それを無視してワールドXZ平面に垂直を保って敷設します。 |
| ignorePitch | ピッチ無視。 CinemachinePathが捻られている時、それを無視してワールドXZ平面に並行を保って敷設します。 位置変位は保たれるため、平行四辺形変形された形になります。 |
| disbaleInstancedThreshold | インスタンス解除頂点変位閾値([m])。 この設定値を越えて頂点が移動された場合、インスタンス解除され頂点をPathに沿って変形したモデルが設定されます。 ※インスタンス:元モデルメッシュを参照複製して用いる。生成メッシュが減り容量が軽くなる、GPUInstancingが効く等の恩恵あり) |
| saveFolder | セーブ先フォルダ。/で階層を表す |
| veticesTransformSteps | 1ループで扱う頂点量 エディタ拘束を避けるため、多ループに跨がらせています。上げることで高速化が見込めますが、敷設中頻繁にフリーズするようになります。 |
| root | Cinemachine一括オフセット機能で用いる親オブジェクト |
| offset | レールモデル位置オフセット Cinemachine一括オフセット量 |
| 機能 | 概要 |
|---|---|
| TilingRails | TilingStart->TilingEndの区間でレール生成を行います |
| TilingRailAll | cinemachinePathの始点から終点までの区間でレール生成を行います |
| Cancel | 生成を強制停止します GameObject削除は行われず、生成途中の物が残りますが、Meshはセーブされていないためこの状態で保存しても消えてしまいます。 |
| SelectFolder | フォルダ選択画面を開きます。 新規フォルダ生成をこの先の画面で行うとUnityがフォルダを認識できず無限ループしてしまう不具合が報告されています。既存のフォルダを選択するようにしてください。 |
| Offset | Cinemachine一括オフセットを行います。 |
モデル配置スクリプト
設定値及び機能
| 設定値 | 概要 |
|---|---|
| cinemachinePath | 敷設先Path。これに沿ってオブジェクトを配置します |
| objectPrefab | 敷設するオブジェクト。プレハブ化必須。 |
| modelLength | モデル配置間隔 |
| TilingStart | 配置始点 |
| TilingEnd | 配置終点 |
| isZinverted | (このスクリプトではあまり意味の無いパラメーターです) |
| ignoreRoll | ロール無視。 CinemachinePathが捻られている時、それを無視してワールドXZ平面に垂直を保って設置します。 |
| ignorePitch | ピッチ無視。 CinemachinePathが捻られている時、それを無視してワールドXZ平面に並行を保って設置します。 |
| 機能 | 概要 |
|---|---|
| TilingRails | TilingStart->TilingEndの区間で配置を開始します |
| Cancel | 配置を強制停止します。残ったオブジェクトはそのまま使用可能です。 |
railModelTiler一括実行スクリプト。 指定されたpath全体にレールを生成します。
設定値及び機能
| 設定値 | 概要 |
|---|---|
| railModelTiler | バッチ処理を担当するrailModelTiler |
| batchingRoot | バッチ処理されるpathたちの親オブジェクト 設定されていると子にあるpath全てに対し生成を行います。 |
| batchingObject | バッチ対象のpath。batchingRootが設定されていると無視されます。 |
| 機能 | 概要 |
|---|---|
| Batching | バッチ処理を開始します。 |
| Cancel | バッチ処理をキャンセルします。その時点で動いている敷設処理はそのまま動き続けます。 |
- Rail_Script
レールスクリプト。始点と終点双方のレール参照を保持し、車両に次のレールを伝えます。
設定値/仕様
| 設定値 | 概要 |
|---|---|
| cinemachinePath | レールとするcinemachinePath。Smooth/通常両方使えます。 |
| moveableRail | 移動するレールか。 チェックされていると載っている列車は常に情報を更新します。 |
| next | path終点側接続レール |
| prev | path始点側接続レール |
Gizmoについて:
前後レールの設定がある場合、Gizmoは \/ (レール部分) \/ のような形になります。
前後レールの設定が無い場合、Gizmoは◯--◯ (レール部分) ◯/のような形になります。
設定したレール間が離れていると、巨大な球が描画されます。
レール管理スクリプト。
ビルド時自動設定が行われます。
同期のために設置が必要です。シーンルート直下に配置してください。
またこのコンポーネントの設定に基づきレールに対してコライダーが生成されます。
設定値/仕様
| 設定値 | 概要 |
|---|---|
| railColliderMaxLength | レールコライダーの最大長。これを越えているレールは収まる大きさに分割されます。 |
| railFaceMaxDivide | レールメッシュコライダーの分割数(将来的なポリゴン数最適化が行われる可能性があります) |
| railFaceWidth | レールメッシュコライダーの幅 |
| railColliderLayerName | レールコライダーのレイヤー名。未設定の場合はDefaultが使われます。 |
踏切スクリプト
JointSoundPlayerを検出し、範囲内に列車が進入/退出するとAnimatorのパラメーターを書き換えます。
設定値/仕様
| 設定値 | 概要 |
|---|---|
| animators | 設定先Animator。複数指定可能です。 |
| paramName | 書き換えるパラメーター(bool,in=true,out=false) |
Animator連携式ポイントスクリプト
Animatorからのイベント発火で駆動し、レールの参照を書き換えて分岐切り替えを行います
設定値/仕様
| 設定値 | 概要 |
|---|---|
| from1 | 分岐元レール changeTypeで指定した側のレールが切り替えになります |
| from2 | 分岐元レール(サブ) |
| changeType1 | bool , next=true , prev=false |
| changeType2 | bool , next=true , prev=false |
| to1 | 切り替え先レール(state=false) |
| to2 | 切り替え先レール(state=true) |
| state | 分岐状態保存変数。この値は同期されます |
| 仕様 | 概要 |
|---|---|
| Animatorイベント | AnimatorとUdonが同じオブジェクトに付いている場合、AnimatorからSendCustomEventを呼ぶことが出来ます。 引数としてStringを指定し、これでUdonのメソッドを呼べます。 |
| ポイント転換 | 上記方法でSetRoute1,SetRoute2を呼ぶことで、全プレイヤーのインスタンスで転換されます。(同期はスクリプト側で取っています) |
Animator連携式転車台スクリプト
Animatorの"mortorTorque"[float]パラメーターを参照し、mortorTorqueの速度と正負でレール(正確にはGameObject)を旋回、前後レールの参照を自動設定します。
同じオブジェクトにVRCStationをアタッチする必要があります。
Interactで動作開始します。
設定値/仕様
| 設定値 | 概要 |
|---|---|
| targetTable | 旋回するオブジェクト |
| mine | 旋回するレールのスクリプト |
| targets | 転車台周囲にあるレール mineにむけ参照を持っている想定で組まれています。 |
| animator | "mortorTorque"[float]パラメーターの参照先になるAnimator |
| syncedTableRotation | 初期回転位置からの差分。同期に使用 |
| Active | 動作状態。同期に使用 |
- 走行・連結用スクリプトと、独立した音源他アクセサリスクリプト
列車基本スクリプト
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| CenterOfMass | 重心位置設定 |
| CouplerF | +Z側連結器。オーナー同期に用います。 |
| CouplerB | -Z側連結器 |
| controllerAnimator | 設定の入出力Animator。 |
| connectionRecievers | 連結関係の情報を受け取るUdon |
| SubObjects | オーナーを同一としたいObject |
| (API) Rigidbody_Speed_LocalZ | 外部制御スクリプトで車速を利用する際に用いる長さ1配列。 |
| connectedTrain_F | +Z側連結車両 |
| connectedTrain_B | -Z側連結車両 |
| BogieRail_F | +Z側台車が載っているレール |
| BogieRail_B | -Z側台車が載っているレール |
| Bogie_F | +Z側台車中心 |
| BogieWheel_F | +Z側台車オブジェクト |
| Bogie_B | -Z側台車中心 |
| BogieWheel_B | -Z側台車オブジェクト |
| InitsyncRecieveMode | 初期化同期受信モード(True必須) |
| 機能 | 概要 |
|---|---|
| controllerAnimatorについて | 必須パラメータと機能を示します。 inはTrainへの入力、outはTrainからの出力を表します |
| out)RigidBodySpeed | 車両の速度です。+Z方向を正、単位は[m/s]/100です。(motionTimeでの扱いを想定しているため) |
| シーン上での連結 | connectedTrain_F/Bに各方向の連結したい車両を設定する事で、ビルド時に各種参照が自動設定されます。Gizmoが追加されています。 |
| ---------- | --------- |
| 連結器処理の仕様 | 連結が行われると、Train.csをアタッチしたオブジェクトのConfigurable Jointに自分の連結器位置と連結対象車両の連結器位置を用いて自動でAnchorの設定が行われ、またOwnerが移行されます。 |
| ---------- | --------- |
| BogieWheel、Bogie | BogieWheelオブジェクトは実行中常にBogieに最も近いレール上に合わせられます。この時車両をレール上に拘束するのはRigidBodyのJointを用いています。 |
| ---------- | --------- |
| Owner周りの仕様 | Owner変更が行われると、前後の車両に直ちに伝播します。 |
| ---------- | --------- |
| 同期について | 同期は連結された前後1両の車両のみが行います。 |
ブレーキ系のベースクラスです。
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| train | ブレーキを付けた車両です。Noneのままであればビルド時に親オブジェクトが自動設定されます。 |
| straightBrakePressure | 制御・動作用の直通管圧です。 |
| UseLegacyPipeState | ブレーキ管の開閉をこのオブジェクトから制御するかどうか |
| BrakeOpenF/B | UseLegacyPipeState=trueの場合、ブレーキ管の開閉初期設定になります。実行中の開閉は BrakeConnectorValve で制御されています。 |
| indicateAnimator | 圧力出力先のAnimatorです。(BrakePressure[MPa]) |
| indicateUdons | 管開閉状態表示用のUdonです。 |
| 関数 | 概要 |
|---|---|
| math_sqrt_2_q_Q_div_m | ブレーキ管の圧力計算に用いている関数です。2圧室の圧力を与え、戻り値に係数を掛けて使います。 係数は$10^3 S/(L\sqrt{m})$、 S:断面積 L:体積 m:密度定数 = |
| getStraightPressurePointer | 直通管の疑似ポインタ(長さ1の配列)を返します。 |
| setConnectedPressurePointer | 接続している直通管を設定します。 |
| ConnectionDebug | デバッグ用のStringを生成して返します。 |
開発者向け参考:オブジェクト参照図
---
title: Brake Object Diagram Before Connection
---
classDiagram
A_Train <-- A_Brake :train
A_Brake <-- A_Train :connectionRecievers
A_BPPressure <-- A_Brake : m_straightBrakePressure
A_Brake <-- F_BrakeValve : brakeModule
A_Brake <-- B_BrakeValve : brakeModule
null <-- F_BrakeValve:connectingPressurePointer
null <-- B_BrakeValve:connectingPressurePointer
namespace Train_A{
class A_Train["A:Train"]{
TrainID = 1
}
class A_Brake["A_Br:Brake"]{
}
class A_BPPressure["BPPressure_A:float[]"]{
}
class F_BrakeValve[":F_BrakeValve"]{
}
class B_BrakeValve[":B_BrakeValve"]{
}
}
---
title: Brake Object Diagram After Connection
---
classDiagram
A_Train <-- A_Brake :train
A_Brake <-- A_Train :connectionRecievers
A_BPPressure <-- A_Brake : m_straightBrakePressure
B_BPPressure <-- F_BrakeValve:connectingPressurePointer
A_Brake <-- F_BrakeValve : brakeModule
A_Brake <-- B_BrakeValve : brakeModule
B_Train <-- B_Brake :train
B_Brake <-- B_Train :connectionRecievers
B_BPPressure <-- B_Brake : m_straightBrakePressure
null <-- B_BrakeValve:connectingPressurePointer
B_Train <-- A_Brake :ConnectedTrain[0]
namespace Train_A{
class A_Train["A:Train"]{
TrainID = 1
}
class A_Brake["A_Br:Brake"]{
}
class A_BPPressure["BPPressure_A:float[]"]{
}
class F_BrakeValve[":F_BrakeValve"]{
}
class B_BrakeValve[":B_BrakeValve"]{
}
}
namespace Train_B{
class B_Train["B:Train"]{
TrainID = 2
}
class B_Brake["B_Br:Brake"]{
}
class B_BPPressure["BPPressure_B:float[]"]{
}
}
---
title: Brake Object Diagram After Open Valve
---
classDiagram
A_Train <-- A_Brake :train
B_BPPressure <-- A_Brake : ConnectedBrakePressure_B
A_Brake <-- A_Train :connectionRecievers
A_BPPressure <-- A_Brake : m_straightBrakePressure
A_Brake <-- F_BrakeValve : brakeModule
A_Brake <-- B_BrakeValve : brakeModule
B_Train <-- B_Brake :train
B_Brake <-- B_Train :connectionRecievers
B_BPPressure <-- F_BrakeValve:connectingPressurePointer
B_BPPressure <-- B_Brake : m_straightBrakePressure
B_Train <-- A_Brake :ConnectedTrain[0]
namespace Train_A{
class A_Train["A:Train"]{
TrainID = 1
}
class A_Brake["A_Br:Brake"]{
}
class A_BPPressure["BPPressure_A:float[]"]{
}
class F_BrakeValve[":F_BrakeValve"]{
}
class B_BrakeValve[":B_BrakeValve"]{
}
}
namespace Train_B{
class B_Train["B:Train"]{
TrainID = 2
}
class B_Brake["B_Br:Brake"]{
}
class B_BPPressure["BPPressure_B:float[]"]{
}
}
力行・制動の剛体車軸スクリプト 使用方法はプレハブ章のRB_Wheelを参照
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| WheelTreadSpeed | 円周上の速度(粘着時WheelTreadSpeed=RigidBodySpeed) |
| index | WheelTreadSpeed[index]で速度書き込みを行う |
| MortorForce | 回転力。円周上における力[N]。 |
| BrakeForce | ブレーキ力。円周上における力[N]。 |
| Friction | 摩擦力。[0]=静止、[1]、動。 |
| rb | 親RigidBody(通常はTrain) |
| wheel | 車軸となるRigidBody |
| brake | ブレーキシューとなるRigidBody |
| WheelPressure | 車両から押し付けられる力(仮想。RigidBody経由のものではない) |
車両集中管理用スクリプト
ビルド時自動設定が行われるため、設置のみ必要です。シーンルート直下に配置してください。
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| Trains | シーン上に存在する全ての車両 SetByBuildScript |
| pathRes | CinemachinePathからの計算精度 下げると向上しますがその分若干重くなります。 なお現在は接線から計算する処理を混ぜている為、0設定でもそこまで問題になりません。 |
| railsManager | レール管理スクリプト SetByBuildScript 同期処理で参照します |
連結スクリプト
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| TrainScript | 自身を装備している車両本体のスクリプト |
| Knuckle_Closed | ナックル開閉状態 |
| state | 連結器状態 0=lock, 1=unlock, 2=open |
| CouplerAudioSource | 音源再生に用いるAudioSource。 |
| --Sound | 対応イベント時にCouplerAudioSourceで再生されるAudioClip。 |
| FrontOrBack | 連結器方向。 +Z=Front |
| disconnectForce | 連結器開放に必要な力 |
| knuckleModel | [非推奨]ナックルのモデルオブジェクト。閉y=0,開y=90に回転されます。 |
| knuckleKey | [非推奨]予約済みフィールド(未使用) |
| CouplerEventListners | 下記したイベントを受けるUdon。 |
| 機能 | 概要 |
|---|---|
| 突放貨車向けの調整 | disconnectForceを大きめにすることで、動き出し衝動で外れるのをある程度防止できます |
| イベント | 概要 |
|---|---|
| setKnuckleState | ナックルの状態変化で呼び出されるイベント |
| setKeyState | 錠の状態変化で呼び出されるイベント |
| OnOpening | 固定状態から解放状態に移行した際のイベント |
| OnOpened | 解放状態から更に解放しようとした際に呼び出されるイベント |
| OnUnlocking | 固定状態から錠控えに移行した際に呼び出されるイベント |
| OnKnuckleClosing | 開放状態からナックルを閉じた際に呼び出されるイベント |
| OnCouplerCrashing | 固定状態の連結器同士が接触した際に呼び出されるイベント |
| OnDecoupling | 連結が解放された際に呼び出されるイベント |
| OnCoupling | 連結された際に呼び出されるイベント |
ブレーキ管開閉スクリプト
設定値及び仕様
Colliderを設定することで、Interactによる簡易な操作ボタンとしても使用することができます。| 設定値 | 概要 |
|---|---|
| brakeModule | パイプの開閉操作対象のブレーキ装置。Noneのままにした場合、取り付けた車両が持っている物に自動設定されます。 |
| PipeName | パイプ名称。ブレーキ装置側で解釈され、AbstractBrakeは"BP"管を持っています。 |
| F_B | 前後設定。trueが前(F)です。親が連結器の場合、自動設定されます。 |
| OpenState | 開閉状態。 |
| 関数 | 概要 |
|---|---|
| OpenBrakeValve | 対象のブレーキ管を開きます |
| CloseBrakeValve | 対象のブレーキ管を閉じます |
| (Interact) | 対象のブレーキ管の開閉を切り替えます |
フランジ音を再生するスクリプト
設定値及び仕様
| 設定値 | 概要 |
|---|---|
| trainBody | 列車のRigidBody |
| wheelBody_transform | Trainで指定しているWheelオブジェクト |
| FlangeSound | フランジの音源 |
| DotThreshould | フランジ音の再生を開始する押圧閾値 |
| MagnitudeThreshould | フランジ音の再生を開始する速度閾値 |
| 機能 | 概要 |
|---|---|
| 仕様 | Wheelの方向=レール方向と車両の移動方向の差から、内積を計算し、横方向の速度を計算します。単位はm/s |
| ---------- | DotThreshouldは横方向の閾値、MagnitudeThreshouldは前後方向の閾値。両方を超えているとフランジ音が再生されます。 |
| ---------- | 音量は横方向の速度に比例しますが、音量はDot-DotThreshouldになっています。 |
強制再同期用スクリプト
設定値及び仕様
| 設定値 | 概要 |
|---|
TrainManager|実際の同期処理を行う管理スクリプト
| 機能 | 概要 |
|---|---|
| 同期の流れ | Interact->TrainManager同期イベント発火 ->ローカル車両を強制同期待機モードへ,全車両オーナーへ同期データ送信リクエスト ->同期データ受信後補完無しで適用 |
設定値及び仕様
Train_Prefab
├── Train ----------------- [Train.u#] [RigidBody] [Configurable Joint(CouplerJoint)]*2
│ ├── Rigidbody_Box ----- [NonTrigger Collider]
│ ├── Bogie_Front ------- [Transform]
│ ├── Bogie_Back -------- [Transform]
│ ├── FCouplerObj ------- [CouplerObj.u#]
│ └── BCouplerObj ------- [CouplerObj.u#]
├── BrakeModule ----------- [AbstractBrake.u#]
├── WheelF ---------------- [RigidBody] [Configurable Joint(BogieJoint)]
└── WheelB ---------------- [RigidBody] [Configurable Joint(BogieJoint)]
()は実行時/ビルド時自動参照
Train [Train.u#]
├── ([RigidBody])
├── Bogie_F : Bogie_Front ------------- [Transform]
├── Bogie_B : Bogie_Back -------------- [Transform]
├── CouplerF : FCouplerObj ------------ [CouplerObj.u#]
├── CouplerB : BCouplerObj ------------ [CouplerObj.u#]
├── BogieWheel_F : WheelF ------------- [RigidBody]
├── BogieWheel_B : WheelB ------------- [RigidBody]
└── connectionRecievers
├── (BrakeModule - [BrakeModule.u#])
├── (FCouplerObj/BrakeConnectorValve - [BrakeConnectorValve.u#])
└── (BCouplerObj/BrakeConnectorValve - [BrakeConnectorValve.u#])
FCouplerObj,BCouplerObj
[CouplerObj.u#]
├── (TrainScript:Train [Train.u#])
└── (Train [Configurable Joint(CouplerJoint)])
WheelF,WheelB [Configurable Joint(BogieJoint)]
└── Train [RigidBody]
- シーン上にレールを敷き、TrainManagerの付いたオブジェクトを用意しておく
- Train_Prefabをシーン上に設置
- Train下にモデルを挿入
- シーンに敷いてあるレール上に移動
- Trainの角度をレールに合わせる
- Train_Prefab自体を回転させると浮動小数点演算誤差の問題が出やすくなるので非推奨。
- 位置参照を合わせる
- Bogie_Front/Backの位置をレール踏面・台車中心に移動
- WheelF/Bの位置をBogie_Front/Backに合わせる
- WheelF/Bの[Configurable Joint]のConnected AnchorをBogie_Front/BackのLocalPosition(Inspector上表示値)に合わせる。
- シーン上オブジェクトを参照する
- [Train.u#]のBogieRail_F/Bにそれぞれシーン上のレールを設定
- アニメーション制御の場合はcontrollerAnimatorに任意のAnimatorを設定
- 他車と連結する場合、Train[Train.u#]のconnectedTrain_F/Bに前後それぞれの連結したい車両を設定
設定値及び仕様
RB_Wheel ------------------ [MortorAndWheel.u#]
├── Wheel ----------------- [RigidBody] [Sphere Collider] [Configurable Joint]
└── WheelBrake ------------ [RigidBody] [Sphere Collider] [Configurable Joint]*2
()は実行時自動参照
RB_Wheel [MortorAndWheel.u#]
├──(WheelTreadSpeed ----- [float[]])
├── rb : Train ---------- [RigidBody]
├── Wheel : Wheel ------- [RigidBody]
└── Brake : WheelBrake -- [RigidBody]
Wheel [RigidBody]
└── Configurable Joint
└── ConnectedBody : Train -- [RigidBody]
WheelBrake [RigidBody]
├── Configurable Joint
│ └── ConnectedBody : Train -- [RigidBody]
└── Configurable Joint
└── ConnectedBody : Train -- [RigidBody]
- Train_Prefabをシーン上に設置しておく
- Wheel,WheelBrakeの各JointのConnectedBodyにtrainのRigidBodyを設定する
- WheelPressureへ車体から掛かっているべき力を設定する。単位は[N](Springは用いていない)
- 必要に応じて半径とBrake、Wheelの位置を調整する
- 必要に応じて力行・ブレーキ制御を行うUdonに設定を行う
数値類が配列になっているため、参照渡しを活用してオブジェクトを跨いだやり取りを高速に行うことができる。
Update内でMortorForce、BrakeForceの0番数値を用いて力行・停止制御を行う(実行順保障ナシ、パフォーマンス的にはシミュレーションの類はなるべくFixedUpdateを避けるべきなため)
WheelTreadSpeedはStart等で任意の長さの配列を持たせ、index指定することで一次元配列で管理が可能