Bu yazımda dinamik duvar yapımını anlatacağım. Nedir bu dinamik duvar olayı? Oyun play modunda iken faremizin sol tuşuna tıklayıp, bıraktığımız iki nokta arasında duvar oluşturmaya yarar.

İlk olarak Gameobject>3dObject>Plane yolunu izleyerek bir plane oluşturuyoruz.Bu plane üzerinde faremizle tıkladığımız konumları alacak ve o arada duvarımızı oluşturacak. İkinci olarak kameramızı plane objemize bakacak şekilde ayarlıyoruz.ve gameobject>3dObject>Cube yolunu izleyerek 3 adet cube objesi oluşturuyoruz bu cube objeleri bizim duvarımızı olusturacak  3 adet cube objesinin isimlerini sırasıyla Start,end,ve wall yapıyoruz.Duvarların birbirine çarpmasını engellemek için bu üç objenin colliderlarını kaldırıyoruz.

dynamic wall

dynamic wall

Project penceresinde faremize sağ tık yapıp Create>Prefab yolunu izleyerek 3 prefab oluşturuyoruz ve start, end ve wall objelerini içine atıyoruz. Start isimli cube objemiz faremiz ile ilk tıkladığımız konuma yerleşecek.End isimli cube objesi ise farenin son konumuna yerleşecek. Son olarak wall isimli cube objemiz ise bu iki konum arasına yerleşecek ve duvar gibi gozükmesini sağlayacak.Olayın mantığını anladıysak kod kısmına geçebiliriz.

Projemize bir cs scripti açıyoruz ve aşağıdaki kodu içine yapıştırıyoruz. Kod açıklamaları yanlarında yazmaktadır.Bu scriptimizi ise projemizdeki kamera objemize atıyoruz.Start end ve wall objelerimizi kamera objesinin inspector penceresini kullanarak scriptin içine atıyoruz.Kendi uygulamanıza entegre ederken bir sorun ile karşılaşırsanız bu yazımın altına yorum atabilir ya da direkt olarak mailden bana ulaşıp sorabilirsiniz yardımcı olmaya çalışırım

Hazır hali linktedir.

Dinamik duvar indir

using UnityEngine;
using System.Collections;

public class CreateWalls : MonoBehaviour {
//bool değişkeni
bool creating;
//start prefabı için değişken
 public GameObject start;
//endprefabı için değişken
 public GameObject end;
//Wall prefabı için değişken
  public GameObject WallPrefab;

  GameObject Wall;

	 void Start ()
 {

 }
 void Update ()
 {
  GetInput ();

 }

 void GetInput ()
 {
//faremize sağ tık yapıldığında setstart içindekileri yap
  if (Input.GetMouseButtonDown (0)) {

   Setstart ();

  }
//faremize sağ tık bırakıldığında SetEnd içindekileri yap
 else if (Input.GetMouseButtonUp (0)) {

   SetEnd ();

  } else {
   if (creating) {
    Adjust ();
   }
  }
 }
 void Setstart ()
 {
//fare tıklanıldığında creating isimli değişkenin değerini true yapar
  creating = true;
//farenin tıklanıldığı andaki pozisyonunu alır
  start.transform.position = GetWorldPoint ();
 //wall nesnesini oluşturur yukardaki aldığı pozisyonda
  Wall = (GameObject)Instantiate (WallPrefab, start.transform.position, Quaternion.identity);

 }
 void SetEnd ()
 {
//farenin tıklanması bittiğinde creating değerini false yapar
  creating = false;

  //bırakıldığı noktanın konumunu alır
  end.transform.position = GetWorldPoint (); 

 }
 void Adjust ()
 {

  end.transform.position = GetWorldPoint ();
//iki konum arasındaki duvarı oluşturur
 AdjustWall ();
 }

 void AdjustWall ()
 {
//başlangıç ve bitiş yönünü bulur
  start.transform.LookAt (end.transform.position);
  end.transform.LookAt (start.transform.position);
//iki konum arasında duvarı oluşturur
  float dist = Vector3.Distance (start.transform.position, end.transform.position);
  Wall.transform.position = start.transform.position + dist / 2 * start.transform.forward;
  Wall.transform.rotation = start.transform.rotation;
  Wall.transform.localScale = new Vector3 (Wall.transform.localScale.x, Wall.transform.localScale.y, dist );

 }
 Vector3 GetWorldPoint ()
 {
//fare ile tıklanıldığı alana bir ışın gönderir ve konumun bulunmasına yardımcı olur
  Ray ray=camera.ScreenPointToRay(Input.mousePosition);
		RaycastHit hit;
		if(Physics.Raycast(ray,out hit))
		{
			return hit.point;
		}
		return Vector3.zero;
 }

}

About the author

Benan DİNDAR

1 Comment

Leave a Comment

Powered by themekiller.com anime4online.com animextoon.com