マーブルゴルフ
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 68/71。
小さなグリーンでビー玉のゴルフをしましょう。ビー玉はティーから始まります。矢印キーで狙いを定め、Spaceを押し続けてパワーをため、離してショットします。ビー玉は転がり、クッションや中央のブロックに跳ね返りながら減速し、十分に遅くなるとぴたりと止まります。そのとき初めて、再びショットできます。ゆっくりカップに転がり込んだビー玉は中に落ちますが、速すぎるとそのまま通り過ぎます。打数は少ないほどよいです。
2つのスクリプトを書きます。ビー玉にはGolf、カップにはHoleを使います。
チャレンジ
難しいゴルフのビー玉を動かそう:狙いを定め、力をためて、打とう。
- Raw Horizontal 軸を使って
aimSpeedでaimを回し、pointerをtransform.position + Quaternion.Euler(0f, aim, 0f) * Vector3.forwardに配置します。 - 静止中(速度が
stopSpeed未満)、Space キーを押し続けるとchargeRateずつpowerが増加し、maxPowerに達します。キーを離すと狙った方向にインパルスを加え、powerをリセットし、"Stroke " + strokesをログに出力します。 FixedUpdate()では、静止中に両方の速度をゼロにします。
「プレイ」を押してパットします。その後、「確認」を押します。
自分で試してみよう
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でパワーをため、離すと打ち、速度が落ちたら止める
}
物理演算とゲームプレイのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド