Assets/Scenes/Game.unityを開いてゲームを実行してください。
実行後は、スペースキーでゲームを進行できます。
操作したい戦車の、ComPlayerBaseを継承したクラスのUpdate関数内に
SXG_TestPlayByGamepad();と記述すると、ゲームパッドでゲームをプレイできます。
操作方法は、 『ゲームパッド操作方法』 を確認してください。
ゲーム実行時、Assets/GameAssets/Data/ParticipantList.assetのリストの、上から4つの戦車が戦います。
戦わせる戦車を変更したい場合は、リストの順番を並べ替えてください。
弊社が用意したサンプルAIの情報を記載しています。
- ルッカちゃん(Assets/Participant/Sample01)
- Xアーマー(Assets/Participant/Sample02)
- やったるぞ!(Assets/Participant/Sample03)
- アナグマ(Assets/Participant/Sample04)
- コスト500君(Assets/Participant/Sample05)
- アメンボ(Assets/Participant/Sample06)
- 阿修羅(Assets/Participant/Sample07)
- たこねこ(Assets/Participant/Sample08)
- CB(Assets/Participant/Sample09)
コーディング時に使用できる関数の一覧です。
- SXG_GetCountOfMyTurrets
- SXG_GetCountOfMyRotJoints
- SXG_GetHitObstacles
- SXG_SetCaterpillarPower
- SXG_Shoot
- SXG_CanShoot
- SXG_RotateTurretToDirection
- SXG_RotateTurretToAngle
- SXG_RotateTurretToImpactPoint
- SXG_RotateJointToDirection
- SXG_RotateJointToAngle
- SXG_GetPositionAndRotation
- SXG_GetAllTanksInfo
Prefabの編集モードで、自身の戦車に砲塔や装甲を着けてカスタマイズできます。
カスタマイズ方法については、戦車のカスタマイズ方法をご確認ください。
砲塔や装甲の装着には「コスト」がかかり、それらの合計が1台の戦車を出撃させるのに必要なコスト「出撃コスト」となります。
各プレイヤーは1試合 1000コスト分 までの戦車を出撃できます。
つまり、出撃コストが200の場合、1試合の出撃可能回数は5回となります。
また、何もつけていない初期状態の場合の出撃コストは100です。
1試合の所要時間は最大2分。
2分が経過するか、最後の1台になったとき試合終了。
戦車カスタマイズで砲塔をつけると砲弾を発射できる。
砲弾の発射には0.5秒のクールタイムがある。
シールドが表示されている2秒間は無敵状態。
自身の砲弾の発射も不可。
砲弾が戦車のコア部分(緑色のコリジョン部分)に当たると戦車は撃破される。
撃破されても残機が残っていれば復帰。
戦車を撃破すると、撃破した戦車の出撃コスト分のポイントを獲得。
戦車に装甲をつけていれば砲弾が当たっても耐えられる。
装甲の耐久値が無くなると、その装甲は戦車から剥がれ落ちる。
装甲の耐久値は、装甲の体積(コスト)に比例する。
ステージ中央付近の障害物(岩)に砲弾を当てると、障害物が少しずつ沈んでいく。
ステージ外に落下した戦車は大破する。
大破しても残機が残っていれば復帰。
リザルトで、試合終了時の残機×出撃コスト分の残機ボーナスを獲得。
リザルトで総得点が高かった戦車の勝利!
- 出撃コスト :254 pts
- 出撃可能回数:3回
- 砲塔数 :2基
- 回転部位 :0基
- 装甲数 :5基
- 戦車質量 :1520 kg
左右と後ろにシールドを設置、かつ、後ろは反動を抑えるための形状で設置。
ステージをグルグルと周回することを目指して全速力で移動。
攻撃対象は生存していて自分から最も近い敵を1つ。
発射はランダムの時間間隔を開けて左右交互に発射。
- 出撃コスト :295 pts
- 出撃可能回数:3回
- 砲塔数 :1基
- 回転部位 :0基
- 装甲数 :3基
- 戦車質量 :1725 kg
左右に厚めのシールドを設置。
ステージ中央を除くランダムな位置を目指して全速力で移動。
移動できなくなったら(何かに引っかかってるなら)射撃することで反動を得て移動できる状態にすることを目指す。
攻撃対象はランダムで選択。
ランダムな時間間隔を開けて発射。
- 出撃コスト :336 pts
- 出撃可能回数:2回
- 砲塔数 :2基
- 回転部位 :0基
- 装甲数 :8基
- 戦車質量 :1930 kg
前後左右にシールドを設置。左右には剣のモデルを配置、後ろは盾をあしらう。
ステージをグルグルと周回することを目指して全速力で移動。
攻撃対象はランダムで選択。
移動できなくなったら(何かに引っかかってるなら)射撃することで反動を得て移動できる状態にすることを目指す。
発射はクールタイムが明けたらすぐに発射。
とにかく、撃てるだけ撃つ。
- 出撃コスト :385 pts
- 出撃可能回数:2回
- 砲塔数 :1基
- 回転部位 :0基
- 戦車質量 :2175 kg
周囲6方向に薄めを3枚重ねたシールドを設置して全方向からの攻撃を防御することを目指す。
行動は、ルッカちゃん(Sample01)と同じ。
- 出撃コスト :500 pts
- 出撃可能回数:2回
- 砲塔数 :2基
- 回転部位 :0基
- 装甲数 :16基
- 戦車質量 :2750 kg
前、左右に4枚重ねのシールを設置して防御を厚く、上面にも盾を配置、後ろは反動を抑える形でシールドを設置。
行動は、ルッカちゃん(Sample01)と同じ。
- 出撃コスト :327 pts
- 出撃可能回数:3回
- 砲塔数 :2基
- 回転部位 :8基
- 装甲数 :9基
- 戦車質量 :1885 kg
回転パーツを使って長ーい4つの足を再現。
試合が始まったら立ち上がり、上空から他の戦車を狙う。
4つの足で立ち上がっているので、キャタピラを使った移動はしない。
攻撃対象は一番近い戦車。
2つの砲塔からは常に同時に発射することで、姿勢を崩しにくく、かつ、反動で少し浮きがることもできることがある。
- 出撃コスト :411 pts
- 出撃可能回数:2回
- 砲塔数 :1基
- 回転部位 :4基
- 装甲数 :10基
- 戦車質量 :2305 kg
回転パーツを使って3つの盾と1つのバランサーを操る。
移動先は、他の戦車からなるべく離れたところを目指して移動。
3つの盾は、生存している敵のそれぞれの方向に常に向けることで、シールドを効果的に機能させる。
バランサーは本体の姿勢が崩れているときにそれを正す方向に回転させて、本体が倒れてしまうことを回避することを目指す。
攻撃対象は自分から最も近い敵で、クールタイムがあけたら可能な限り発射する。
- 出撃コスト :166 pts
- 出撃可能回数:6回
- 砲塔数 :1基
- 回転部位 :0基
- 装甲数 :16基
- 戦車質量 :1080 kg
コストを最小限に抑え、装甲パーツはコリジョンを囲うように配置して即死を免れる。
特に目的地はなく、左右にくねくねと移動。
砲塔は常に一番近くにいるプレイヤーを狙い、撃てるタイミングで撃つ。
- 出撃コスト :316 pts
- 出撃可能回数:3回
- 砲塔数 :4基
- 回転部位 :0基
- 装甲数 :4基
- 戦車質量 :1830 kg
ステージ中心をうろつきながら4方向に向かって大砲を発射する、固定砲台風戦車AI。
int SXG_GetCountOfMyTurrets();
自分の戦車の砲台の数を取得します。
int SXG_GetCountOfMyRotJoints();
自分の戦車の回転ジョイントの数を取得します。
Vector3[] SXG_GetHitObstacles(float searchLength);
- searchLength : 探索距離(半径)
自分の戦車を中心に、周囲の障害物(岩)の座標を取得します。
ステージ中央の大きな岩に加え、ステージ外周の岩も1メッシュずつ取得します。
void SXG_SetCaterpillarPower(float left, float right);
左右のキャタピラを回転させます。
それぞれ -1 ~ 1 で、マイナスは後進、プラスは前進です。
範囲外の数値を入れるとクランプされます。
void SXG_Shoot(int turretNo);
砲塔番号を指定して砲弾を発射します。
範囲外の番号を指定するとアサーションが発生します。
bool SXG_CanShoot(int turretNo);
砲塔番号を指定して、砲弾を発射可能かどうかのフラグを返します。
範囲外の番号を指定するとアサーションが発生します。
クールタイムが考慮されます。
戻り値がtrueだと発射可能です。
void SXG_RotateTurretToDirection(int turretId, float yawDir, float pitchDir);
- yawDir : 左右の旋回:-1 ~ +1:右方向がプラス、左方向がマイナス
- pitchDir : 上下の旋回:-1 ~ +1:下方向がプラス、上方向がマイナス
砲塔番号を指定して、ヨー、ピッチの回転方法を指定して砲塔を旋回させます。
範囲外の番号を指定するとアサーションが発生します。
砲塔の回転速度には上限があるため、大きな値を指定すると即座に反映はされません。
void SXG_RotateTurretToDirection(int turretId, float yawDir, float pitchDir);
- yawAngle : 左右の旋回:戦車の正面が0度:右方向がプラス、左方向がマイナス
- pitchAngle : 上下の旋回:戦車の正面が0度:下方向がプラス、上方向がマイナス
砲塔番号を指定して、ローカル角度(ヨー、ピッチ)を指定して砲塔を旋回させます。
範囲外の番号を指定するとアサーションが発生します。
砲塔の回転速度には上限があるため、大きな値を指定すると即座に反映はされません。
void SXG_RotateTurretToImpactPoint(int turretId, Vector3 impactPoint);
砲塔番号を指定して、着弾予定座標を指定して砲塔を旋回させます。 範囲外の番号を指定するとアサーションが発生します。
void SXG_RotateJointToDirection(int jointId, float yawDir);
- yarDir : 左右の旋回:-1 ~ +1:右方向がプラス、左方向がマイナス
ジョイント番号を指定して、ジョイント関節の回転方法を指定して砲塔を旋回させます。 範囲外の番号を指定するとアサーションが発生します。
void SXG_RotateJointToAngle(int jointId, float yawAngle);
- yarAngle : 左右の旋回:戦車の正面が0度:右方向がプラス、左方向がマイナス
ジョイント番号を指定して、ローカル角度(ヨー、ピッチ)を指定してジョイントを旋回させます。
範囲外の番号を指定するとアサーションが発生します。
SXG_GetPositionAndRotation(out Vector3 position, out Quaternion rotation);
自身の戦車のワールド座標と角度を取得します。
transform.position や transform.rotation は使用せず、こちらの関数を使用してください。
TankInfo[] SXG_GetAllTanksInfo();
自身を含む、全戦車(4台)の情報のリストを取得します。
戻り値の0番目の要素には自身の戦車の情報が入っています。
// 戦車の情報 構造体
public struct TankInfo
{
public Vector3 Position; // 戦車の座標
public Quaternion Rotation; // 戦車の向き
public int Energy; // チームの残りエナジー
public int CostOfOneTank; // 戦車1台分のコスト
public bool IsDefeated; // 敗退済みフラグ
public bool IsInvincible; // 無敵フラグ
}

















