ヘリコプターSTG(借り)
StrikeVectorや有翼のフロイラインみたいな、かなり自由の効く空中アクション
フライトシミュ系(エースコンバット、The Falconeer)に比べて取っつきやすいんじゃなかろうかと
とはいえ、そのまま作ると、移動の自由度が高すぎて味気ない・・・遊びが作りづらい仕様になってしまう(StrikeVectorが顕著)
ArmoredCoreなんかは、AC4の反省からか、「地上に居る事」を重要視している気がする
このタイプのゲーム
カメラ挙動の調査
試しに作ってみたら右スティックの仕様が良く分からなくなった
デモエク
ピッチ方向には上下共に限界角度があり、裏返ったりはしない
ピッチを変えても機体のピッチは変わらないが、正面への移動方向はカメラの向きに従う
機体は常に画面左寄り固定
StrikeVector
ピッチ方向に角度限界は無いが、カメラが水平方向に来ると、自動で正位置になるようロールされてしまう
上に入力し続けてると、丁度反対側を向いた時(逆さまになった時)勝手にロールされて、上半球を往復するような運動になる
左右に向くと、勝手に機体が反対側(右を向けば左へ、左を向けば右へ)へ移動する
だいぶ凝ってる
有翼のフロイライン
ピッチ方向には上下共に限界角度あり。デモエクに比べると角度が深い気がする
ピッチを変えると、機体の向きも変わる。機体が常に正面にあるためか、違和感は少ない
常に前方向にやや前進していて、止まれないのが意外だった
基本的な作り方
code:cs
void FixedUpdate() {
var rightStick = Gamepad.current?.rightStick.ReadValue() ?? Vector2.zero;
var pitch = -rightStick.y * PLAYER_ROTATE_SPEED * Time.fixedDeltaTime;
var yaw = rightStick.x * PLAYER_ROTATE_SPEED * Time.fixedDeltaTime;
var forward = playerRigidBody.rotation * Vector3.forward;
var angle = Vector3.Angle(forward, Vector3.up);
if (angle + pitch < PLAYER_PITCH_MIN) pitch = PLAYER_PITCH_MIN - angle;
if (PLAYER_PITCH_MAX < angle + pitch) pitch = PLAYER_PITCH_MAX - angle;
playerRigidBody.MoveRotation(
Quaternion.Euler(0, yaw, 0)
* playerRigidBody.rotation
* Quaternion.Euler(pitch, 0, 0)
);
}