Paylaşılan Ayarlar
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 21 / 50.
Bir zorluk ayarı tüm düşmanları aynı anda değiştirdiğinden, hepsinin başvurduğu tek bir varlığa uygundur. Her düşman her karede varlığın hızını okur ve menüdeki Hard düğmesi aynı varlığa yazar:
[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
public float enemySpeed = 2f;
}public class Enemy : MonoBehaviour
{
public Difficulty difficulty;
public Transform player;
void Update()
{
float step = difficulty.enemySpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, player.position, step);
}
}// DifficultyMenu.cs, Hard düğmesinin onClick olayına bağlandı
public Difficulty difficulty;
public void SetHard()
{
difficulty.enemySpeed = 4f;
}Düşmanların alanları ve menünün alanı aynı varlığı tutar; bu nedenle SetHard() çağrısından sonra, alanında bu varlık bulunan bir prefab'dan daha sonra oluşturulan düşmanlar da dahil olmak üzere her düşmanın bir sonraki Update çağrısı 4 değerini okur. Bu, her düşmanın hareket ederken difficulty.enemySpeed değerini okuması sayesinde çalışır. Start içinde bu değeri kendi alanına kopyalayan bir düşman 2 hızında hareket etmeye devam eder.
Oyun sırasında yapılan bir değişikliğin nereye kaydedileceği, oyunun nerede çalıştığına bağlıdır. Derlenmiş bir oyun, her başladığında varlıklarını derleme sırasında oldukları hâliyle yükler; bu nedenle oyuncunun seçtiği Hard, sonraki oyunda kaybolur: seçimi korumak için PlayerPrefs ile kaydedip oyun başladığında tekrar varlığa yazın. Editor'da projenizdeki varlık, oyunun değiştirdiği varlıktır ve Stop'a bastıktan sonra da değişiklik kalır; sahne nesneleri ise Inspector değerlerine geri döner. Bir sonraki Play Hard ayarıyla başlar ve siz eski hâline getirene kadar varlıkta 4 değeri kalır.
Görev
OrtaÜç yelkenli, rüzgârın ittiği koyu geçiyor ve Yukarı ve Aşağı okları rüzgârı 0 ile 5 arasında artırıp azaltıyor. Ancak her teknenin kendi windStrength alanı var ve WindVane yalnızca kendi strength değerini değiştiriyor; bu yüzden oklar sudaki hiçbir şeyi değiştirmiyor. Bunun yerine tek bir varlığı paylaşın. WindSettings.cs hazır ve projenin Breeze varlığı (strength 2), her teknenin ve WindVane'in wind alanında bulunuyor.
Sailboat:windStrengthyerine WindSettings türünde birwindgenel alanı kullanın vewind.strengthhızında yelken açın.WindVane:strengthyerinewindadlı bir genel alan kullanın ve oklarınwind.strengthdeğerini değiştirmesini sağlayın; böylece tüm tekneler bu değişikliği hisseder. Metinde bu değerWind: 3olarak gösterilir.- Bir derleme her başlatıldığında Breeze varlığını yeniden yükler; bu da oyuncunun rüzgâr değerini kaybettirir.
wind.strengthdeğerini her değiştiğinde PlayerPrefs anahtarıWindaltında kaydedin ve Start içinde kaydedilen değeri varlığa geri yükleyin. Yeni bir oyuncu varlığın 2 değerini kullanır.
Play'e basın, rüzgârı değiştirin, ardından Stop'a ve tekrar Play'e basın, sonra Check'e basın.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class WindVane : MonoBehaviour
{
public TMP_Text windText;
public float strength = 2f;
void Start()
{
Show();
}
void Update()
{
if (Keyboard.current.upArrowKey.wasPressedThisFrame)
{
strength = Mathf.Min(strength + 1f, 5f);
Show();
}
if (Keyboard.current.downArrowKey.wasPressedThisFrame)
{
strength = Mathf.Max(strength - 1f, 0f);
Show();
}
}
void Show()
{
windText.text = "Wind: " + strength;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest