Unity WWW ve WWWForm Nedir?

Unity WWW ve WWWForm

Unity WWW ve WWWForm Nedir?

 Unity de yüksek skor tabloları ve kullanıcı girişi gibi işlemlerin nasıl yapıldığını merak edenlerimiz vardır işte bunları yapmak için kullandığımız modül aslında WWW ve WWWForm modülleridir. Hadi gelin bu modülleri biraz daha detaylı bir şekilde inceleyelim.

WWW Nedir ?

WWW Unity üzerinden internet sitelerine bağlanmamızı sağlayan modüldür. İnternet sitelerinden kullanıcı verileri, textureler, yüksek puan verileri gibi bir çok veriyi almanızı ve oyun içinde kullanabilmenizi sağlıyor.

İnternet üzerinden JSON dosyalarını okumanızı, düzenlemenizi, MYSQL bağlantıları oluşturmanızı ve daha bir çok alanda internet siteleri ile haberleşmenizi sağlayabiliyor.

İnternet sitelerinde bulunan formlara / yakalayıcılara "GET" ve "POST" verileri göndermenizi de WWW ile yapabiliyorsunuz.

Aslında internette araştırma yaparken gördüğüm bir kaç yerde insanlar bu yöntem ile internet üzerinden ses verileri bile çekiyor diyebilirim.

WWW ile "http://", "https://" ve "file://" protokollerini kontrol edebilirsiniz, IPhone cihazlarda bunlara ek olarak "ftp://" protokolü de kısmi olarak desteklenmektedir ancak bu sadece anonim olan bağlantılar için geçerlidir.

WWW ile ilgili Unity tarafından verilen örneği inceleyelim.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg"; // Texture dosyasının bulunduğu internet adresi
    IEnumerator Start()
    {
        using (WWW www = new WWW(url)) // WWW sınıfı çağrılıyor.
        {
            yield return www; // sitenin indirilmesi bekleniyor.
            Renderer renderer = GetComponent<Renderer>(); // Objenin renderer komponenti seçiliyor.
            renderer.material.mainTexture = www.texture; // Objenin Rendererinde bulunan texture internetten indirilen texture ile değiştiriliyor.
        }
    }
} 

WWW ile ilgili aslında yeterince bilgi verdiğimi düşünüyor ve bir diğer modülümüz olan WWWForm modülüne geçiyorum.


WWWForm Nedir ?

WWWForm aslında WWW nin bir niteleyicisi(Burada Türkçe ile savaş verdiğim doğrudur..) görevi gören bir modüldür.
WWW ile "GET" ve "POST" verileri gönderebildiğimizden bahsetmiştim işte bu "GET" ve "POST" verilerini göndermek için aslında veri kümeleri oluşturmamız gerekiyor ve bu veri kümelerini oluşturmak için biz WWWForm kullanıyoruz.

WWWForm ile ilgili Unity tarafından verilen örneği inceleyelim.
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class WWWFormImage : MonoBehaviour
{

    public string screenShotURL= "http://www.my-server.com/cgi-bin/screenshot.pl";

    // Use this for initialization
    void Start()
    {
        StartCoroutine(UploadPNG()); // UploadPNG fonksiyonu çağırılıyor.
    }

    IEnumerator UploadPNG()
    {
       // Aktif karenin geçmesi bekleniyor.
        yield return new WaitForEndOfFrame();

       //RGB 24 boyutunda yeni bir texture oluşturuyoruz.
        int width = Screen.width; // Genişlik belirledik
        int height = Screen.height; // Yükseklik belirledik
        var tex = new Texture2D( width, height, TextureFormat.RGB24, false ); // Texture dosyamızı oluşturduk

        // Ekrandaki görüntü kesilip texture için atanıyor.
        tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 );
        tex.Apply();

        // Oluşturulan texture PNG olarak dönüştürülüyor.
        byte[] bytes = tex.EncodeToPNG();
        Destroy( tex );

        // WWWForm oluşturuyoruz
        WWWForm form = new WWWForm();
	// Urhoba Notu : buradaki "frameCount" gideceği sitede bulunan Post metodundaki yakalayıcının adı örnek vermem gerekir ise $_POST["frameCount"] olarak siteden bu veri çekiliyor.
        form.AddField("frameCount", Time.frameCount.ToString()); // Burada frame sayısını text olarak alıyor ve form içine parametre olarak ekliyor
        form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png"); // Oluşturulan ve dönüştürülen texture form içine parametre olarak ekleniyor.

        // Oluşturulan form internet sitesine yollanıyor.
        using (var w = UnityWebRequest.Post(screenShotURL, form)) // WebRequest.Post() ile veriyi internet sitesine gönderdi
        {
            yield return w.SendWebRequest(); // Siteye varışın tamamlanması ve sonuçların döndürülmesi istendi
            if (w.isNetworkError || w.isHttpError) { // Hata var ise hata komutları bastırıldı
                print(w.error);
            }
            else {
                print("Finished Uploading Screenshot"); // Herhangi bir hata ile karşılaşılmamışsa "Finished Uploading SS" yazısı bastırıldı.
            }
        }
    }
}

Yukarıdaki WWWForm ile bazı işlemlerde doğru sonuçlar alamıyoruz özellikle MYSQL e veri yüklediğimiz zaman site kısmında hata ile karşılaşıldığı zaman bu bize tam olarak dönüt vermiyor bunun için sizlere ilerleyen zamanlarda daha detaylı bir şekilde karşıya veri yollandığı zaman siteden gelen dönütleri de almayı anlatacağım.

O gün gelene kadar kendinize iyi bakın ve görüşmek üzere.