2007年5月24日木曜日

Racing Game 改造(最高スピード)

レーシングゲームを改造しました。


「最高スピードをあげる」










最高スピードが290Km/h では少し物足りなかったので、最高スピードを600Km/h にしました。

上にあるように、最高スピード502Km/h を記録しています。






改造手順


(1)XNA-GSE(C#)を立ち上げて、RacingGame を読み込みます。

(2)右上にあるソリューションエキスプローラを見ます。
見られない場合は、「表示」メニューから、ソリューションエキスプローラを選択してください。


(3)木構造をたどり、C#ファイル(CarPhysics.cs)を表示します。
「RacingGame」-「GameLogic」-「CarPhysics.cs」


(4)ソースの改造
改造するソースは、「CarPhysics.cs」-「Constants」の中だけです。



以下に、改造例(黄色部分)を示します。



public const float DefaultMaxSpeed =
     600.0f * MphToMeterPerSec,  // 275.0f
     MaxPossibleSpeed =
     620.0f * MphToMeterPerSec;  // 290.0f

public const float DefaultMaxAccelarationPerSec = 5.0f, //2.5f
  MaxAccelaration = 100.0f, //5.75f
  MinAccelaration = -80.0f; //-3.25f

const float AirFrictionPerSpeed = 0.00f; //0.66f 


最高スピードを620Km/h に設定しましたがこれだけではスピードは伸びません。 まず、空気抵抗があるとスピードがでないので空気抵抗を「ゼロ」にしました。真空中でレースしている状態にします。そして、加速度を大きくして容易に速度をあげられるようにしました。


(5)ゲーム物理の理解
このレーシングゲームのゲーム物理を理解するために、参照するソースは、「CarPhysics.cs」-「Update」-「Handle Speed」の中にあります。路面抵抗や空気抵抗の実装についての詳しい説明がありますので興味のある人は一読するとよいでしょう。


空気抵抗

車のスピードが早くなってくると空気抵抗が重要になります。

空気抵抗(airFriction)は車のスピード(speed)に比例して大きくなり、車の進行方向とは逆方向の力(carForce)を車に及ぼし減速させます。以下、空気抵抗の実装例(ソース)です。

float airFriction = AirFrictionPerSpeed * Math.Abs(speed);

carForce *= 1.0f - (0.275f * 0.02125f *
  0.2f * //20% for force slowdown
  airFriction);


(6)ビルド&プレイ
F5 キーを押すと、改造ゲームがビルドされプレイ画面となります。



ゲームロジック

レースゲームを改造することで、最高スピード500Km/h にすることができました。 実際にゲームをやるとわかるのですが、300Km/h を越えたあたりから操作が難しくなり、マウスではとても車をコントロールできませんでしたゲームューニングの難しいところなのでしょうか。

0 件のコメント: