Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity OnMouseDrag() ile Nesne Sürükleme: Adım Adım Anlatım

Paylaşan: Unity Eğitim 07 September 2025 4 dakika okuma 115 görüntülenme

Merhaba Unity geliştiricileri! Bu yazıda, Unity oyun motorunda nesneleri sürüklemek için kullanılan OnMouseDrag() fonksiyonunu detaylı bir şekilde inceleyeceğiz. OnMouseDrag(), fare düğmesi basılı tutulduğu sürece sürekli olarak çağrılan bir fonksiyondur ve bu sayede nesnelerin gerçek zamanlı olarak sürükleme işlemini yönetebiliriz.

OnMouseDrag() Fonksiyonunun Temelleri


OnMouseDrag() fonksiyonu, bir MonoBehaviour sınıfına eklenir ve fare düğmesi basılıyken, fare imleci nesnenin üzerindeyken çalışır. Fonksiyonun içerisinde, nesnenin konumunu güncellemek ve sürükleme işlemini yönetmek için gerekli kodları yazarız. Bu fonksiyonu kullanmanın en temel örneği, nesnenin fare imlecini takip etmesini sağlamaktır.

Basit Bir Sürükleme Örneği


İşte basit bir sürükleme örneği:
using UnityEngine;

public class DragObject : MonoBehaviour
{
void OnMouseDrag()
{
float distance = Vector3.Distance(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition));
Vector3 direction = (Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position).normalized;
transform.position += direction * distance;
}
}


Bu kod, nesnenin fare imlecini takip etmesini sağlar. Camera.main.ScreenToWorldPoint(Input.mousePosition) fonksiyonu, fare imlecini dünya koordinatlarına dönüştürür. transform.position ise nesnenin dünya koordinatlarındaki konumunu temsil eder. Farkları alarak ve normalize ederek nesnenin hareket yönünü ve mesafesini belirleriz.

Sürükleme İşlemini Özelleştirme


OnMouseDrag() fonksiyonu, sürükleme işlemini özelleştirmek için birçok seçenek sunar. Örneğin, nesnenin sadece belirli bir düzlemde hareket etmesini sağlayabilir, sürükleme hızını değiştirebilir veya sürükleme işlemi sırasında diğer etkileri tetikleyebilirsiniz.

Düzlemsel Sürükleme


Nesneyi sadece XY düzleminde (yani, 2 boyutlu) sürüklemek için aşağıdaki kodu kullanabilirsiniz:
void OnMouseDrag()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePosition.z = transform.position.z; // z koordinatını sabit tut
transform.position = mousePosition;
}

Sürükleme Hızını Kontrol Etme


Sürükleme hızını kontrol etmek için bir hız çarpanı kullanabilirsiniz:
public float dragSpeed = 5f;

void OnMouseDrag()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePosition.z = transform.position.z;
transform.position = Vector3.Lerp(transform.position, mousePosition, dragSpeed * Time.deltaTime);
}


Time.deltaTime, geçen zaman dilimini temsil eder ve bu sayede hız, kare hızından bağımsız olur.

Sınırlamalar Ekleme


Nesnenin belirli bir alanda hareket etmesini sınırlamak için, transform.position değerini kontrol ederek sınırlamalar ekleyebilirsiniz.
public Vector2 minPosition, maxPosition;

void OnMouseDrag()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePosition.z = transform.position.z;

//Sınırlamaları Uygulama
mousePosition.x = Mathf.Clamp(mousePosition.x, minPosition.x, maxPosition.x);
mousePosition.y = Mathf.Clamp(mousePosition.y, minPosition.y, maxPosition.y);

transform.position = mousePosition;
}


İleri Teknikler


Daha gelişmiş sürükleme işlemleri için, OnMouseDown() ve OnMouseUp() fonksiyonlarını da kullanabilirsiniz. OnMouseDown(), fare düğmesi basıldığında çağrılır ve sürükleme işlemini başlatmak için kullanabilirsiniz. OnMouseUp() ise, fare düğmesi bırakıldığında çağrılır ve sürükleme işlemini sonlandırmak için kullanabilirsiniz. Ayrıca, raycasting kullanarak sürükleme işlemini üç boyutlu ortamlarda daha hassas bir şekilde yönetebilirsiniz.

Örneğin, bir nesneyi bir yüzeye yapıştırmak için raycasting kullanabilirsiniz. Nesneyi sürüklediğinizde, raycasting ile yüzeyin konumunu bulur ve nesneyi o yüzeye yapıştırırsınız.

Bu yazıda, OnMouseDrag() fonksiyonunun temel kullanımını ve bazı özelleştirme tekniklerini ele aldık. Daha fazla bilgi için Unity dokümanlarını inceleyebilirsiniz.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!