UNITY’de Hile Sistemi Oluşturmak (GTA Tarzı)

Yayınlandı: 05 Ağustos 2013 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Yine ve yeniden merhaba,

Bu derste, Unity‘de GTA oyunlarında olduğu gibi bir hile sistemi kodlamayı göstereceğim (LEAVEMEALONE veya ASPIRINE tarzı). Daha doğrusu çoktan kodladığım bu sistemin kaynak kodunu vereceğim.

Kod için yazının devamını okuyabilirsiniz…

Hile adında yeni bir C# script’i oluşturup bunu kameraya component olarak verin ve Inspector’dan “Hile Kodu“na istediğiniz gibi bir hile kodu girin (örneğin 1adamvarmışcanısıkılan). Oyun esnasında hile kodunu tuşladığınızda, konsola hilenin aktifleştirildiği log’u düşecek. Hile aktifleştirildiğinde yapılacakları ise, bu log’u gösteren print‘li satırın olduğu yere yazabilirsiniz.

using UnityEngine;

public class Hile : MonoBehaviour
{
	public string hileKodu;
	public float ikiTusArasiMaxZaman = 1f;

	private float enSonTusaBasmaZamani;
	private int basilmasiGerekenSiradakiHarf;

	void Start()
	{
		if( hileKodu == null || hileKodu.Length == 0 )
			Destroy( this );

		// Hile kodundaki tüm harfleri büyük harfe çevir
		hileKodu = hileKodu.ToUpper();

		// İ harflerini I harfiyle değiştir (yoksa işler karışabiliyor)
		hileKodu = hileKodu.Replace( 'İ', 'I' );

		enSonTusaBasmaZamani = Time.realtimeSinceStartup;
		basilmasiGerekenSiradakiHarf = 0;
	}

	private void Update()
	{
		if( Input.anyKeyDown )
		{
			string input = Input.inputString;
			if( input != null && input.Length > 0 )
			{
				char tus = input[0];
				if( tus >= 32 )
				{
					tus = char.ToUpper( tus );
					if( tus == 'İ' )
						tus = 'I';

					TusuIslemeAl( tus );
				}
			}
		}
	}

	private void TusuIslemeAl( char tus )
	{
		//Debug.Log( tus + " işleme alındı" );

		// Eğer bir önceki tuşa bastıktan sonra geçen zaman çok fazlaysa hileyi başa sar
		if( Time.realtimeSinceStartup > enSonTusaBasmaZamani + ikiTusArasiMaxZaman )
			basilmasiGerekenSiradakiHarf = 0;

		if( tus == hileKodu[basilmasiGerekenSiradakiHarf] )
		{
			// Eğer doğru tuşa basarsak...
			basilmasiGerekenSiradakiHarf++;

			if( basilmasiGerekenSiradakiHarf >= hileKodu.Length )
			{
				basilmasiGerekenSiradakiHarf = 0;

				// Hile kodu başarıyla girildi! Yapılacakları buraya yaz...
				print( "Hile " + Time.realtimeSinceStartup + " anında aktifleştirildi!" );
			}
		}
		else
		{
			// Eğer yanlış tuşa basarsak...
			if( hileKodu[0] == tus )
				basilmasiGerekenSiradakiHarf = 1;
			else
				basilmasiGerekenSiradakiHarf = 0;
		}

		enSonTusaBasmaZamani = Time.realtimeSinceStartup;
	}
}
yorum
  1. Yusufhan dedi ki:

    @yasirkula kardeşim yapmak istediğim işlem burada konusunu bulamadım o yüzden buraya yazacağım.

    sorunum şu bir hidrant düşün hidranta çarpınca geri geliyor fakat -90 olarak çağıyor Rotation X 0 olarak gelmesini sağlamak istiyorum.

    • yasirkula dedi ki:

      3D modelin rotasyonu 0,0,0 iken obje yamuk duruyorsa ve bunu düzeltmek istiyorsanız, 3D modelleme programında objenin pivot’unu döndürmeniz, objeye istediğiniz rotasyona sahip boş bir GameObject’i parent olarak vererek artık o parent objeyi kullanmanız ya da pivot’u Unity içerisinden düzenlemeye yarayan bir tool kullanmanız lazım (Asset Store’dan bulabilirsiniz ama 3D modelleme programında yapmak en temizi olabilir).

  2. eren dedi ki:

    hilenin ne olacağını örn: “aspirine” kısmını nereye yazıyoruz, teşekkürler

Cevap Yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.