Unity'de sahneler arası geçişler için hangi olayları kullanmanız gerektiğini öğrenin En iyi uygulamaları keşfedin ve sorunsuz bir oyun deneyimi oluşturun Detaylar ve ipuçları için buraya tıklayın!

Unity, oyun geliştiricileri tarafından sıklıkla kullanılan en popüler oyun motorlarından biridir. Bu platformda, sahnelerin geçişleri için farklı eventlerin kullanımı önemlidir. Doğru eventler kullanıldığında, oyunun akışı daha iyi yönetilir ve oyun daha akıcı hale gelir.
Bir sahne yüklemek için en temel event SceneManager.LoadScene()’dir. Bu event sayesinde, oyun sahneleri yüklenebilir. LoadSceneMode özelliği, “Single” ve “Additive” modlarıyla birlikte kullanılabilir. Single modu, var olan sahneyi kapatır ve yüklenen sahneyi açar. Additive modu ise var olan sahneye eklenerek birden fazla sahnenin birbirine bağlanmasını sağlar.
Bazı durumlarda, yükleme işlemi daha uzun sürebilir. Bu nedenle, yükleme ekranı oluşturmak ve yükleme işlemini takip etmek için AsyncOperation kullanılabilir. AsyncOperation, yükleme işleminin bir parçasıdır ve yükleme işlemi tamamlandığında bir event tetikler.
SceneManager.LoadSceneAsync() eventi, yükleme ekranı için daha fazla seçenek sunar. SceneManager.LoadScene() eventiyle benzer şekilde, Single ve Additive modlarıyla birlikte kullanılabilir. Ancak, AsyncOperation kullanarak yükleme işlemini daha iyi kontrol edebilir ve takip edebilirsiniz.
SceneManager.LoadSceneAsync() eventi, oyunun sorunsuz bir şekilde ilerlemesi için oldukça önemlidir. Bu eventin en önemli özelliği op.allowSceneActivation’dir. Bu özellik, yükleme işlemi tamamlandığında sahnenin otomatik olarak yüklenmesini sağlar.
Diğer eventler arasında SceneManager.LoadScene() gibi daha az kullanılan eventler de vardır. Bu eventler arasında, oyunun akışını yönetmek için IEnumerator (Coroutine) ile birlikte kullanılan SceneManager.LoadSceneAsync(), birden fazla sahnenin birleştirilmesini sağlayan SceneManager.MergeScenes() ve sahne yüklemelerinden kaynaklanan bellek sorunlarını çözmek için kullanılan SceneManager.UnloadSceneAsync() eventleri bulunur.
Sahne Geçişleri ve Eventler
Sahne geçişleri, bir oyun veya uygulama geliştirirken oldukça önemli bir konudur. Bu geçişleri yönetmek için Unity'deki eventler oldukça kullanışlıdır. Sahne geçişleri için kullanabileceğiniz farklı eventler vardır ve bu eventleri nasıl kullanacağınızı öğrenebilirsiniz.
Bir sahneyi yüklemek için en temel event, SceneManager.LoadScene() eventidir. Bu event, bir sahne yüklemek için kullanılır. LoadSceneMode parametresi kullanılarak "Single" veya "Additive" modlarından biri seçilebilir. "Single" modu, yalnızca yeni sahneyi yüklerken, "Additive" modu, yeni sahneyi mevcut sahneyle birleştirecektir.
Bir diğer sahne yükleme eventi ise SceneManager.LoadSceneAsync() eventidir. AsyncOperation öğesi kullanarak yükleme ekranı oluşturma ve yüklemeyi takip etme için bu event kullanılabilir. Bu eventin kullanımı, SceneManager.LoadScene() eventine göre daha fazla seçenek sunar ve yükleme sürecini daha iyi kontrol etmenizi sağlar.
Sahne geçişlerinin yönetimi için ise IEnumerator (Coroutine) kullanımı gereklidir. Ayrıca, birçok sahne yüklemesinden kaynaklanan bellek sorunlarını çözmek için SceneManager.UnloadSceneAsync() eventi de kullanılabilir. Sahne geçişleri için farklı eventlerin nasıl kullanılacağını öğrenmek, Unity projesinden en iyi sonuçları almanın anahtarıdır.
SceneManager.LoadScene()
Unity projesinde bir senaryo oluşturduktan sonra, sahneler arasında geçiş yapmanız gerekir. Bunun için, SceneManager.LoadScene() eventini kullanmanız gerekmektedir. Bu event, oyuncu sahneyi yüklemek istediğinde, belirli bir sahneyi yükleyen ve aktive eden temel eventtir.
SceneManager.LoadScene()’u kullanmak oldukça basittir. Sahneyi yüklemek için sahne adını veya sahnenin yükleneceği index numarasını belirlemeniz gerekmektedir. Sahne adı kullanarak yükleme yapmak daha iyi bir tercih olacaktır. Ayrıca, Sahne yükleme modunuzu (Single veya Additive), LoadSceneMode enumunu kullanarak seçebilirsiniz. Single mod, yeni bir sahne yükleyecektir ve eski sahneyi tamamen kapatırken, Additive mod, yeni sahneyi eski sahneye ekler.
Yöntem | Açıklama |
---|---|
LoadScene(sceneName) | Sahne ismine göre sahne yükler ve aktive eder. |
LoadScene(sceneBuildIndex) | Sahne index’i kullanarak sahne yükler ve aktive eder. |
- SceneManager.LoadScene() eventi, sahne geçişlerini yönetmek için oldukça iyi bir seçenektir.
- Başka bir event kullanmanız gerekmeksizin sahne değiştirebilirsiniz.
- Sahne yükleme modu belirleyerek, sahneyi açık veya kapalı olarak yükleyebilirsiniz.
LoadSceneMode
LoadSceneMode: Sahne geçişlerinde kullanılan LoadSceneMode, sahne yüklemeyi Unity'de yönetmek için kullanılan bir eventtir. LoadSceneMode'un iki farklı modu vardır: "Single" ve "Additive". "Single" modu, yalnızca bir sahneyi yüklemeye olanak tanırken, "Additive" modu birden fazla sahnenin yüklenmesine izin verir.
"Single" modu, bir sahneyi yüklerken, önceki sahneden tamamen yeni bir sahne yükler. Bu mod, herhangi bir bellek sorununa neden olmadan basit bir sahne geçişi sağlayan en temel yöntemdir. Özellikle oyunlarda, seviyenin sonunda bir sonraki seviyeye geçerken kullanışlıdır.
"Additive" modu ise, yüklenen sahnelere ek olarak, önceki sahnelerin tamamını bellekte tutar. Bu mod, oyunda büyük açık dünya haritaları için ve birden fazla sahnenin bir arada kullanılması gereken durumlarda kullanışlıdır. "Additive" modu kullanırken, kamera geçişleri, oyuncuya eşya toplama gibi işlemler yaparken diğer sahnelerin yüklenmesine izin verilmesi için SceneManager.LoadSceneAsync() kullanılır.
Bu modlar, sahne yüklemelerinin daha iyi kontrol edilmesini sağlar. Örneğin, birden fazla sahne eklendikçe, bu sahneler için yüklenme işlemi yapılmadan oyun dünyasında kontrol sağlayabilir ve daha etkileyici yüklemeler oluşturulabilir. Ayrıca, SceneManager tarafından sunulan bir diğer avantaj da "Asenkron" sahne yükleme seçeneği, sahne yükleme ekranlarının daha verimli bir şekilde kullanılabilmesini sağlayarak, oyuncuya uygun bir oynatma deneyimi sunacaktır.
AsyncOperation
AsyncOperation kullanarak sahne yükleme işlemini daha etkili bir hale getirmek ve yükleme ekranı oluşturmak mümkündür.Öncelikle bu işlem için SceneManager.LoadSceneAsync() metodu kullanılır. Bu metodun geri dönüş değeri AsyncOperation’dır.
Bu değişkenin “isDone” özelliği ile yüklemenin tamamlanıp tamamlanmadığı kontrol edilebilir. Ayrıca “progress” özelliği yükleme sürecinin yüzdesini gösterir. Bu özellik kullanılarak yükleme süreci izlenebilir veya yükleme ekranı tasarlanabilir. Bunun yanı sıra “allowSceneActivation” özelliği yükleme işlemi tamamlandığında sahnenin anında aktif hale getirilmesini sağlar.
İster yükleme ekranı ister yükleme sürecinin takibi için olsun, AsyncOperation kullanımı yükleme sürecini daha verimli ve kontrol edilebilir hale getirebilir.
SceneManager.LoadSceneAsync()
SceneManager.LoadSceneAsync(), yüksek kalite sahne geçişleri oluşturmanın en iyi yollardan biridir. Sahne yüklemeyi önceden yükleyen AsyncOperation yardımıyla, yükleme ekranı oluşturmak mümkün hale gelir. Bu event sayesinde, yükleme ekranı geçişi nedeniyle meydana gelen donmalar ve gecikmeler önlenebilir.
SceneManager.LoadSceneAsync() temel event ile aynı modları “Single” ve “Additive” modu kullanarak sahne yüklemek mümkündür. Fakat AsyncOperation’ın daha fazla seçeneği vardır. Bu eventi kullanarak sahne yükleme ekranının modifiye edilmesi, yükleme ortamının uygun hale getirilmesi ve yüklemenin tamamlanması hakkında daha fazla kontrol sağlanması mümkündür.
Aynı zamanda, AsyncOperation ile yükleme ekranını önceden yüklediğiniz için, oyununuzda yüklemeler sırasında herhangi bir kesinti meydana gelmez. AsyncOperation, yüklemeleri daha iyi takip edebilmenizi, geri çağırma fonksiyonları gibi özellikleri kullanarak kullanıcının deneyimini daha iyi hale getirmenizi sağlar.
Metot İsmi | Parametreler | Açıklama |
---|---|---|
AsyncOperation | SceneManager.LoadSceneAsync(SceneName); | Verilen sahneyi yükler. |
AsyncOperation | SceneManager.LoadSceneAsync(SceneIndex, LoadSceneMode.Single); | Verilen sahnenin indeksini yükler ve yüklemeyi Single modunda yapar. |
AsyncOperation | SceneManager.LoadSceneAsync(SceneName, mode); | Verilen sahneyi yükler ve yüklemeyi verilen LoadSceneMode modunda yapar. |
AsyncOperation | SceneManager.LoadSceneAsync(SceneName, LoadSceneParameters); | Verilen sahneyi LoadSceneParameters kullanarak yükler. |
Aynı zamanda SceneManager.LoadSceneAsync() ile op.allowSceneActivation kullanarak sahne yüklemeyi kolaylaştırmak mümkündür. Op.allowSceneActivation, yükleme sırasındaki donmaları önlemek için kullanılabilir. Sahne yüklemesi tamamlanırken, yükleme ekrani op.allowSceneActivation parametresine True vererek sahne geçişlerini ve animasyonlarını başlatabilirsiniz.
Genel olarak, SceneManager.LoadSceneAsync(), sahne geçişlerinde yüksek kalite ve daha fazla seçenek sağlar. Bu event, sahne geçişlerini daha akıcı hale getirir. Sahne geçişi sırasında meydana gelen donmalar ve gecikmeleri engelleyerek, oyununuzu daha akıcı hale getirir ve kullanıcı deneyimini geliştirir.
LoadSceneMode
LoadSceneMode, Unity'de sahne geçişleri için kullanılan bir eventtir. Bu event, sahneyi yüklemek için iki farklı modda kullanılabilir: "Single" ve "Additive". "Single" modu, bir önceki sahneyi tamamen kapatır ve yeni sahneyi açar. "Additive" modu ise mevcut sahneye yeni bir sahne ekler.
Bu event, SceneManager.LoadScene() gibi kullanılarak sahne yüklemek için kullanılabilir. "Single" modu varsayılan olarak ayarlanır ve bu nedenle sahne geçişi tamamlanmadan önce önceki sahne tamamen kapanır. "Additive" modu ise yığın oluşturarak çalışır, bu sayede yeni sahne mevcut sahnenin üzerine yerleştirilir. Bu mod, yüzlerce sahne içeren büyük projelerde faydalı olabilir.
Bu event ayrıca AsyncOperation ile birleştirilebilir, bu sayede sahne geçişi sırasında bir yükleme ekranı oluşturmak mümkün hale gelir. Aşağıdaki tabloda "Single" ve "Additive" modları arasındaki farkları daha iyi anlayabilirsiniz:
Mod | Açıklama |
---|---|
Single | Bir önceki sahneyi kapatır ve yeni sahneyi açar. |
Additive | Mevcut sahneyi korur ve yeni sahneyi üzerine ekler. Yığın oluşturarak çalışır. |
AsyncOperation
AsyncOperation, Unity'de sahne yüklemelerinde kullanılan bir eventtir. Bu event sayesinde yüklenen sahneyle ilgili bilgileri alabilir ve yüklenme sürecini takip edebilirsiniz. AsyncOperation kullanarak yükleme ekranı oluşturabilirsiniz. Bu sayede yüklenme sürecini daha anlaşılır hale getirebilir ve oyuncuların sabırsızlıkla beklemelerini önleyebilirsiniz.
AsyncOperation, daha iyi bir kontrol sağlamak için LoadSceneAsync() eventiyle birlikte kullanılabilir. Örneğin, yükleme süreci tamamlanmadan önce kullanıcıya bir animasyon gösterebilir ve yüklemeyi beklemek yerine oyuncunun süreci izlemesini sağlayabilirsiniz. AsyncOperation, yüklenen sahneyi aktifleştirme ve deaktifleştirme işlemlerini de yapabilir. Örneğin, oyuncu yüklenen sahneyi görmek yerine yüklenme ekranında beklerken sahneyi arka planda aktif hale getirebilirsiniz.
AsyncOperation Yöntemi | Açıklama |
---|---|
isDone | AsyncOperation'ın tamamlandığını gösteren bir bool değer döndürür. |
progress | AsyncOperation'ın yükleme sürecinin ne kadar tamamlandığını gösteren bir float değer döndürür. |
allowSceneActivation | AsyncOperation'ın aktifleştirilmesini sağlar. Bu sayede yüklenen sahne, oyuna eklenir. |
AsyncOperation, sahne yüklemesi sırasında kullanabileceğiniz en önemli eventlerden biridir. Bu event sayesinde oyunculara daha iyi bir kullanıcı deneyimi sunabilirsiniz. Yüklenme sürecinin nasıl ilerlediğini gösteren etkileşimli bir yükleme ekranı oluşturabilir, yüklenen sahneyi arka planda aktif hale getirebilir ve daha fazla kontrol sağlayabilirsiniz. Bu sayede oyuncuların oyuna daha fazla bağlanmasını ve daha uzun süre oynamasını sağlayabilirsiniz.
SceneManager.LoadSceneAsync() ve op.allowSceneActivation
Unity, sahne geçişleri sırasında eventler kullanarak oyunu yönetmek için birçok seçenek sunar. Bu eventlerden biri, SceneManager.LoadSceneAsync () ve op.allowSceneActivation'dır. Bu event, sahne geçişlerinde daha fazla kapsamlı ve kontrol edilir bir kullanım sağlar.
SceneManager.LoadSceneAsync (), diğer yükleme eventleri gibi kullanılır. Ancak, bu event, yüklenen sahne tamamen hazır olduğunda sahne geçişinin gerçekleştirilmesine izin verir. Bu, yüklenen sahne hazır olana kadar yükleme ekranını göstermenizi veya diğer işlemleri yapmanızı sağlar.
SceneManager.LoadSceneAsync() | op.allowSceneActivation |
---|---|
SceneManager.LoadSceneAsync (), sahnenin yüklenme sürecinde daha fazla kontrol sağlar. | op.allowSceneActivation, yüklenen sahnenin tamamen hazır olmasına kadar sahne geçişinin yapılmamasını sağlar. |
Bu event, sahne geçişleri sırasında daha fazla kapsamlı ve kontrol edilir bir kullanım sağlar. | Yüklenen sahne tamamen hazır olduğunda sahne geçişinin gerçekleştirilmesine izin verir. |
Bu event, oyun geliştiricilerinin sahne geçişlerini daha kolay yönetmelerini sağlar. Sahne yükleme işleminin tamamlanmış olması, oyunun mevcut sahnesinde kalmasını ve daha sonra yüklenen sahneye geçmesini sağlar. Böylece, oyuncular herhangi bir beklemeye maruz kalmadan oyunun kesintisiz bir şekilde devam etmesini sağlar.
Yüklenen sahne tamamen hazır olduğunda op.allowSceneActivation'ı True olarak ayarlamak, sahne geçişinin gerçekleştirilmesini sağlar. Bu, SceneManager.LoadSceneAsync() eventine göre daha fazla kontrol gerektiren bir yöntemdir, ancak bu eventle birlikte kullanıldığında, daha iyi bir oyun deneyimi elde edilmesi sağlanır.
Diğer Eventler
Birçok farklı event, Unity projesinde sahne geçişleri için kullanılabilmektedir. Bunların en popüler olanı SceneManager.LoadScene() ve SceneManager.LoadSceneAsync() eventleridir. Ancak, diğer event seçenekleri de mevcuttur, bu yazıda SceneManager.LoadScene() dışındaki eventler hakkında bilgi verilecektir.
Bir diğer seçenek olan SceneManager.MergeScenes(), kaynak yönetimini iyileştirmek için kullanılabilir. Bu event, birden fazla sahnenin ana sahne içinde birleştirilmesini mümkün kılar. Bu sayede, kullanılmayan sahneler hafızadan kaldırılabildiği için oyun performansı artırılır. Aşağıdaki tablo, birden çok sahnenin birleştirilmesi için kullanılabilecek olan event seçeneklerini göstermektedir.
Event | Kullanım Amacı |
---|---|
SceneManager.MergeScenes() | Birden fazla sahneyi birleştirerek kaynak yönetimini iyileştirme |
Bir diğer event seçeneği ise, SceneManager.UnloadSceneAsync(). Bu event, sahne yüklemelerinden kaynaklanan bellek sorunlarını çözmek için kullanılabilir. Sahne yüklemeleri genellikle oyunun performansını düşürdüğünden, kullanılmayan sahnelerin bellekte kalması önemli bir sorun haline gelebilir. SceneManager.UnloadSceneAsync(), bu sorunu çözmek için kullanılabilir. Aşağıdaki tablo, SceneManager.UnloadSceneAsync() kullanımında farklı mod seçeneklerini göstermektedir.
Event | Kullanım Amacı |
---|---|
SceneManager.UnloadSceneAsync() | Sahne yüklemelerinden kaynaklanan bellek sorunlarını çözmek |
UnloadSceneOptions.None | Bellekten sahneyi kaldırmak |
UnloadSceneOptions.UnloadAllEmbeddedSceneObjects | Sahne içindeki tüm nesneleri de bellekten kaldırmak |
UnloadSceneOptions.UnloadAll | Dersteğindeki tüm sahneleri ve bu sahneler içindeki nesneleri kaldırmak |
Bu event seçenekleri, sahne geçişleri sırasında Unity projesinin performansını ve bellek yönetimini iyileştirmek için kullanılabilir. Tek bir event seçeneğine bağlı kalmak yerine, farklı eventlerin kombinasyonunu kullanmak, projenin daha verimli çalışmasını sağlayabilir.
SceneManager.LoadSceneAsync()
Bir sahne geçişi yaparken, işlem bitene kadar beklemek yerine işlem devam ederken oyuna müdahale etmek isteyebilirsiniz. Bu durumda, AsyncOperation ve IEnumerator (Coroutine) kullanarak sahne geçişlerini yönetebilirsiniz.
AsyncOperation, kullanıcının yüklemeyi izlemesine ve ilerlemesini takip etmesine olanak tanırken, IEnumerator kullanımı sahne geçişinin bitmesini beklemek yerine işlemin devam etmesine izin verir.
SceneManager.LoadSceneAsync() metodu, LoadSceneMode özelliklerine sahip olmasına rağmen, IEnumerator ve AsyncOperation yapısı sayesinde hareketli bir yükleme ekranı veya sahne geçişi sırasında farklı animasyonlar oluşturabilmenizi sağlar.
Bu yöntemde, AsyncOperation sınıfının allowSceneActivation özelliği, yükleme tamamlanmadan önce sahneyi gösteren bir yükleme ekranı veya animasyon oluşturmak için kullanılır. AsyncOperation sınıfı sayesinde yüklemenin devam etmesi, sahneye geçiş yapılabilmesi veya sahne yüklenene kadar beklemesi gibi farklı senaryolar oluşturabilirsiniz.
SceneManager.MergeScenes()
Unity’de sahne geçişleri ve eventler hakkında bilgileri verdiğimiz bu rehberimizde, sizlere SceneManager.MergeScenes() eventi hakkında bilgi vereceğiz. Bu event, birçok farklı sahnenin birleştirilerek tek bir sahne haline getirilmesiyle kullanılır.
Birçok oyunun birden fazla sahnesi bulunur ve oyuncular oyun ilerledikçe farklı sahnelere geçer. Ancak, farklı sahnelerin aynı kaynaklara sahip olması, kaynak yönetimini zorlaştırır. Bu durumda, birden fazla sahnenin birleştirilerek tek bir sahne haline getirilmesi, kaynak yönetimini kolaylaştırmak için tercih edilir.
Bu event sayesinde, birden fazla sahneyi diğer sahnelere eklenmeden birleştirebilirsiniz. İsterseniz farklı LoadSceneMode’larını kullanarak sahneleri tek tek ekleyebilir veya SceneManager.LoadSceneAsync() eventi ile birlikte de kullanabilirsiniz.
Birleştirilen sahneleri daha sonra ayırmak için de SceneManager.UnloadSceneAsync() eventini kullanabilirsiniz. Böylece, tek bir sahne haline getirilen farklı sahneleri kolayca yönetebilir, kaynak yönetimini iyileştirebilir ve performans sorunlarını ortadan kaldırabilirsiniz.
Event Adı | Kullanımı | Avantajları |
---|---|---|
SceneManager.MergeScenes() | Birden fazla sahneyi birleştirerek tek bir sahne haline getirme | Kaynak yönetimini kolaylaştırır, performans sorunlarını azaltır |
SceneManager.MergeScenes() eventi, kaynak yönetimi ve performans sorunlarını çözmek için oldukça önemlidir. Birden fazla sahnenin birleştirilerek tek bir sahne haline getirilmesi, oyunun performansını artırırken, kaynak yönetimini kolaylaştırır. Bu sayede, oyun geliştiricileri daha iyi bir kullanıcı deneyimi sunabilir ve oyuncuların oyun keyfi artar.
SceneManager.UnloadSceneAsync()
Event kullanılarak sahne yüklemeleriyle ilgili bellek sorunları çözülebilir. Bu event, sahneler arasında geçiş yaparken bir sahneyi yüklerken önceki sahneyi bellekten kaldırır. Bu sayede bellek yönetimi daha düzenli bir hale gelir ve oyun daha akıcı hale gelir.
Bu event kullanımı daha kolay oyun geliştirme sağlar. Birden fazla sahne yükleme sırasında bellek sıkıntısı oluşabilir. Özellikle büyük sahneler yüklendiğinde bellek kaynağı daralabilir. Bu event, oyun sırasında yüklü sahnelerin kontrol edilmesini sağlar, yükleme işlemi tamamlanmadan önce önceki sahneler bellekten tamamen çıkarılır. Böylece oyun akışına yavaşlama gibi sorunlar da engellenmiş olur.
SceneManager.UnloadSceneAsync() eventi, LoadSceneAsync() gibi eventlerle birlikte kullanılabilir. Sahne değiştirme işlemi sırasında bellek kullanımı kontrol altında tutulur. SceneManager.MergeScenes() eventi sayesinde birleştirilen sahneler de daha az bellek kullanır. Bu sayede daha profesyonel bir oyun geliştirme deneyimi yaşanabilir.