Unity 5 Rastgele Obje Hareketi Kodu (C#)

Yayımlanma Tarihi: 24 Haziran 2017

Son Değiştirilme Tarihi: Ağustos 31, 2017

Sizin için kendi yaptığım küçük bir kodu paylaşmak istedim. Tabi ki bu kodun kötü yanları da var. Örneğin objeyi noktasal olarak aldım  Başka bir sorun ise tembellik yapıp objenin sadece kendi x ve z ekseninde dolaşmasını sağladım. Ancak bu kolaylıkla çözülebilir ama ben yine tembellik yapıp bunu herhalde başka bir göstereceğim. Son sıkıntı ise objenin hızı kendini koşullara göre değiştirmiyor. Yani bir yerde takılırsa, hız açıya bağlı olarak sinθ veya cosθ ile çarpılıyor. Neyse şimdilik size kodu salayım ve aşağısında açıklamalara yer vereyim. Vakti olmayan arkadaşlar koddaki yorumları okuyabilir. Vakti olanlar ise açıklamayı okursa daha anlaşılır olacağını düşünüyorum.

 

Kod Açıklaması

İlk öncelikle her zamanki gibi değişkenlerimizi tanımlayarak başlıyoruz. moveSpeed değişkeni, gezinmesini istediğimiz objenin hızını ayarlamamızı sağlıyor. Eğer oyununuza uygun olmasını istiyorsanız bu değeri değiştirebilirsiniz fakat bu değeri düşük tutmaya çalışın. Sonraki değişken olan maksimumDistance değişkeni ise objenin bir diğer nesneye maksimum yaklaşabileceği mesafeyi belirtiyor. Yarıçapı RadiusLimit olan bir çember oluşturup maksimum sınırlarını belirtmiş oluyoruz. StartingPos değişkeninde ise objenin başlangıç pozisyonu depolanacak. Hit değişkeni sonraki bölümlerde gönderdiğimiz ışından bilgi almayı sağlayacak. Son olarak ise RandomXYZVektor isimli Vector3’ü rastgele bir yön seçmek için oluşturuyoruz..

 

Start fonksiyonunda ilk öncelikle CreateRandVector() fonksiyonunu kullanarak bir RandomXYZVektor‘i çağırmamız gerekiyor. Böylelikle objeye gidecek ilk yönü oluşturmuş oluyoruz. Buna ek olarak “Vector3 StartingPos”u objenin ilk bulunduğu yeri kaydetmek için kullanıyoruz. İleride objenin gidebileceği noktaları ayarlayabilmek için kullanacağız.

 

Update fonksiyonunda ilk olarak karşımızda obje var mı yok mu kontrol etmek için sendRay() fonksiyonunu kullanarak bir ışın yolluyoruz. Eğer herhangi bir çarpışma yoksa ve obje belirttiğimiz yarıçaplı çemberin içindeyse, Wander() fonksiyonunu kullanarak objeyi yürütüyoruz. Ancak bu koşullardan biri sağlanmazsa, yeni bir yön vektörü diyoruz. Böylelikle diğer koşullar sağlanana kadar bu döngü devam edecek.

 

sendRay() fonksiyonu sayesinde öncede belirttiğim gibi RandomXYZVektor yönünde bir ışın çiziyoruz. Bunu yaparken Physics.Raycast(transform.position, RandomXYZVektor, out hit) ifadesinden yararlanıyoruz. Bu ifade de objenin lokasyonundan(transform.position), belli bir yönce ışın çizip(RandomXYZVektor), edindiği bilgileri hit değişkeninde depolamasını istiyoruz.

 

Yürüme fonksiyonumuz burada.  transform.Translate(RandomXYZVektor * Time.deltaTime * moveSpeed) ifadesinde belirtilen şey kısaca “RandomXYZVektor doğrultusunda saniye başı yürü” demek oluyor. Bunun hızını da moveSpeed adlı değişkenini kullanarak değiştirebiliyoruz.

 

RandomXYZVektor isimli bir yön vektörü oluşturuyoruz. Hepimizin bildiği üzere yön vektörü (-1,-1,-1) ve (0,0,0) arası olacağından dolayı, x ve z değerini -1 ve 1 arasında oluşturuyoruz.

 

Son olarak circleCondition() fonksiyonunda ise objenin önceden belirlediğimiz yarıçap(RadiusLimit) içinde olup olmadığını kontrol ediyoruz ve true değeri yolluyoruz. Fakat değilse gittiği yönden geri gitmesi için RandomXYZVektor = -RandomXYZVektor ifadesinden yararşanıyoruz. 

 

 

Etiketler: , ,


Bir cevap yazın

E-posta hesabınız yayımlanmayacak.