Bilye Golfü
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 62 / 63.
Küçük bir yeşil alan üzerinde bilyeyle golf. Bilye vuruş noktasında başlar: ok tuşlarıyla nişan al, güç biriktirmek için Space tuşunu basılı tut ve vurmak için bırak. Bilye yuvarlanır, kenarlıklardan ve ortadaki bloktan seker, yavaşlar ve yeterince yavaşlayınca tamamen durur. Ancak bundan sonra yeniden vurabilirsin. Deliğe yavaşça yuvarlanan bilye içine düşer; çok hızlı gelen bilye ise deliğin üzerinden geçip gider. Vuruş sayısı ne kadar azsa o kadar iyi.
İki betik yaz: bilyede Golf, delikte Hole.
Görev
ZorInspector, Golf için pointer (küçük sarı top), aimSpeed (90), chargeRate (4), maxPower (6) ve stopSpeed (0.3) değerlerini sağlar. Bilyenin kütlesi 0.5'tir.
- Nişan, y ekseni etrafındaki bir açıdır; başlangıçta 0'dır (dümdüz ileri, +z). Sağ ok nişanı sağa, sol ok ise sola, saniyede
aimSpeedderece döndürür. Her karede işaretçiyi bilyeden 1 birim uzağa, nişan yönünde yerleştir. - Bilyenin hızı
stopSpeeddeğerinden düşükken bilye duruyor kabul edilir. Her fizik adımında, duran bir bilye tamamen durdurulur: hızı ve açısal hızı sıfırlanır. - Yalnızca bilye duruyorken: Space tuşunu basılı tutmak gücü saniyede
chargeRatekadar artırır; güç hiçbir zamanmaxPowerdeğerini aşmaz. Space tuşunu bırakmak ise bilyeyi nişan doğrultusunda bu güçte bir Impulse ile fırlatır. Ardından güç yeniden 0 olur ve genel erişimliint strokes1 artar; bu artışStroke 1olarak kaydedilir.
Inspector, Hole için sinkSpeed (3) değerini sağlar.
- Bilye (
Golfbetiğinin bulunduğu nesne) deliğesinkSpeeddeğerinden daha düşük hızla girdiğinde, vuruş sayısınıIn the cup in 2 strokes!olarak kaydet ve bilyeyi devre dışı bırak. Daha hızlı giden bir bilye deliğin üzerinden yuvarlanıp geçer.
Play'e bas ve bilyeyi olabildiğince az vuruşla deliğe sok, ardından Check'e bas.
Kendin dene
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>();
}
// ok tuşlarıyla nişan al, Space ile güç biriktir, tuşu bırakınca vur, yavaşlayınca dur
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir Duvar