大砲の射程
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 66/71。
射撃場の一端に大砲があり、3つの標的がそれぞれ異なる距離で射撃場を左右に滑って移動します。砲身を上下に傾けて各距離に合わせ、標的が射線を横切るタイミングを狙って発射します。標的に当たったボールは標的を倒して消費されます。それ以外のものが標的にぶつかっても、標的には何も起きません。標的はキネマティックボディなので、当たっても押されることはなく、大砲にはボールが5個装填されています。
2つのスクリプトを書きます。砲身にCannon、各標的にTargetを付けます。
チャレンジ
難しい大砲を作り、狙いを定めてからボールを5個発射しましょう。
Update()で、Input.GetAxisRaw("Vertical") * turnSpeed * Time.deltaTimeをangleに加算し、10から60の範囲に制限して、transform.rotation = Quaternion.Euler(-angle, 0f, 0f);を設定します。balls > 0のときにSpaceキーを押したら、transform.position + transform.forwardの位置にballPrefabを生成し、AddForce(transform.forward * power, ForceMode.Impulse)を実行します。ballsを1減らし、"Balls left: " + ballsをログに出力します。
「プレイ」を押して発射しましょう。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Cannon : MonoBehaviour
{
[SerializeField] private Rigidbody ballPrefab;
[SerializeField] private float angle = 30f;
[SerializeField] private float turnSpeed = 40f;
[SerializeField] private float power = 30f;
[SerializeField] private int balls = 5;
void Update()
{
// 上下の矢印キーで狙いを定め、Spaceで発射する
}
}
物理演算とゲームプレイのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド