TextMeshPro Ayrıntılı Anlatımı

TextMeshPro (TMP), Unity’deki metin bileşenlerinin daha keskin, detaylı ve etkileyici görünmesini sağlar. Standart Unity Text bileşenine kıyasla çok daha geniş özelliklere sahiptir. TextMeshPro, özellikle yüksek çözünürlüklü ve özelleştirilebilir metinlerle çalışmak için geliştirilmiş bir sistemdir ve metinleri grafiksel olarak çok daha etkileyici hale getirir.

TextMeshPro, hem UI (2D) hem de 3D metin olarak kullanılabilir. 2D UI metinleri için kullanıcı arayüzünde (menüler, butonlar gibi) yüksek kaliteli metin oluşturmak için idealdir. 3D metinlerde ise sahne içindeki 3D nesnelerin üzerinde metin göstermek için kullanılır.

1. TextMeshPro Menüsüne Nasıl Ulaşılır?

TextMeshPro bileşenine Unity’de şu şekilde ulaşabilirsiniz:

  1. UI Panelinde TextMeshPro UI Ekleme:
    • Hierarchy panelinde sağ tıklayın, UI > Text – TextMeshPro seçeneğini seçin. Bu seçenek, sahneye bir TextMeshPro UI bileşeni ekler. Bu metin, Unity’nin UI sistemine dahildir ve 2D kullanıcı arayüzleri için kullanılır.
  2. 3D Nesne Olarak TextMeshPro Ekleme:
    • Hierarchy panelinde sağ tıklayın, 3D Object > Text – TextMeshPro seçeneğini seçin. Bu seçenek, sahneye 3D nesne olarak bir TextMeshPro bileşeni ekler. Bu tür metinler, sahnede 3D nesne gibi davranır ve kamera perspektifine göre boyutları değişir.
  3. Inspector Panelinde TextMeshPro Özelliklerini Düzenleme:
    • TextMeshPro bileşenini seçtiğinizde, sağ tarafta yer alan Inspector panelinde TextMeshPro’nun tüm özelliklerini görebilir ve ayarlayabilirsiniz.

2. TextMeshPro Çeşitleri

TextMeshPro, kullanım alanına göre iki farklı türde bulunur:

  • TextMeshPro – UI: UI (kullanıcı arayüzü) elemanları için geliştirilmiş bir metin bileşenidir. 2D UI elemanlarıyla çalışırken yüksek çözünürlüklü ve ayrıntılı metinler oluşturur. Button, Panel gibi arayüz bileşenleri ile uyumludur.
  • TextMeshPro – 3D: 3D ortamda kullanılan bir metin bileşenidir. 3D sahnede metinleri nesneler gibi ekranda konumlandırabilir ve döndürebilirsiniz. Özellikle sahnede sabit olmayan metinler için tercih edilir.

3. TextMeshPro Özellikleri ve Ayrıntılı Açıklamaları

TextMeshPro’nun pek çok özelliği vardır ve metinlerin görünümünü, renklerini, gölgelendirmesini, hizalamasını ve daha birçok detayı ayarlamanıza olanak tanır. Aşağıdaki tabloda TextMeshPro bileşeninin önemli özelliklerini, ne işe yaradıklarını ve nasıl kullanıldıklarını ayrıntılı olarak bulabilirsiniz.

ÖzellikAçıklamaKullanım DurumlarıProgramatik Erişim
TextGörüntülenmesini istediğiniz metni belirler. Bu alan, metnin temel içeriğini içerir.Tüm metin elemanlarında kullanılır.textMeshPro.text = "Merhaba";
Font AssetMetin için kullanılan fontu belirler. TextMeshPro fontları özel bir format kullanır ve TMP_FontAsset olarak eklenir.Metin stilini değiştirmek istediğinizde kullanılır.textMeshPro.font = myFontAsset;
Font StyleMetin stilini belirler; Normal, Bold, Italic, Underline gibi seçenekler içerir.Farklı metin stilleri ile vurgulama yapmak için.textMeshPro.fontStyle = FontStyles.Bold;
Font SizeMetnin boyutunu ayarlar. Genellikle UI ve 3D metinler için kullanılır.Küçük veya büyük yazı boyutları gerektiğinde.textMeshPro.fontSize = 24;
AlignmentMetnin hizalamasını belirler; Left, Center, Right gibi seçenekler bulunur.Metnin sola, sağa veya ortaya hizalanması gerektiğinde.textMeshPro.alignment = TextAlignmentOptions.Center;
ColorMetnin rengini ayarlar.Öne çıkması gereken veya belirli bir tema rengine uyacak metinler için.textMeshPro.color = Color.red;
Gradient ColorMetne renk geçişi (gradient) ekler. TextMeshPro’nun yalnızca belirli versiyonlarında mevcuttur.Renk geçişleri ile daha ilgi çekici metinler için.textMeshPro.colorGradient = myGradient;
OutlineMetin etrafında bir kenarlık ekler.Metni daha belirgin hale getirmek için kenarlık eklemek gerektiğinde.textMeshPro.outlineWidth = 0.1f;
Outline ColorKenarlık rengini belirler.Kenarlığın görünümünü özelleştirmek için.textMeshPro.outlineColor = Color.black;
Character SpacingKarakterler arasındaki boşluğu ayarlar.Daha sıkı veya daha geniş metinler için karakter aralığını ayarlamak için.textMeshPro.characterSpacing = 1.0f;
Line SpacingSatırlar arasındaki boşluğu ayarlar.Metin paragrafları için satır boşluğunu özelleştirmek gerektiğinde.textMeshPro.lineSpacing = 1.2f;
Word SpacingKelimeler arasındaki boşluğu ayarlar.Geniş boşluklu veya daha sıkışık metinler için.textMeshPro.wordSpacing = 1.5f;
Enable Auto-SizingFont boyutunun otomatik olarak ayarlanmasını sağlar.Metnin boyutunu otomatik olarak kutuya sığdırmak gerektiğinde.textMeshPro.enableAutoSizing = true;
Max Visible CharactersGörüntülenebilecek maksimum karakter sayısını belirler.Belirli bir karakter sayısı sınırlaması yapmak istediğinizde.textMeshPro.maxVisibleCharacters = 50;
Rich TextZengin metin (bold, italic gibi) formatlarını destekler.Metinde stil değişiklikleri yapmak gerektiğinde.textMeshPro.richText = true;
Raycast TargetMetnin raycast hedefi olup olmadığını belirler. UI etkileşimleri için önemlidir.Metin üzerinde tıklama veya etkileşim yapılacaksa aktif edilir.textMeshPro.raycastTarget = true;

TextMeshPro Özelliklerine Programatik Erişim

TextMeshPro bileşenine C# kodu ile erişip özelliklerini değiştirebilirsiniz. Aşağıda her bir TextMeshPro özelliğine nasıl erişileceğini gösteren bir tablo hazırladım:

ÖzellikKod ile Erişim ÖrneğiAçıklama
TexttextMeshPro.text = "Merhaba";Metni ayarlar.
Font AssettextMeshPro.font = myFontAsset;Fontu değiştirir.
Font StyletextMeshPro.fontStyle = FontStyles.Bold;Yazı stilini ayarlar.
Font SizetextMeshPro.fontSize = 24;Yazı boyutunu ayarlar.
AlignmenttextMeshPro.alignment = TextAlignmentOptions.Center;Metni ortalar.
ColortextMeshPro.color = Color.red;Metin rengini kırmızı yapar.
Gradient ColortextMeshPro.colorGradient = myGradient;Metne renk geçişi ekler.
OutlinetextMeshPro.outlineWidth = 0.1f;Kenarlık ekler.
Outline ColortextMeshPro.outlineColor = Color.black;Kenarlık rengini siyah yapar.
Character SpacingtextMeshPro.characterSpacing = 1.0f;Karakterler arasındaki boşluğu ayarlar.
Line SpacingtextMeshPro.lineSpacing = 1.2f;Satır aralığını ayarlar.
Word SpacingtextMeshPro.wordSpacing = 1.5f;Kelimeler arasındaki boşluğu ayarlar.
Enable Auto-SizingtextMeshPro.enableAutoSizing = true;Yazı boyutunu otomatik ayarlama.
Max Visible CharacterstextMeshPro.maxVisibleCharacters = 50;Görüntülenebilecek maksimum karakter sayısını belirler.
Rich TexttextMeshPro.richText = true;Zengin metin formatlarını aktif eder.
Raycast TargettextMeshPro.raycastTarget = true;Metnin raycast hedefi olup olmadığını belirler.

4. TextMeshPro Özelliklerinin Değer Aralıkları ve Kullanım Durumları

Aşağıdaki tabloda TextMeshPro özelliklerinin değer aralıklarını ve hangi durumlarda hangi değerlerin kullanılabileceğini detaylandırdım:

ÖzellikDeğer Aralığı / SeçeneklerÖnerilen DeğerlerKullanım Durumları
Font Size1 – 500+ (Projeye göre değişir)12-24 (UI için), 36+ (Başlıklar için)Küçük metinler için küçük, başlıklar için büyük boyutlar tercih edilir.
AlignmentLeft, Center, Right, JustifiedLeft (Genel), Center (Başlıklar)Paragraf veya uzun metinlerde sol, başlıklar için merkez hizalama.
Outline Width0 – 10.1 – 0.5Hafif kenarlık için düşük, belirgin kenarlık için yüksek değer.
Character Spacing0 – ∞0.5 – 1.5Geniş boşluklu veya sıkışık metinler için.
Line Spacing0 – ∞1.0 – 1.5Metin paragrafları veya başlıklar için.
Word Spacing0 – ∞1.0 – 1.5Geniş veya sık kelime boşlukları için.
Max Visible Characters0 – ∞İhtiyaca göreSınırlı metin gösterimi yapmak gerektiğinde.

5. TextMeshPro Kullanım Alanları ve Dikkat Edilecekler

Kullanım Alanları

  1. UI Metinleri: TextMeshPro – UI, kullanıcı arayüzlerinde (menüler, butonlar) yüksek kaliteli metinler oluşturmak için kullanılır.
  2. 3D Metinler: TextMeshPro – 3D, sahne içinde 3D nesneler üzerinde metin göstermek için idealdir, örneğin karakterlerin isimleri veya bilgi etiketleri gibi.
  3. Etiketler ve Bilgilendirme Panelleri: Oyun içinde bilgi panelleri veya uyarı mesajları için kullanılabilir.

Dikkat Edilmesi Gerekenler

  • Font ve Boyut Seçimi: Çok küçük fontlar okunması zor olabilir, çok büyük fontlar ise UI tasarımını bozabilir.
  • Auto-Sizing Kullanımı: Otomatik boyutlandırma özelliği dikkatli kullanılmalıdır. Metinler çok küçük veya çok büyük olabilir.
  • Kenarlık ve Gölge Ayarları: Kenarlık ve gölge özellikleri abartılı kullanılırsa metinlerin okunabilirliğini düşürebilir.
  • Raycast Target: Gereksiz raycast hedefleri performansı düşürebilir, raycast sadece tıklanabilir metinlerde kullanılmalıdır.

Uygulanmaması Gereken Nesneler

  • Statik Arka Planlar veya Grafikler: Arka planda sabit görsellerde kullanılmaz.
  • Performans Kısıtlı Projeler: Çok fazla TextMeshPro bileşeni, mobil cihazlarda performansı etkileyebilir.

Özet

Dikkat Edilecek Noktalar: Auto-Sizing, kenarlık ayarları, raycast kullanımı performans açısından önemlidir.

TextMeshPro Ekleme: UI > Text – TextMeshPro veya 3D Object > Text – TextMeshPro yoluyla eklenir.

Çeşitleri: TextMeshPro – UI (2D arayüz) ve TextMeshPro – 3D (sahne içi 3D metin).

Özellikler ve Kullanımı: Text, Font Size, Color, Outline, Gradient gibi birçok özelliği bulunur.

Kullanım Alanları: UI metinleri, 3D etiketler, bilgi panelleri.

1

Physic Material Ayrıntılı Anlatımı

Physic Material, nesnelerin fiziksel etkileşimlerini kontrol eden bir materyal türüdür ve özellikle çarpışma, sürtünme, sıçrama gibi etkileri ayarlamak için kullanılır. Physic Material, 3D projelerde Collider bileşenlerine eklenerek nesnelerin yüzey özelliklerini tanımlar. Bu özellik, nesnelerin nasıl hareket edeceğini, birbiriyle çarpışma anında nasıl tepki vereceğini belirlemek için kullanılır.

1. Physic Material Menüsüne Nasıl Ulaşılır?

Unity’de Physic Material bileşenine şu adımlarla ulaşabilirsiniz:

  1. Project Panelinde Physic Material Oluşturma:
    • Assets panelinde sağ tıklayın, Create > Physic Material seçeneğini seçin. Yeni bir Physic Material oluşturulacaktır.
  2. Inspector Panelinde Physic Material’i Düzenleme:
    • Oluşturduğunuz Physic Material nesnesini seçtiğinizde, sağ taraftaki Inspector panelinde Physic Material özelliklerini görebilir ve ayarlayabilirsiniz.
  3. Collider’a Physic Material Ekleme:
    • Bir Collider bileşenine Physic Material eklemek için oluşturduğunuz Physic Material nesnesini Collider bileşeninin Material alanına sürükleyip bırakabilirsiniz.

2. Physic Material Çeşitleri

Physic Material bileşeni aslında tek bir türdür; ancak 3D projelerdeki farklı nesnelere atanarak çeşitli fiziksel etkileşimler oluşturulabilir. Örneğin, bir nesnenin kaygan, sert veya esnek bir yüzeye sahip olması gerektiğinde farklı Physic Material ayarları yapılabilir.

Physic Material, 2D projelerde Physics Material 2D olarak benzer işlevlere sahiptir, ancak 3D ile 2D arasındaki fark, 2D versiyonunun yalnızca 2D fizik motoruyla uyumlu olmasıdır.

Physic Material Türleri

  • Physic Material (3D): 3D projelerde nesnelerin çarpışma, sürtünme ve sıçrama etkilerini ayarlar.
  • Physics Material 2D: 2D projelerde nesnelerin fiziksel özelliklerini ayarlamak için kullanılır.

3. Physic Material Özellikleri ve Ayrıntılı Açıklamaları

Physic Material bileşeninin temel özellikleri Dynamic Friction, Static Friction, Bounciness ve Friction Combine/ Bounce Combine gibi parametrelerdir. Bu özellikler nesnelerin yüzeyle nasıl etkileşime gireceğini belirler. Aşağıdaki tabloda Physic Material bileşeninin özelliklerini, ne işe yaradıklarını ve nasıl kullanıldıklarını ayrıntılı bir şekilde bulabilirsiniz.

ÖzellikAçıklamaKullanım DurumlarıProgramatik Erişim
Dynamic FrictionNesne hareket halindeyken uygulanan sürtünme katsayısını belirler. 0 ile 1 arasında değer alır; 0 kaygan, 1 ise yüksek sürtünmelidir.Kaygan veya sürtünmeli yüzeyler için.physicMaterial.dynamicFriction = 0.5f;
Static FrictionNesne dururken uygulanan sürtünme katsayısını belirler. 0 ile 1 arasında değer alır.Sabit duran nesnelerin yüzeyle etkileşimini ayarlamak için.physicMaterial.staticFriction = 0.5f;
BouncinessNesnenin sıçrama miktarını belirler. 0 ile 1 arasında değer alır; 0 sıçramaz, 1 ise maksimum sıçrama sağlar.Toplar veya sıçrama gerektiren yüzeyler için.physicMaterial.bounciness = 0.8f;
Friction CombineSürtünmenin nasıl birleşeceğini belirler. Average, Minimum, Maximum, Multiply seçenekleri vardır.Farklı yüzeyler arasındaki sürtünmeyi birleştirmek için.physicMaterial.frictionCombine = PhysicMaterialCombine.Average;
Bounce CombineSıçrama etkisinin nasıl birleşeceğini belirler. Average, Minimum, Maximum, Multiply seçenekleri vardır.Farklı yüzeylerin sıçrama etkilerini birleştirmek için.physicMaterial.bounceCombine = PhysicMaterialCombine.Maximum;

Physic Material Özelliklerine Programatik Erişim

Physic Material bileşenine C# kodu ile erişip özelliklerini değiştirebilirsiniz. Aşağıda her bir özelliğe nasıl erişileceğini gösteren bir tablo hazırladım:

ÖzellikKod ile Erişim ÖrneğiAçıklama
Dynamic FrictionphysicMaterial.dynamicFriction = 0.5f;Nesne hareket halindeyken uygulanan sürtünme katsayısını ayarlar.
Static FrictionphysicMaterial.staticFriction = 0.5f;Nesne dururken uygulanan sürtünme katsayısını ayarlar.
BouncinessphysicMaterial.bounciness = 0.8f;Nesnenin sıçrama miktarını belirler.
Friction CombinephysicMaterial.frictionCombine = PhysicMaterialCombine.Average;Sürtünme etkisinin nasıl birleştirileceğini belirler.
Bounce CombinephysicMaterial.bounceCombine = PhysicMaterialCombine.Maximum;Sıçrama etkisinin nasıl birleştirileceğini belirler.

4. Physic Material Özelliklerinin Değer Aralıkları ve Kullanım Durumları

Aşağıdaki tabloda Physic Material bileşeninin özelliklerine ait değer aralıklarını ve hangi durumlarda hangi değerlerin kullanılabileceğini detaylandırdım:

ÖzellikDeğer Aralığı / SeçeneklerÖnerilen DeğerlerKullanım Durumları
Dynamic Friction0 – 10.2 (Kaygan yüzey), 0.8 (Yüksek sürtünmeli yüzey)Yüksek sürtünmeli yüzeylerde 0.8, kaygan yüzeylerde 0.2 veya altı.
Static Friction0 – 10.2 – 0.8Sabit duran nesnelerin kolay hareket etmesi için düşük, zor hareket etmesi için yüksek değerler.
Bounciness0 – 10 (Hiç sıçramayan), 1 (Yüksek sıçrama)Top gibi sıçraması gereken nesneler için yüksek, düz yüzeyler için düşük.
Friction CombineAverage, Minimum, Maximum, MultiplyAverageFarklı yüzeylerde ortalama sürtünme etkisi isteniyorsa Average seçilir.
Bounce CombineAverage, Minimum, Maximum, MultiplyMaximumFarklı yüzeylerde maksimum sıçrama etkisi isteniyorsa Maximum seçilir.

5. Physic Material Kullanım Alanları ve Dikkat Edilecekler

Kullanım Alanları

  1. Sürtünme ve Kayganlık Efektleri: Physic Material, nesnelerin yüzeylerinin sürtünme seviyesini ayarlayarak kaygan veya yüksek sürtünmeli yüzeyler oluşturur.
  2. Sıçrama Efektleri: Bounciness özelliği sayesinde toplar veya zıplaması gereken nesneler için sıçrama etkisi yaratır.
  3. Özel Yüzey Etkileri: Farklı yüzeylerin etkileşimini kontrol etmek ve özelleştirmek için Physic Material kullanılır.

Dikkat Edilmesi Gerekenler

  • Sürtünme Değerleri: Sürtünme değerlerinin aşırı yüksek veya düşük olmaması önemlidir. Çok yüksek sürtünme değerleri nesnelerin hareket etmesini engelleyebilir.
  • Bounciness (Sıçrama) Değerleri: Yüksek Bounciness değeri, nesnelerin sürekli sıçramasına ve beklenmedik hareketlere neden olabilir. Sadece gerektiği kadar sıçrama verilmelidir.
  • Friction ve Bounce Combine Ayarları: Farklı yüzeylerin etkileşimini birleştirirken doğru ayarlar yapılmalıdır. Örneğin, çok kaygan bir yüzeyle çok sürtünmeli bir yüzeyi birleştirirken dikkatli olunmalıdır.

Uygulanmaması Gereken Nesneler

  • Statik ve Sabit Nesneler: Sadece hareketli nesnelere uygulayın. Statik ve sabit nesneler için Physic Material gereksizdir.
  • UI Elemanları: Physic Material, yalnızca fiziksel çarpışma veya sürtünme etkisi gerektiren nesnelerde kullanılır. UI elemanları veya 2D sprite’lar için uygun değildir.

Özet

Dikkat Edilecek Noktalar: Sürtünme ve sıçrama değerlerinin doğru ayarlanması, yanlış materyal ayarlarından kaçınılması önemlidir.

Physic Material Ekleme: Assets panelinden Create > Physic Material ile oluşturulabilir ve Collider bileşenine eklenir.

Çeşitleri: Tek bir Physic Material türü vardır, ancak 3D projelerde Collider bileşenlerinde uygulanabilir.

Özellikler ve Kullanımı: Dynamic Friction, Static Friction, Bounciness gibi özellikler ile yüzeyin fiziksel özellikleri ayarlanır.

Kullanım Alanları: Sürtünme, kayganlık, sıçrama ve yüzey etkileşimlerini kontrol etmek için kullanılır.

1

AddForce Ayrıntılı Anlatımı

AddForce, Unity’de bir Rigidbody bileşenine kuvvet uygulayarak nesnenin hızlanmasını, hareket etmesini veya yön değiştirmesini sağlar. Bu fonksiyon, fizik tabanlı nesnelerin (Rigidbody bileşeni olan nesneler) etkileşimlerini ve hareketlerini kontrol etmek için sıklıkla kullanılır. AddForce, nesneye uygulanan kuvvetin yönünü ve büyüklüğünü ayarlayarak doğal bir hareket simülasyonu sağlar.

1. AddForce Nasıl Kullanılır?

AddForce fonksiyonu, Rigidbody bileşeni eklenmiş nesneler üzerinde kullanılır. Bu fonksiyon, C# kodu aracılığıyla nesneye belirli bir kuvvet uygulamak için çağrılır. AddForce menüsüne doğrudan Unity arayüzünden ulaşılmaz; ancak bir script (betik) yazarak AddForce’u kullanabilirsiniz. Aşağıdaki adımları izleyerek bir nesneye AddForce fonksiyonu ekleyebilirsiniz:

  1. Rigidbody Ekleme:
    • Hierarchy panelinde bir nesne seçin veya yeni bir nesne ekleyin.
    • Nesneye Inspector panelinden Add Component > Rigidbody ekleyin. Bu sayede nesne fizik kurallarına göre hareket edebilir.
  2. Script Oluşturma:
    • Project paneline sağ tıklayın, Create > C# Script seçeneğini tıklayın.
    • Script dosyasını açın ve AddForce fonksiyonunu kullanarak nesneye kuvvet uygulamak için gerekli kodları yazın.
  3. Script’i Nesneye Ekleme:
    • Oluşturduğunuz script’i nesneye sürükleyip bırakın veya nesneyi seçtikten sonra Add Component ile script’i ekleyin.

2. AddForce Çeşitleri

AddForce fonksiyonu birkaç farklı modda çalışabilir. Uygulama şekline göre ForceMode parametresi ile belirlenir. Bu modlar, uygulanan kuvvetin zamanlamasını ve şiddetini belirler:

  • ForceMode.Force: Nesneye sürekli bir kuvvet uygular. Bu mod, nesnenin kütlesini hesaba katar ve düşük güçlü, sürekli bir kuvvet uygulamak için kullanılır.
  • ForceMode.Impulse: Nesneye ani bir kuvvet uygular. Nesnenin kütlesini hesaba katar ve anlık bir itme veya darbe gerektiren durumlarda kullanılır.
  • ForceMode.Acceleration: Nesneye sürekli bir ivme uygular. Kütle hesaba katılmaz, bu nedenle her nesneye eşit miktarda ivme uygulanır.
  • ForceMode.VelocityChange: Nesneye ani bir hız değişikliği uygular. Kütle hesaba katılmaz, bu nedenle hafif nesneler daha hızlı hareket eder.

3. AddForce Kullanımı ve Programatik Özellikler

AddForce fonksiyonunun temel parametreleri, uygulanan kuvvetin yönünü ve büyüklüğünü belirleyen Vector3 parametresi ile ForceMode parametresidir. Aşağıdaki tabloda AddForce fonksiyonunun önemli özelliklerini, ne işe yaradıklarını ve nasıl kullanıldıklarını detaylandırdım:

ParametreAçıklamaKullanım DurumlarıProgramatik Kullanım Örneği
forceNesneye uygulanan kuvvetin büyüklüğünü ve yönünü belirler. Kuvvet, bir Vector3 olarak tanımlanır (x, y, z eksenlerinde kuvvet).İleriye, yukarıya veya belirli bir açıya doğru kuvvet uygulamak için.rb.AddForce(new Vector3(0, 10, 0));
modeKuvvetin uygulanma modunu belirler. Force, Impulse, Acceleration, VelocityChange gibi seçenekleri vardır.Kuvvetin anlık, sürekli veya ivme olarak uygulanması gerektiğinde.rb.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);

AddForce Parametrelerinin Programatik Olarak Kullanımı

AddForce fonksiyonunu programatik olarak kullanmak için nesneye Rigidbody bileşeni eklenmiş olması gerekir. Aşağıda, AddForce parametrelerine nasıl programatik olarak erişilebileceğini ve kullanılabileceğini gösteren örnek bir tablo hazırladım:

ParametreKod ile Kullanım ÖrneğiAçıklama
force (Kuvvet)rb.AddForce(new Vector3(0, 10, 0));Y ekseninde yukarı doğru 10 birimlik bir kuvvet uygular.
mode (Kuvvet Modu)rb.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);Kuvveti ani bir darbe (Impulse) şeklinde uygular.

4. AddForce Kuvvet Modlarının Değer Aralıkları ve Kullanım Durumları

Aşağıdaki tabloda, AddForce fonksiyonunun ForceMode parametreleri ve hangi durumlarda hangi değerlerin kullanılabileceğini açıklayan bir özet bulunmaktadır:

ForceModeAçıklamaÖnerilen Durumlar
ForceNesneye sürekli bir kuvvet uygular ve kütleyi dikkate alır.Sürekli hareket gerektiren durumlarda, örneğin sürekli hızlanan bir araba.
ImpulseNesneye ani bir kuvvet uygular, kütleyi hesaba katar.Ani hızlanma, sıçrama veya darbe etkisi gereken durumlarda, örneğin zıplayan bir top.
AccelerationNesneye sürekli bir ivme uygular, kütleyi dikkate almaz.Kütleden bağımsız eşit ivme gereken durumlarda, örneğin bir jetin hızlanması.
VelocityChangeNesneye ani bir hız değişikliği uygular, kütleyi dikkate almaz.Hızlı hızlanma veya ani durma gibi hız değişikliği gerektiren durumlarda.

5. AddForce Kullanım Alanları ve Dikkat Edilmesi Gerekenler

Kullanım Alanları

  1. Hareket ve Hızlanma: AddForce, nesnenin belirli bir yöne doğru hızlanmasını sağlamak için kullanılır. Örneğin, bir aracın hızlanmasını sağlamak için ForceMode.Force kullanılabilir.
  2. Sıçrama ve Darbe Uygulama: AddForce, nesnelere anlık olarak darbe uygulamak için idealdir. Örneğin, karakterin zıplamasını sağlamak için ForceMode.Impulse kullanılabilir.
  3. İvme Kontrolü: AddForce, nesnenin ivmesini artırmak veya azaltmak için ForceMode.Acceleration kullanarak sürekli ivme uygulanabilir. Bu özellikle roket veya jet gibi nesneler için kullanışlıdır.
  4. Hız Değişiklikleri: AddForce, ani hız değişiklikleri için ForceMode.VelocityChange ile kullanılabilir. Örneğin, bir nesnenin aniden durması veya yön değiştirmesi gereken durumlarda kullanılabilir.

Dikkat Edilmesi Gerekenler

  • Rigidbody Olmalı: AddForce kullanabilmek için nesnede Rigidbody bileşeni bulunmalıdır. Rigidbody olmayan nesnelerde bu fonksiyon çalışmaz.
  • Kuvvet Modu Seçimi: Yanlış kuvvet modu seçimi, beklenmeyen hareketlere yol açabilir. Örneğin, sürekli hareket için Force seçeneği yerine Impulse kullanılırsa nesne aniden hızlanabilir.
  • Kuvvet Yönü: Uygulanan kuvvetin yönü Vector3 ile belirlenir. Yanlış yön belirlenirse nesne farklı bir yöne hareket edebilir.
  • Kütle Etkisi: Force ve Impulse modları kütleyi hesaba katar. Eğer farklı kütlelere sahip nesneler aynı kuvvetle itilecekse sonuçlar farklı olacaktır. Eşit kuvvet gerektiren durumlarda Acceleration veya VelocityChange kullanılmalıdır.

Uygulanmaması Gereken Nesneler

  • Statik Nesneler: AddForce, sadece hareket etmesi gereken nesneler için uygundur. Statik veya sabit nesnelerde kullanılması gereksizdir.
  • UI Elemanları: AddForce, yalnızca fiziksel etkileşim gerektiren nesnelerde kullanılır. UI elemanları veya 2D sprite’lar için uygun değildir.

Özet

  • AddForce Kullanımı: AddForce, C# kodu ile bir Rigidbody bileşenine sahip nesneye kuvvet uygulamak için kullanılır.
  • Çeşitleri (Kuvvet Modları): ForceMode.Force (sürekli kuvvet), ForceMode.Impulse (ani kuvvet), ForceMode.Acceleration (sürekli ivme), ForceMode.VelocityChange (ani hız değişimi) modları ile farklı etkiler yaratılabilir.
  • Parametreleri ve Kullanımı: Kuvvet büyüklüğü ve yönünü belirlemek için Vector3 kullanılır; mod ile kuvvetin türü ayarlanır.
  • Kullanım Alanları: Hızlanma, sıçrama, ivme kontrolü ve hız değişikliklerinde kullanılır.
  • Dikkat Edilmesi Gereken Noktalar: Kuvvet yönü, mod seçimi ve kütle etkisi göz önünde bulundurulmalıdır.

AddForce fonksiyonu, bir Rigidbody‘ye kuvvet uygulayarak nesnenin hareket etmesini sağlar. Bu kuvvetin yönünü ve büyüklüğünü belirlemek için Vector3 (3D projelerde) veya Vector2 (2D projelerde) kullanırız.


1. AddForce Kullanımı ve Parametrelerin Anlamı

csharpKodu kopyalarb.AddForce(new Vector3(x, y, z) * güç, ForceMode.Impulse);

Parametreler:

  • x: Kuvvetin X eksenindeki bileşenidir. Pozitif bir değer sağa, negatif bir değer sola doğru kuvvet uygulayacaktır.
  • y: Kuvvetin Y eksenindeki bileşenidir. Pozitif bir değer yukarı, negatif bir değer aşağı doğru kuvvet uygulayacaktır.
  • z: Kuvvetin Z eksenindeki bileşenidir (3D projelerde). Pozitif bir değer ileri, negatif bir değer ise geri doğru kuvvet uygular.

2. AddForce İçinde Yön Belirleme

Eğer bir topu AddForce ile belirli bir yönde hareket ettirmek istiyorsanız, uygulayacağınız kuvvetin yönünü ve büyüklüğünü belirlemek önemlidir.

Örneğin:

  • new Vector3(1, 0, 0): X ekseninde sağa doğru bir kuvvet uygular.
  • new Vector3(-1, 0, 0): X ekseninde sola doğru bir kuvvet uygular.
  • new Vector3(0, 1, 0): Y ekseninde yukarı doğru bir kuvvet uygular.
  • new Vector3(0, -1, 0): Y ekseninde aşağı doğru bir kuvvet uygular (yerçekimine karşı).
  • new Vector3(0, 0, 1): Z ekseninde ileri doğru bir kuvvet uygular.
  • new Vector3(0, 0, -1): Z ekseninde geri doğru bir kuvvet uygular.

3D Oyunlarda:

  • Eğer 3D bir oyunda çalışıyorsanız, X, Y ve Z eksenleri aktif olacaktır. Bu durumda Vector3 kullanmanız gerekir.

2D Oyunlarda:

  • Eğer 2D bir oyun yapıyorsanız, yalnızca X ve Y eksenleri aktif olacaktır. Bu durumda Vector2 kullanabilirsiniz, ve Z eksenini ihmal edersiniz.

3. AddForce ile Uygulanan Kuvvetin Gücünü Ayarlama

Uyguladığınız kuvvetin büyüklüğünü belirlemek için, güç (kuvvet) çarpanı kullanabilirsiniz. Aşağıdaki örnek, uygulanan kuvveti büyütmek veya küçültmek için kullanılabilir:

csharpKodu kopyalafloat power = 10f; // Güç çarpanı
rb.AddForce(new Vector3(x, y, z) * power, ForceMode.Impulse);
  • ForceMode.Impulse: Kuvveti bir anlık (çarpma gibi) uygular. Topa anında hız kazandırır.
  • ForceMode.Force: Kuvveti sürekli uygular. Yavaşça hızlanma sağlar.

Örneğin:

Vector3 direction = new Vector3(1, 0, 0); // Sağ yöne birim vektör
rb.AddForce(direction * 10f, ForceMode.Impulse);

Bu örnek, X ekseninde sağa doğru 10 birim kuvvet uygular.


4. Kod Örneği ile Açıklama

Aşağıdaki örnekte, bir topa dokunduğunuzda uygulanan kuvveti X ve Z ekseninde yönlendiriyoruz. Y eksenini sıfır olarak bırakarak topun yukarı ya da aşağı hareket etmesini engelliyoruz.

using UnityEngine;

public class DiskController : MonoBehaviour
{
private Rigidbody rb;
private Vector2 startPosition;
private bool isDragging = false;

void Start()
{
rb = GetComponent<Rigidbody>();
}

void Update()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);

if (touch.phase == TouchPhase.Began)
{
isDragging = true;
startPosition = touch.position;
}
else if (touch.phase == TouchPhase.Ended && isDragging)
{
isDragging = false;

Vector2 endPosition = touch.position;
Vector2 direction2D = (endPosition - startPosition).normalized;
float power = Vector2.Distance(startPosition, endPosition) * 0.1f;

// Kuvveti sadece X ve Z ekseninde uygulamak için Y eksenini 0 yapıyoruz
Vector3 direction3D = new Vector3(direction2D.x, 0, direction2D.y);
rb.AddForce(direction3D * power, ForceMode.Impulse);
}
}
}
}

Kod Açıklaması

  • direction2D: Dokunma başlangıç ve bitiş konumları arasındaki yönü hesaplıyor.
  • power: Uygulanan kuvvetin büyüklüğünü belirliyor (dokunma mesafesine bağlı).
  • direction3D: Y eksenini 0 yaparak sadece X ve Z ekseninde kuvvet uyguluyoruz.
  • rb.AddForce(direction3D * power, ForceMode.Impulse);: Topu belirlenen güçle ve yönle hareket ettiriyor.

5. Hangi Eksenlerde Kuvvet Uygulamalıyım?

Eğer 3D bir oyun yapıyorsanız:

  • Kuvveti genellikle X ve Z eksenlerinde uygularsınız (Y ekseni genelde yukarı-aşağı hareket içindir).

Eğer 2D bir oyun yapıyorsanız:

Kuvveti yalnızca X ve Y eksenlerinde uygularsınız (Z eksenini ihmal edebilirsiniz).

Rect Transform Ayrıntılı Anlatımı

Unity’de RectTransform bileşeni, UI (Kullanıcı Arayüzü) elemanlarının konumlandırılması ve boyutlandırılması için kritik bir rol oynar. Inspector penceresinde bu bileşenin çeşitli özellikleri bulunur. Her bir özelliği detaylı olarak açıklayalım ve sayısal örneklerle pekiştirelim.

1. Pos X ve Pos Y (Bağlantılı Konumun X ve Y Koordinatları):

Bu değerler, UI elemanının pivot noktasının, belirlenen anchor (bağlantı) noktalarına göre olan konumunu tanımlar. Başka bir deyişle, elemanın ebeveynine göre yatay (X) ve dikey (Y) eksendeki offset’ini belirtir.

Örnek 1:

  • Pos X: 50
  • Pos Y: -20

Bu ayarlar, elemanın pivot noktasını, anchor noktalarına göre 50 birim sağa ve 20 birim aşağıya kaydırır.

Örnek 2:

  • Pos X: -100
  • Pos Y: 75

Bu durumda, elemanın pivot noktası, anchor noktalarına göre 100 birim sola ve 75 birim yukarıya kaydırılır.

2. Width ve Height (Genişlik ve Yükseklik):

Bu değerler, UI elemanının genişlik ve yüksekliğini piksel cinsinden belirtir.

Örnek 1:

  • Width: 200
  • Height: 100

Elemanın genişliği 200 piksel, yüksekliği ise 100 piksel olacaktır.

Örnek 2:

  • Width: 150
  • Height: 300

Bu ayarlar, elemanın genişliğini 150 piksel, yüksekliğini ise 300 piksel olarak belirler.

3. Anchors (Bağlantı Noktaları):

Anchors, elemanın ebeveynine göre nasıl konumlanacağını ve boyutlanacağını belirler. Her bir anchor, ebeveyn RectTransform’unun normalleştirilmiş (0 ile 1 arasında) koordinatlarıdır. Anchor Min, sol alt köşeyi; Anchor Max ise sağ üst köşeyi temsil eder.

Örnek 1:

  • Anchor Min: (0, 0)
  • Anchor Max: (1, 1)

Bu ayarlar, elemanın ebeveyninin tamamını kaplamasını sağlar. Eleman, ebeveyninin boyutlarına göre dinamik olarak yeniden boyutlanır.

Örnek 2:

  • Anchor Min: (0.5, 0.5)
  • Anchor Max: (0.5, 0.5)

Bu durumda, elemanın anchor noktası ebeveyninin tam ortasına ayarlanır. Elemanın boyutu sabit kalır ve ebeveyninin ortasında konumlanır.

4. Pivot (Dönüş Noktası):

Pivot, elemanın döndüğü veya ölçeklendiği merkezi noktayı belirler. Bu da normalleştirilmiş bir değerdir ve (0.5, 0.5) değeri, elemanın merkezini ifade eder.

Örnek 1:

  • Pivot: (0, 0)

Bu ayar, pivot noktasını elemanın sol alt köşesine yerleştirir. Dönme veya ölçekleme işlemleri bu noktaya göre yapılır.

Örnek 2:

  • Pivot: (1, 1)

Bu durumda, pivot noktası elemanın sağ üst köşesine ayarlanır. Dönme veya ölçekleme işlemleri bu köşeye göre gerçekleşir.

5. Rotation (Dönüş):

Rotation, elemanın saat yönünde derece cinsinden döndürülmesini sağlar.

Örnek 1:

  • Rotation: 45°

Eleman, saat yönünde 45 derece döndürülür.

Örnek 2:

  • Rotation: -90°

Bu ayar, elemanın saat yönünün tersine 90 derece döndürülmesini sağlar.

6. Scale (Ölçek):

Scale, elemanın X, Y ve Z eksenlerinde ne kadar büyütüleceğini veya küçültüleceğini belirler.

Örnek 1:

  • Scale X: 1.5
  • Scale Y: 1.5
  • Scale Z: 1

Eleman, X ve Y eksenlerinde %150 oranında büyütülür; Z ekseni ise değişmez.

Örnek 2:

  • Scale X: 0.5
  • Scale Y: 2
  • Scale Z: 1

Bu durumda, eleman X ekseninde %50 küçültülür, Y ekseninde ise %200 büyütülür; Z ekseni yine değişmez.

Özet:

  • Pos X ve Pos Y: Elemanın pivot noktasının, anchor noktalarına göre olan yatay ve dikey offset’ini belirler.
  • Width ve Height: Elemanın genişlik ve yüksekliğini piksel cinsinden tanımlar.
  • Anchors: Elemanın ebeveynine göre nasıl konumlanacağını ve boyutlanacağını belirler.
  • Pivot: Elemanın döndüğü veya ölçeklendiği merkezi noktayı tanımlar.
  • Rotation: Elemanın saat yönünde derece cinsinden döndürülmesini sağlar.
  • Scale: Elemanın X, Y ve Z eksenlerinde ne kadar büyütüleceğini veya küçültüleceğini belirler.

Bu özelliklerin doğru kullanımı, UI elemanlarınızın farklı ekran boyutlarına ve çözünürlüklerine uyum sağlamasında kritik bir rol oynar.

Disk Oyununda Alan ve Duvarlar Hakkında Ayrıntılı Anlatım

Mobil bir disk kaydırma oyununda disklerin kayacağı alanları oluşturmak için kullanılabilecek farklı türde objeler ve her bir objenin avantajları ve dezavantajları şu şekilde özetlenebilir:

Obje TürüÖzelliklerAvantajlarDezavantajlarZorluk DerecesiPerformans
2D Sprite (Texture)Sprite Renderer kullanılır, Collider eklenir (Box veya Polygon Collider 2D).Kolay ve hafif, yüksek performanslı, Android cihazlarda optimizeSadece 2D görünüm sağlar, 3D derinlik ve doku hissiyatı eksikKolayÇok yüksek
3D PlaneBasit bir plane objesi oluşturulup, Material eklenir, Collider (Box veya Mesh Collider) eklenir.3D derinlik hissi sağlar, yüzeye doku eklenebilir3D plane bazı düşük performanslı cihazlarda zorlayıcı olabilirOrtaYüksek
3D Mesh (Arena veya Custom Field)Kendi modellemesi yapılmış 3D mesh kullanılır, Collider eklenir (genellikle Mesh Collider)Gerçekçi ve özelleştirilebilir bir görünüm sağlarÇok detaylı modelleme performansı düşürebilir, karmaşık collider performansı etkileyebilirZorOrta
Tilemap (2D için)Tilemap Renderer ve Tilemap Collider kullanılarak bir alan oluşturulurHafif, yüksek performans, geniş alanlarda kolay kullanım2D ile sınırlıdır, detaylı yüzeyler için zorluk çıkarırKolayÇok yüksek
Procedural Generated SurfaceKod ile procedural olarak üretilmiş alan, örneğin farklı kayma yüzeyleri oluşturulabilirÇok esnek ve özelleştirilebilir, oyun içi değişimlere uyum sağlarKarmaşık programlama gerektirir, optimizasyon zorlukları olabilirÇok ZorDeğişken
3D Terrain (Unity Terrain)Unity’nin yerleşik Terrain sistemi ile oluşturulmuş yüzeyBüyük alanlar için uygundur, kolayca detaylandırılabilirKüçük alanlar için aşırıya kaçabilir, daha fazla RAM ve CPU kullanırZorDüşük-orta
Physics Material 2D/3D ile Box veya Capsule Collider (Düz Satıhlar için)Basit collider’lara physics material ile sürtünme ve kayma özellikleri eklenirHafif ve hızlı, kayma etkisi kolaylıkla ayarlanabilirBasit yüzeylerde sınırlı seçenek sunar, özel görseller gerektirebilirKolayÇok yüksek
Bumpy Surface (3D Modellenmiş Düzensiz Yüzeyler)3D modelleme ile hazırlanmış engebeli veya özel yüzeylerÖzel his ve farklı kayma etkileri yaratırPerformans gereksinimi yüksek olabilirZorOrta-Düşük

Tavsiyelerim:

  • 2D Sprite veya 3D Plane kullanımı başlangıç seviyesinde veya basit oyunlar için idealdir. Performans dostudur ve mobil cihazlarda yüksek FPS sağlar.
  • 3D Mesh veya Terrain kullanımı daha gelişmiş oyunlarda tercih edilebilir, ancak performans dikkatlice optimize edilmelidir.
  • Tilemap sistemi 2D alanlarda geniş haritalar için idealdir.
  • Physics Material kullanarak kayma ve sürtünme ayarları yapılabilir, böylece kayma etkisini basitçe kontrol edilebilir.

Genel Tavsiye: Eğer oyununuz basit bir disk kaydırma oyunuysa ve performans çok önemliyse 2D Sprite veya 3D Plane ile Collider eklemeyi önerilir. Bu tür oyunlar için Physics Material kullanarak kayma etkisini düzenlemek kolaylık sağlar. Ancak, daha özelleşmiş ve gerçekçi yüzeyler isteniliyorsa, 3D Mesh veya özel Procedural Surface tercih edilebilir.

Disk kaydırma oyunu için duvarları oluşturmak üzere kullanılabilecek çeşitli objeler ve özellikleri aşağıdaki gibi olabilir:

Obje TürüÖzelliklerAvantajlarDezavantajlarZorluk DerecesiPerformans
2D Sprite (Texture)Sprite Renderer kullanılır, Collider eklenir (Box Collider 2D)Kolay kurulum, yüksek performansSadece 2D görünüm sağlar, 3D derinlik eksikKolayÇok yüksek
3D Cube3D Cube objesi kullanılır, Box Collider eklenir3D derinlik hissi sağlar, doku ve materyal uygulanabilirKarmaşık doku kullanımlarında performansı düşürebilirOrtaYüksek
Tilemap (2D için)Tilemap Collider ile birlikte Tilemap Renderer kullanılırKolay kurulum ve geniş alanlarda kullanım2D ile sınırlıdır, görsel açıdan basitKolayÇok yüksek
Procedural Generated WallKodla procedural olarak duvar yaratılır, özel collider’lar eklenirEsnek ve özelleştirilebilir, oyun içi değişimlere kolayca uyum sağlarKarmaşık programlama gerektirir, optimizasyon zor olabilirZorDeğişken
3D Custom Wall MeshÖzel modelleme yapılmış bir mesh ve Mesh Collider kullanılırGerçekçi ve özel duvar tasarımları için idealdirDetaylı modeller performansı düşürebilir, optimizasyon gerekebilirZorOrta
Physics Material 2D/3D ile Basit ColliderBox veya Capsule Collider ile Physics Material eklenirBasit ve hızlı kurulum, kayma ve çarpma etkilerini kolayca kontrol edebilmeSınırlı görsellik sağlarKolayÇok yüksek
Invisible Collider (Görünmez Bariyer)Herhangi bir görünür obje olmadan yalnızca collider kullanılırKolay ve hafif, çarpma noktalarını belirginleştirirGörsel bir bariyer olmadığı için anlaşılması zor olabilirKolayÇok yüksek
3D Terrain veya Detaylı ModellemeTerrain kenarları veya detaylı modelleme ile özel duvar yüzeyleri oluşturulurGerçekçi ve özel yüzeyler için uygundurKarmaşık yüzeylerde performans kaybı yaşanabilir, optimizasyon zor olabilirZorOrta-Düşük

Tavsiyelerim:

  • 2D Sprite veya 3D Cube kullanımı basit ve yüksek performanslı duvarlar oluşturmak için en uygun seçenektir. Bu tür oyunlarda duvarların işlevi çoğunlukla çarpışmaları sınırlamak olduğundan, fazla detay gerekmiyorsa bu yöntem idealdir.
  • Invisible Collider kullanarak duvarları görünmez hale getirmek, oyun tasarımına bağlı olarak minimalist ve yüksek performanslı bir seçenek olabilir.
  • Physics Material kullanarak duvarlara çarpma anındaki kayma veya frenleme efektlerini ayarlayabilirsiniz. Diskin duvarlardan sekme hissiyatını kontrol etme açısından kullanışlıdır.
  • Custom 3D Wall Mesh veya Procedural Generated Wall daha gelişmiş projeler için uygundur ve özel görsellik katabilir; ancak optimizasyon gerektirebilir.

Genel Tavsiye: Mobil cihazlarda yüksek performans sağlamak için 2D Sprite veya 3D Cube ile Box Collider kullanımını önerilir. Eğer daha esnek bir duvar etkisi oluşturmak istenilirse, Physics Material ekleyerek kayma veya sekme gibi çarpışma özelliklerini düzenlenebilir.

Mobilde farklı ekran çözünürlüklerinde veya ekran oranlarında kayma veya şekil bozukluklarını önlemek için Unity 2022 sürümünde dikkat edilmesi gereken temel ayarlar ve menü seçenekleri :

1. Alan ve Duvarlarda Dikkat Edilmesi Gerekenler

  • Collider Ayarları: Duvar ve alanlar için kullandığınız Collider’ların doğru hizalandığından emin olun. Bu, çarpışmaların doğru şekilde hesaplanmasını sağlar. Box Collider 2D/3D gibi basit collider’lar, performans açısından daha etkilidir.
  • Physics Material Kullanımı: Diskin çarpma anında yavaşlaması veya sekmesi gibi efektleri kontrol etmek için duvarlara Physics Material ekleyin. Bu, duvarın sürtünme (friction) ve esneklik (bounciness) değerlerini belirleyerek daha gerçekçi bir çarpışma sağlar.
  • Transform Ayarları: Alanın ve duvarların pozisyon, dönüş ve ölçek ayarlarını dikkatlice kontrol edin. Mobilde pozisyonların kaymasını önlemek için ekranın her iki ucuna eşit oranda hizalayın.
  • Yerleşim Düzeni: Alanı ve duvarları oyun ekranının sınırlarına uygun şekilde konumlandırın ve ekranın genişliği veya yüksekliği değiştiğinde ekranın dışına taşmamasını sağlayın.

2. Çözünürlük ve Ekran Oranı Uyumluluğu Ayarları

Farklı çözünürlüklerde ekran kaymaları ve şekil bozuklukları yaşamamak için Unity’de aşağıdaki ayarları yapabilirsiniz:

A. Canvas ve UI Elemanları Ayarları (UI için)

UI elemanlarının ekran boyutlarına göre otomatik olarak ayarlanması için Canvas ayarlarını yapılandırın:

  • Canvas Ayarı: Canvas’ı seçin ve Render Mode olarak “Screen Space – Camera” veya “Screen Space – Overlay” seçeneklerini kullanın.
  • Canvas Scaler: Canvas nesnesinde Canvas Scaler bileşenini ekleyin veya zaten varsa ayarlarını şu şekilde yapılandırın:
    • UI Scale Mode: Scale with Screen Size olarak ayarlayın. Bu, ekran boyutlarına göre ölçeklenmesini sağlar.
    • Reference Resolution: Çalışmayı hedeflediğiniz temel çözünürlüğü girin, örneğin 1080×1920.
    • Screen Match Mode: Match Width or Height seçeneğini kullanarak ekranın genişlik veya yüksekliğine göre ayarlama yapabilirsiniz. Match kaydırma çubuğunu 0 (genişlik) ile 1 (yükseklik) arasında bir değere ayarlayarak dengeyi sağlayın.

B. Camera Ayarları (Oyun Sahnesi için)

Kamera ayarlarını doğru yaparak, farklı ekran oranlarında alanın veya duvarların ekrandan taşmasını engelleyebilirsiniz.

  • Ana Kamera (Main Camera): Kamera türünü Orthographic olarak ayarlayın. Bu, 2D oyunlar için uygundur ve ekran oranında değişikliklerde sahnenin görünümünü korur.
  • Ortographic Size Ayarı: Ekranın yüksekliğine göre ayarlanan Orthographic Size değeri, ekranın farklı boyutlarına göre uyum sağlar.
  • Viewport Rect Ayarları: Eğer farklı bir konumlandırma yapmak isterseniz, Viewport Rect değerlerini kullanarak kamerayı ayarlayabilirsiniz. Özellikle W ve H değerlerini kullanarak farklı çözünürlüklerde ekrana tam oturmasını sağlayabilirsiniz.
  • Safe Area (Güvenli Alan) Kullanımı: Farklı telefon modellerinde ekranın kenarlarındaki boşluklar için Safe Area‘yı kullanarak önemli oyun elementlerinin bu alanlara taşmamasını sağlayabilirsiniz.

C. Aspect Ratio ve Ekran Uyumluluğu İçin Proje Ayarları

  • Edit > Project Settings > Player > Resolution and Presentation menüsünden ayarları düzenleyin.
    • Default Orientation: “Portrait” veya “Landscape” modunu seçin. Hangi modda çalışacaksanız, bunu sabitlemek önemlidir.
    • Render Outside Safe Area: Bu ayar, bazı cihazların (özellikle çentikli telefonların) güvenli alan dışında görüntü vermesini engeller.
    • Supported Aspect Ratios: Buradan desteklemek istediğiniz ekran oranlarını belirleyebilirsiniz. Örneğin, “16:9”, “18:9” veya “19.5:9” gibi yaygın oranları seçebilirsiniz.
    • Use Screen-Space Canvas: UI elemanlarının tüm ekran boyutlarına uyum sağlaması için Screen-Space Canvas kullanmak faydalı olur.

D. Screen.SetResolution Kullanımı

Bazı özel çözünürlük ayarları gerekirse, Screen.SetResolution komutunu kullanarak belirli çözünürlüklere uyum sağlayabilirsiniz. Örneğin, oyunun başında bu komutu kullanarak çözünürlüğü sabitleyebilir veya cihazın desteklediği en uygun çözünürlüğü seçebilirsiniz.

void Start() {
    Screen.SetResolution(1080, 1920, true); // Tam ekran 1080x1920 çözünürlükte çalıştırır.
}


E. Universal Render Pipeline (URP) Kullanımı

Unity’nin Universal Render Pipeline’ını (URP) kullanıyorsanız, mobil cihazlar için daha yüksek performans sağlayan Dynamic Resolution gibi özellikleri etkinleştirebilirsiniz. URP ayarlarını kullanarak, çözünürlükle ilgili performansı optimize etmek mümkündür:

  • Rendering > Universal Render Pipeline Asset içinde, Dynamic Resolution‘ı açarak, çözünürlük ayarlamaları ile performansı optimize edebilirsiniz.
  • Anti-Aliasing: Özellikle mobil cihazlarda düşük çözünürlüklerde görüntü kalitesini artırmak için Anti-Aliasing ayarlarını kontrol edebilirsiniz.

3. Özet

  • Canvas Scaler ile ekran boyutlarına göre UI öğelerinin otomatik ölçeklenmesini sağlayın.
  • Ana Kamera’yı Orthographic olarak ayarlayıp Viewport Rect ve Orthographic Size ile farklı ekran oranlarına uyum sağlayın.
  • Edit > Project Settings > Player menüsünden Aspect Ratio ve Render Outside Safe Area gibi uyumluluk ayarlarını yapın.
  • Dynamic Resolution ve Anti-Aliasing ayarları ile performansı artırın.

Tavsiye

Eğer amaç basit bir 2D oyun ise, Orthographic Kamera ve Canvas Scaler kullanarak farklı çözünürlük ve ekran oranlarına uyum sağlamak en mantıklısıdır. Hem kolay hem de yüksek performanslıdır.

Fakat oyun daha karmaşık hale geliyorsa, Universal Render Pipeline (URP) ile ek optimizasyon seçenekleri değerlendirebilir.

Unity 3D Projeleri GitHub’a Yüklenir?

Ön Gereksinimler

  1. Git’in Kurulması: Git’i bilgisayarınıza kurmanız gerekiyor. Git’i resmi web sitesinden işletim sisteminize uygun olarak indirebilirsiniz.
  2. GitHub Hesabı: Bir GitHub hesabınızın olması gerekiyor. Yoksa GitHub üzerinden ücretsiz bir hesap oluşturabilirsiniz.

Adım Adım Projenizi GitHub’a Yükleme

1. Git Deposu Oluşturma

A. Proje Klasörünüzü Hazırlayın

  • Unity projenizin bulunduğu klasöre gidin. Bu klasör genellikle proje ismiyle adlandırılmıştır ve içinde Assets, Library, ProjectSettings gibi klasörler bulunur.

B. Git Bash veya Komut İstemi’ni Açın

  • Windows kullanıyorsanız, proje klasörünüzün içine girin, boş bir alana Shift + Sağ Tık yapın ve Git Bash Here seçeneğine tıklayın.
  • Mac veya Linux kullanıyorsanız, Terminal’i açıp proje klasörüne cd /path/to/your/project komutuyla gidin.

2. .gitignore Dosyası Oluşturma

Unity projeleri, bazı büyük ve gereksiz dosyalar içerir. Bu dosyaları Git’e dahil etmemek için bir .gitignore dosyası oluşturmalısınız.

A. .gitignore Dosyasını Oluşturun

  • Proje klasörünüzün içinde yeni bir metin dosyası oluşturun ve adını .gitignore olarak ayarlayın.
    • Windows’ta yeni bir metin belgesi oluşturup adını .gitignore yapabilirsiniz (dosya uzantısını .txt olmamasına dikkat edin).
    • Mac veya Linux’ta Terminal’de touch .gitignore komutunu kullanabilirsiniz.

B. .gitignore Dosyasının İçeriğini Ayarlayın

  • .gitignore dosyasını bir metin editörüyle açın (örneğin, Notepad, Notepad++, Visual Studio Code).
  • Aşağıdaki içeriği dosyaya yapıştırın ve kaydedin:
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Uu]serSettings/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
.DS_Store
.idea/
.vs/
.vscode/
  • Bu dosya, Git’in bu klasör ve dosyaları izlemesini engeller. Böylece gereksiz veya büyük dosyalar depoya yüklenmez.

3. Git Deposu Başlatma

A. Git Deposu Oluşturun

  • Terminal veya Git Bash’te aşağıdaki komutu yazın:
git init
  • Bu komut, proje klasörünüzde yeni bir Git deposu oluşturur.

B. Tüm Dosyaları Git’e Ekleme

  • Aşağıdaki komutu kullanarak tüm dosyaları ekleyin
git add .
  • Bu komut, .gitignore dosyasında belirtilmeyen tüm dosyaları ekler.

C. İlk Commit’i Yapma

  • Değişiklikleri commit etmek için aşağıdaki komutu kullanın:
git commit -m "İlk commit"
  • Bu komut, dosyaları yerel depoya kaydeder.

4. GitHub’da Yeni Bir Depo Oluşturma

A. GitHub’da Yeni Depo Oluşturun

  • GitHub hesabınıza giriş yapın.
  • Sağ üst köşedeki + işaretine tıklayın ve New repository seçeneğini seçin.
  • Depo ismi, açıklama gibi bilgileri girin ve Create repository butonuna tıklayın.

B. Uzaktan Depoyu Yerel Depoyla Bağlama

  • GitHub, yeni depo oluşturduktan sonra size bazı komutlar gösterecektir. Aşağıdaki komutu kullanarak uzak depoyu yerel depoya ekleyin:
git remote add origin https://github.com/kullanıcı_adınız/depo_adınız.git
  • kullanıcı_adınız ve depo_adınız kısımlarını kendi bilgilerinize göre düzenleyin.

C. Ana Branşı Ayarlama

  • Ana branşı main olarak ayarlamak için:
git branch -M main

5. Projeyi GitHub’a Gönderme

  • Aşağıdaki komutu kullanarak dosyaları GitHub’a yükleyin:
git push -u origin main
  • Komut çalıştığında, sizden GitHub kullanıcı adınızı ve şifrenizi girmeniz istenebilir. Eğer iki faktörlü kimlik doğrulama kullanıyorsanız, bir Personal Access Token oluşturmanız gerekebilir.

6. Kodlarınızı İnceleme

  • Kodlarınız artık GitHub’da yüklü olacak.
  • GitHub üzerinden kodlarınızı görüntüleyebilir ve paylaşabilirsiniz.
  • Kodlarınızın linkini paylaşırsanız, ben de kodları inceleyebilir ve hata kontrolü yapabilirim.

Notlar ve Öneriler

  • Dosya Boyutları: Unity projeleri büyük dosyalar içerebilir. GitHub’da dosya boyutu sınırlaması vardır (100 MB). Eğer projede büyük dosyalar varsa, Git Large File Storage (LFS) kullanmanız gerekebilir.
  • Sürüm Kontrolü: Projenizi GitHub’a yüklemek, sürüm kontrolü yapmanıza ve kodlarınızı güvende tutmanıza yardımcı olur.

Ek Bilgi: Git ve GitHub Kullanımı

  • Git Nedir?: Git, dosyalarınızın sürümlerini takip eden bir versiyon kontrol sistemidir.
  • GitHub Nedir?: GitHub, Git depolarınızı çevrimiçi olarak barındırabileceğiniz bir platformdur.
  • Komutları Nereye Yazacaksınız?: Git komutlarını, proje klasörünüzde Terminal (Mac/Linux) veya Git Bash (Windows) üzerinden çalıştırabilirsiniz.

Olası Sorunlar ve Çözümleri 1

  • Git Kurulu Değilse: Git yüklü değilse, komutları çalıştıramazsınız. Git’i buradan indirip kurun.
  • Dosya İsimleri ve Uzantıları: .gitignore dosyasının uzantısı olmamalıdır. Eğer .gitignore.txt gibi bir isimle kaydederseniz, çalışmaz.
  • Kimlik Doğrulama Sorunları: GitHub’a push yaparken kullanıcı adı ve şifrenizle ilgili sorun yaşarsanız, Personal Access Token kullanmanız gerekebilir. Bunu GitHub ayarlarından oluşturabilirsiniz.

Bu hata, dosya yolunun uzun olmasından kaynaklanıyor. Özellikle Windows işletim sisteminde, dosya yolu uzunluk sınırını aşıyorsa bu hatayı alabilirsiniz.

Çözüm:

  1. Git Ayarını Değiştirme: Windows’ta uzun dosya yollarını desteklemek için aşağıdaki komutu çalıştırın:
git config --system core.longpaths true
  1. Alternatif Çözüm: .gitignore dosyasına Library klasörünü ekleyerek bu klasördeki dosyaları Git’e eklemeyi engelleyebilirsiniz. Aşağıdaki adımları izleyin:
    • .gitignore dosyasını açın ve Library/ satırını ekleyin.
    • Bu adım, Library klasöründeki dosyaları Git’in izlemesini engeller ve daha sonra commit işlemlerinde bu hatayı önler.
git comit -m "ilk commit"

Burada commit yerine comit yazmışsınız. Doğru komut şu şekilde olmalı:

git commit -m "ilk commit"

Bu hata, “main” dalının henüz oluşturulmamış olması nedeniyle ortaya çıkar. Bu durumu çözmek için önce bir commit yapmalısınız.

Çözüm:

  1. commit İşlemini Doğru Şekilde Yapın:
    • Eğer commit yapmadıysanız, aşağıdaki komutları kullanarak dosyaları ekleyin ve commit yapın:
git add .
git commit -m "İlk commit"

Ana Dalı Güncelleyin:

  • Eğer git branch -M main komutunu uyguladıysanız ve yine de bu hatayı alıyorsanız, main dalının oluştuğundan emin olun.

Push İşlemini Tekrar Deneyin:

  • Başarılı bir şekilde commit yaptıktan sonra aşağıdaki komutla dosyaları GitHub’a gönderin:
git push -u origin main

Genel Özet:

  1. core.longpaths ayarını etkinleştirin.
  2. .gitignore dosyasına Library/ ekleyin.
  3. Commit işlemini doğru bir şekilde yapın.
  4. git push -u origin main komutuyla gönderin.

Bu adımları izleyerek tüm hataları çözebilir ve projeyi başarılı şekilde GitHub’a yükleyebilirsiniz.

Bu hata, gitconfig dosyasını değiştirmek için yönetici iznine ihtiyaç duyduğunuzu gösteriyor. core.longpaths ayarını etkinleştirebilmek için komutu yönetici izinleriyle çalıştırmanız gerekiyor.

Çözüm: Yönetici İzniyle Git Bash Çalıştırma

  1. Git Bash’ı Yönetici Olarak Açın:
    • Git Bash simgesine sağ tıklayın.
    • “Run as Administrator” (Yönetici olarak çalıştır) seçeneğini tıklayın.
  2. Komutu Tekrar Çalıştırın:
    • Git Bash yönetici olarak açıldıktan sonra, şu komutu tekrar girin:
git config --system core.longpaths true

Bu komut, longpaths ayarını etkinleştirir ve uzun dosya yoluyla ilgili hatayı önlemeye yardımcı olur.

Bu hata, .git/index.lock dosyasının mevcut olduğunu ve Git işleminin devam etmesini engellediğini gösterir. Bu durum genellikle başka bir Git işlemi yarım kaldığında veya kilitlendiğinde oluşur. Aşağıdaki adımları takip ederek bu sorunu çözebilirsiniz:

Çözüm Adımları

  1. Kilitleme Dosyasını Manuel Olarak Kaldırın:
    • Proje dizininize gidin ve index.lock dosyasını bulun. Bu dosya C:/Users/NUR/.git/ klasöründe yer alır.
    • .git/index.lock dosyasını silin.
    Windows’ta bu dosyayı bulmak için:
    • Proje klasörünü açın.
    • Gizli dosya ve klasörleri gösterme seçeneğini etkinleştirin (Windows Gezgini > Görünüm > Gizli öğeler).
    • .git klasörüne girin ve index.lock dosyasını silin.
  2. Git İşlemini Tekrar Deneyin:
    • Dosyayı sildikten sonra, Git komutlarını tekrar çalıştırabilirsiniz:
git add .
git commit -m "İlk commit"

Bu işlem, kilitleme dosyasını kaldırarak Git işlemlerinin sorunsuz devam etmesini sağlayacaktır. Eğer bu sorun devam ederse, bilgisayarınızı yeniden başlatmayı da deneyebilirsiniz, çünkü bazı durumlarda arka planda çalışan Git işlemleri yeniden başlatılarak kapanır.