Merhaba arkadaşlar bu yazımda oyunlarda ki paylaş butonları nasıl yapılır. Unity3d’de üzerinden bunu, kendi uygulamamıza nasıl yerleştirebiliriz onu anlatacağım.Şimdi öncelikle bunu yapmanın iki yolu vardır.Birincisi teker teker facebook,twitter tarzı sitelerin apilerini kullanabiliriz.İkincisi ise android cihazlarda bulunan paylaş sekmesini kullanarak bütün sosyal ortamlara paylaşımı yaptırabiliriz.Ben bu yazımda ikincisini anlatacağım.Daha kullanışlı olduğunu düşünüyorum.

Öncelikle yeni bir script oluşturun.İçine aşağıda ki kodları yapıştırın.Sonra oyununuza bir paylaşma butonu ekleyin.Kullanıcı o butona tıklayınca yazdığımız scriptin aktif olmasını sağlayın.Bunu yapmak için Unity3d’de Hierarchy penceresininin içinde sağ tıklayıp UI>Button yolunu izleyin.İnspector penceresinden butonunuzun onClick listesine oluşturduğumuz paylaşma scriptini atın ve fonksiyon olarak ButtonShare seçin.Böylelikle butona tıklandığında ButtonShare fonksiyonu içerisinde ki kodlar çalışmaya başlayacak.

Sırasıyla kodları açıklamak gerekirse ilk önce using System.IO; ve using UnityEngine.UI; kütüphanelerini ekledik en üste sonra çalışma sürecini kontrol etmek için isProcessing diye bir bool değişken oluşturuyoruz.Butona tıklandığında bu değişken true oluyor.İşlemimiz bittiğinde ise false oluyor.ButtonShare resim değişkenine oluşturduğumuz butonumuzu atıyoruz.Mesaj değişkenine ise sosyal ortamlarda paylaşırken ne yazmasını istiyorsanız onu yazıyorsunuz.ButtonShare fonksiyonunda ShareScreenshot fonksiyonunu 1 kerelik çalıştırıyoruz. SS tagları arasında ki kısım screenshot almamızı sağlıyor eğer sadece bir mesaj, skor vs gibi değer paylaşmak istiyorsanız orayı silebilirsiniz.

ANDROİD PAYLAS diye ayırdığım alt kısımda ise android cihazların paylaş sekmesini açmak için gereken kod kısmı en altta bununla paylas diye ayırdığım kısımıda açıklayayım. Android cihazlarda iki paylaşma sekmesi var bir tanesi bir kerelik paylaşma seçeneğini seçiyorsunuz onu kaydediyo sürekli o ortamda paylaşıyor.Diğeri her seferinde hangi ortamda paylaşılacak soruyor. Ben currentActivity.Call(“startActivity”, jChooser); kullandım. Bunun yerine currentActivity.Call(“startActivity”, intentObject); kullanabilirsiniz.

 

Resimi paylaşması için player settings>othersettings>writeaccess ten external(SD card) secenegini secip izinimizi almamız gerekmektedir

 

share.cs

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;

public class Share : MonoBehaviour {
	
	private bool isProcessing = false;
	public Image buttonShare;
	public string mesaj;
	

	
	public void ButtonShare ()
	{
		//buttonShare.enabled = false;
		if(!isProcessing){
			StartCoroutine( ShareScreenshot() );
		}
	}
	public IEnumerator ShareScreenshot()
	{
		
isProcessing = true;
// wait for graphics to render
yield return new WaitForEndOfFrame();
//buttonShare.enabled = true;
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SS
// create the texture
Texture2D screenTexture = new Texture2D(Screen.width, 
Screen.height,TextureFormat.RGB24,true);

screenTexture.ReadPixels(new Rect(0f, 0f, Screen.width,
 Screen.height),0,0);
		// apply
		screenTexture.Apply();
		//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SS
		byte[] dataToSave = screenTexture.EncodeToPNG();
		string destination = Path.Combine
(Application.persistentDataPath,System.DateTime.Now.ToString
("yyyy-MM-dd-HHmmss") + ".png");
		File.WriteAllBytes(destination, dataToSave);
		if(!Application.isEditor)
		{
			

// ------------ANDROİD PAYLAS
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://" + destination);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);

intentObject.Call<AndroidJavaObject> ("setType", "text/plain");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), ""+ mesaj);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "SUBJECT");

			 
			
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
  AndroidJavaObject jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, "Share Via");
        
currentActivity.Call("startActivity", jChooser);
//currentActivity.Call("startActivity", intentObject);//bununla paylas
		}
		isProcessing = false;
		
	}
}

About the author

Benan DİNDAR

1 Comment

Leave a Comment

Powered by themekiller.com anime4online.com animextoon.com