Tüm Rehberler

Top Zıplat — Rigidbody Fizik Oyunu

Başlangıç ⏱ 75 dk
BÖLÜM 2 / 8

Top Kontrolü — WASD ile Kuvvet Uygulama

Rigidbody.AddForce kullanarak WASD tuşlarıyla topa yatay kuvvet uygulayan kontrol scriptini yazıyoruz.

Unity Editör Adımları

Assets > C# Script → 'BallController'
Ball objesine sürükle
Inspector'da moveForce = 10
csharp
using UnityEngine;

public class BallController : MonoBehaviour
{
    [Header("Hareket")]
    public float moveForce = 10f;
    public float maxSpeed = 8f;

    [Header("Zıplama")]
    public float jumpForce = 7f;
    public LayerMask groundLayer;
    public float groundCheckRadius = 0.6f;

    private Rigidbody rb;
    private bool isGrounded;

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

    void FixedUpdate()
    {
        // Zemin kontrolü
        isGrounded = Physics.CheckSphere(
            transform.position - Vector3.up * 0.5f,
            groundCheckRadius, groundLayer);

        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        Vector3 force = new Vector3(h, 0, v) * moveForce;
        rb.AddForce(force);

        // Max hız sınırı (dikey hariç)
        Vector3 flatVel = new Vector3(rb.linearVelocity.x, 0, rb.linearVelocity.z);
        if (flatVel.magnitude > maxSpeed)
        {
            Vector3 limited = flatVel.normalized * maxSpeed;
            rb.linearVelocity = new Vector3(limited.x, rb.linearVelocity.y, limited.z);
        }
    }

    void Update()
    {
        // Zıplama
        if (Input.GetButtonDown("Jump") && isGrounded)
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
    }

    void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.green;
        Gizmos.DrawWireSphere(transform.position - Vector3.up * 0.5f, groundCheckRadius);
    }
}

FixedUpdate fizik güncellemeleri için, Update ise input kontrolleri için kullanılır.

Önceki Bölüm Sonraki Bölüm