Menu
CoddyTech

ビー玉ゴルフ

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 62/63。

小さなグリーンでビー玉を使ってゴルフをします。ビー玉はティーからスタートします。矢印キーで狙いを定め、Spaceを押し続けてパワーをため、離してショットします。ビー玉は転がり、クッションや中央のブロックに跳ね返りながら減速し、十分に遅くなると完全に止まります。そのとき初めて、もう一度ショットできます。ゆっくりカップに転がり込むビー玉は中に落ちますが、速すぎるとカップをそのまま通り過ぎます。打数は少ないほどよいです。

2つのスクリプトを書きます。ビー玉にはGolf、カップにはHoleを使います。

challenge icon

チャレンジ

難しい

Inspectorでは、Golfにpointer(小さな黄色のボール)、aimSpeed(90)、chargeRate(4)、maxPower(6)、stopSpeed(0.3)を設定します。ビー玉の質量は0.5です。

  • 照準はy軸周りの角度で、開始時は0(正面、+z)です。右矢印で右に、左矢印で左に、1秒あたりaimSpeed度回転します。フレームごとに、照準の方向にビー玉から1単位の位置へポインターを置きます。
  • ビー玉の速度がstopSpeed未満のとき、ビー玉は静止しています。物理ステップごとに、静止しているビー玉を完全に停止させます。速度と角速度をゼロにします。
  • ビー玉が静止している間だけ、Spaceキーを押し続けると1秒あたりchargeRateの割合でパワーが上がり、maxPowerを超えることはありません。Spaceキーを離すと、そのパワーのImpulseで照準方向にビー玉を打ちます。その後、パワーは0に戻り、publicなint strokesが1増えて、Stroke 1としてログに記録されます。

Inspectorでは、HoleにsinkSpeed(3)を設定します。

  • ビー玉(Golfスクリプトが付いたオブジェクト)がsinkSpeedより遅い速度でカップに入ったとき、打数をIn the cup in 2 strokes!としてログに記録し、ビー玉を非アクティブにします。より速いビー玉はそのまま転がり抜けます。

Playを押し、できるだけ少ない打数でビー玉を沈めてから、Checkを押してください。

自分で試してみよう

using UnityEngine;

public class Golf : MonoBehaviour
{
    public int strokes = 0;
    [SerializeField] private Transform pointer;
    [SerializeField] private float aimSpeed = 90f;
    [SerializeField] private float chargeRate = 4f;
    [SerializeField] private float maxPower = 6f;
    [SerializeField] private float stopSpeed = 0.3f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // 矢印キーで狙いを定め、Spaceでパワーをため、離すと打ち、速度が遅くなったら止める
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン