Gamasutra: Jason Bakker’ın Blogu – Wayward Strand’de Sanal Karakterleri Yönetmek, Bölüm 1

Aşağıdaki blog yazısı, aksi belirtilmedikçe, Gamasutra topluluğunun bir üyesi tarafından yazılmıştır. İfade edilen düşünce ve görüşler, Gamasutra veya ana şirketine değil, yazara aittir. Mürekkebi ve Zaman Çizelgesi’ni nasıl entegre ettiğimizle ilgili son yazımdan sonra, karakterler üzerinde animasyonları tetiklemek gibi şeyler yapmak için Unity’nin Zaman Çizelgesi aracını nasıl kullandığımıza biraz ilgi vardı. Wayward Strand’i yaparken, bunun için oldukça memnun olduğumuz bir çözüm geliştirdik. Basitçe söylemek gerekirse, karakterlerimizin Animatör Denetleyicilerinde parametreleri ayarlamak için Zaman Çizelgesi’ni kullanıyoruz – ancak bunun etrafında biraz iskele ve ayrıca animasyonlarımız için kullanışlı bir kategorizasyon yapısı geliştirdik. Bütün bunlarla ilgili epeyce şey var, bu yüzden birkaç gönderi üzerinde duracağım – bu ilki Animatör Kontrolörlerine odaklanacak ve bu yaklaşımı neden seçtiğimizin arkasındaki mantığa girerek başlayacağım. Wayward Strand’deki animasyonlar için problem alanımız, oyunumuzun benzersiz, eşzamanlı hikaye yapısından kaynaklanmaktadır. Wayward Strand’in Sleep No More gibi etkileşimli bir tiyatro deneyimi gibi hissetmesini istedik, burada oyuncuların sürekli konumu ve fizikselliği, bu deneyimi benzersiz kılan şeyin çok önemli bir parçası. Karakteri vurgulanan, olay örgüsü açısından kritik anlarında, kilit eylemi gerçekleştirdikleri veya etkileyici etkileşime sahip oldukları, hikayelerinin etrafında yapılandırıldığını görüyorsunuz – ama aynı zamanda bu andan sonra, hareket etmeleri gerektiğinde, karakteri de görüyorsunuz. karakter, bir konumdan diğerine. Ayrıca onları, bir odada veya bir mekanda, tatmin olmuş, kafası karışmış, umutlu veya umutsuz hissederek – bazen çok uzun süreler boyunca – geçirdikleri sessiz anlarında da görürsünüz. Gerçek zamanlı, kesişen bir hikaye yapısında, yüksek aksiyon ve sessizlik/yansımanın bu titrek, rüzgarlı kavisleri deneyimlemek için bir zevktir ve bu sevincin bir kısmı kimi izleyeceğiniz – kimin zaman geçireceğiniz konusunda yaptığınız seçimden gelir. ile hikayenin herhangi bir noktasında. Film gibi doğrusal bir hikaye anlatımı formatında, ne zaman sessiz bir anınız olursa, bunun nedeni yönetmenin hikayenin o belirli noktasında sessiz bir anınız olacağına karar vermesidir. Anlık deneyiminiz öngörülmüştür; planlı; tasarlanmış. Ancak eşzamanlı bir hikaye anlatımı formatında, o sessiz anı yaşamayı ya da hikayenin dünyasında hala varken o anı yaşamayı seçiyorsunuz. Bu duyguyu bir video oyununda yakalamaya çalışırken, karakterlerimizin dünyada yönetebildiğimiz kadar sürekli yaşamasını istediğimizi biliyorduk. Bu, genellikle bir durumdan diğerine geçmedikleri anlamına gelir – kamera onlardan kesip kesmez, ardından animasyon durumlarını yakalamanıza veya hatta karakterin tamamen yeni bir sürümünü işlemenize izin verir. belirli bir hikaye anı. Karakterlerimiz dünyada var – çeşitli eylemler gerçekleştiriyor, sahnelere katılıyorlar, sessiz anlarına sahipler – ve oyuncu yanlarında olsun ya da olmasın, her gün sürekli olarak bunu yapıyorlar. Wayward Strand için bulduğumuz çözüm, çoğu animasyonu BodyPose ve Activity olmak üzere iki kategoriden birine ayırdığımız bir yapıydı. Bu mantıksal yapıyı kullanarak, hareketin kod tarafında tam olarak nasıl yönetildiği konusunda endişelenmeden, sistemler aracılığıyla birçok karmaşık karakter hareketini çalıştırabileceğimizi fark ettik. Bu sınıflandırma, hangi animasyonların geliştirileceğini ve gereksinimlerinin neler olduğunu belirlemede de önemli ölçüde yardımcı oldu. Oyunla ilgili gereksinimlerimizi ve arzularımızı tartışırken gerçekten bu mantıklı çözümü bulan ve beni sınırlayıcı olacağını düşündüğüm ama yapamadığım bazı unsurlara ikna eden Kalonica’ya özellikle buradan sesleniyorum. pratikte oldu ve aslında gerçekten işe yarayan uygulanabilir bir sistemin bir araya gelmesinin gerçekten önemli bir parçası olduğu ortaya çıktı. BodyPose/Activity çözümü, Unity’nin animatör kontrolörleri içinde çok özel bir yapı ve her BodyPose/Activity’ye doğrudan bağlı olan ve BodyPose/Activity ile tam olarak aynı adı taşıyan bir Parametrenin bulunduğu bir kurulum gerektiriyordu. Üzerinden geçilmesi gereken biraz şey var, bu yüzden AnimatorControllers’ı nasıl kurduğumuzu anlatacağım, ardından parametreleri ve farklı durumlar arasındaki geçişleri nasıl tetiklediğimizi inceleyeceğiz ve son olarak tüm sistemi çalışırken göreceğiz. Karakterlerimizden biri olan Ida’nın animasyonlarına bakacağız ve sonunda, Ida’nın ayakta durmaktan örgüsünü yukarı kaldırıp incelemek için gittiği bu geçiş setini parçalayacağız. Bir BodyPose genellikle bir karakterin birçok farklı şey yapabileceği sabit bir durumdur – Ayakta, Oturmak, Yatakta Yatarken vb. Bu BodyPose’lar hiyerarşinin en üst seviyesinde yaşar ve her biri bir StateMachine ile temsil edilir. BodyPoses için izlediğimiz genel bir kural, birinden diğerine geçiş yaparken varsayılan BodyPose’larından geçmeleridir (varsayılan, ayakta duran karakterler içindir). Sanırım gerekirse bu kuralı kırabiliriz, ancak şu ana kadar mantıklı geldi – çünkü bir karakter bir BodyPose’dan diğerine geçiyorsa, genellikle bir prop ile etkileşimden, onunla etkileşime geçiyorlar. farklı biri. Body_SittingLowChair StateMachine’in içine bir göz atalım. Her BodyPose (Durma hariç) genellikle bu şekilde yapılandırılmıştır – bir İçeride Durum/Animasyon, bir Yapıyor Durumu/Animasyon ve bir Dış Durum/Animasyon vardır. In, animasyonunu neredeyse sonuna kadar oynatır, ardından Doing’e geçiş yapar ve Doing, döngüsel bir animasyon oynatır ve Body_SittingLowChair parametresi artık ayarlanmadığında Out’a geçiş yapar. In ve Doing durumlarından, BodyPose’daki Aktivitelerin her birine giden geçişler de kurulur – ve Aktivitelerden Doing’e veya doğrudan Out’a geçişler vardır, bu da daha yumuşak geçişlere izin verir. Tamamen farklı bir BodyPose’a bir BodyPose+Activity. Çoğu insanın buna baktığını (özellikle Unity’nin AnimatorControllers’ı ile daha önce çalıştıysanız) ve üst üste binen geçiş oklarını ve “aman tanrım, bu bir kabus gibi görünüyor” diye düşündüğünü görebiliyorum. Ve.. biraz öyle! Bu nedenle, bu yapıyı tanımladıktan ve tüm karakterlerdeki animasyonların çoğu için ona yatırım yapmaya karar verdikten sonra, süreci otomatikleştirmemize yardımcı olacak bazı EditorScript araçları geliştirdik. Aşağıdaki gif’te, Aktivite için varsayılan geçişleri ayarlamak için EditorScripts aracılığıyla eklediğimiz düğmelerden birini kullanıyorum – Giriş ve Çıkış’taki ek olanlar da dahil olmak üzere geçişler. (Komut dosyası ayrıca gerektiğinde geçişlere ilgili parametreleri de ekler.) Unity’nin editör komut dizisini anlamak ve uygulamak biraz zaman alsa da, bu tür işlemleri otomatikleştirmek gerçekten kullanışlıdır, çünkü sonuçta zaman kazandırır, hata olasılığını azaltır. izlemeniz gerekir ve size çalışmak için bazı iyi varsayılanlar verir – bu durumların/geçişlerin her biri, komut dosyası geçtikten ve bu ilk kurulumu yaptıktan sonra hala değiştirilebilir, ancak çalışacak bir temeliniz var oyun. Tamam, bir katman daha derine, Faaliyetlerin kendisine gidelim. En karmaşık örneklerimizden biri de İda’nın örgü ördüğü animasyonlardır. BodyPoses – In -> Doing -> Out – ile benzer bir yapıyla başladığımızı görebilirsiniz, ancak burada daha derin bir özgüllük seviyesi yerine, genel parametrelerle bağlantılı bir grup Durum/StateMachines var – Pause, SpecialLoop, SpecialOnce, vb. Doing’in ötesinde bu düzeydeki ek Durumlar için ActivityModifier terimine ulaştık – bu animasyonlar Activity’yi “değiştirir”, ancak karakter hala temelde, mantıksal olarak Activity (ve ilişkili BodyPose, bir seviye yukarı). ActivityModifier biraz belirsiz bir isimdir, ancak amaçlarımız için çalışır. Tüm Faaliyetlerimize, genel parametreler tarafından yönlendirilen belirli animasyonları eklememize izin veren bu temel yapı ile başlıyoruz. İda’nın örgü animasyonları için örmeye başlayabilir (In), ilmek örmeye (Yapıyor) ve örmeyi durdurabilir (Out). Ayrıca Aktiviteden (Duraklatma) çıkmadan örgü ilmekinden dinlenebilir. Bu Aktivitenin ayrıca üç özel durumu vardır – Ida, incelemek için örgüyü yukarı kaldırır (SpecialLoop), Ida örgüyü kucağına indirir (SpecialLoop2) ve şu anda kullanılmayan, ancak ‘ için kullanılabilecek bir SpecialOnce Durumu. Ida’nın örgü örerken iç çektiği ya da bir hata yaptığını fark edip örgüsünde biraz geriye gittiği gibi bir kereye mahsus bir animasyon. Bu durumların bu genel şekilde adlandırılmasının ve genel parametreleri kullanmasının nedeni, karakterin hangi BodyPose/Activity’de olduğuna bakılmaksızın parametreyi tetikleyebilmemizdir. Örneğin, en sık kullandığımız değiştirici Pause değiştiricisidir – bu Bu Aktivitelerin bir karakterin bir Aktivite yapabileceği (örme, okuma veya yemek yeme gibi) ve daha sonra bu aktivitenin yapılmasını duraklatacak şekilde ayarlanması harika. birine yanıt verebilir veya bir sahnede biraz durmak için duraklayabilir. Wayward Strand’de, oyuncunun varlığıyla tetiklenen sahneler vardır (Casey’in bir karaktere soru sorması veya bir karakterin o odada olduğu için Casey ile konuşması), sahnenin tam olarak ne zaman oynanacağını bilmediğimiz sahneler vardır. Ancak, Duraklat gibi genel parametreleri kullanarak, konuşma sırasında Ida’yı sahnede, o sırada örgü örüyor, çay içiyor veya başka bir şey yapıyor olmasına bakılmaksızın, Duraklatmaya veya Yapmaya devam etmeye yönlendirebiliriz. Bu, şu anda ne yaptıklarını bilmesek bile, bu genel ActivityModifiers’ı kullanarak, karakter yönünün diğer öğeleriyle birlikte, başlarının hangi yöne (Ida’nın Casey’ye mi bakıyor, ne yapıyorsa ona mı bakıyor) ve konuşma, iç çekme veya başını sallama gibi yalnızca karakterlerin kafalarını etkileyebilecek diğer animasyonlar. Gönderinin başından itibaren gife dönersek, bunu pratikte görebiliriz. Casey, Ida’ya odasındaki fotoğrafı sorduğunda, o önce örgüsünü durdurur, sonra yanıt verirken onu kucağına bırakır. Bu iki bölümlük dizinin bir sonraki gönderisinde, Animatör Kontrolörleri içindeki geçişleri yönlendiren parametreleri ve bunların hepsinin Unity’nin Zaman Çizelgesi aracıyla nasıl bütünleştiğini keşfedeceğiz.

About admin

Check Also

Overwatch’ın McCree’si, adaşı Blizzard’dan kovulduktan sonra adını değiştirecek

Eski bir Blizzard çalışanının adını taşıyan Overwatch kovboy kahramanı McCree, yakında adını değiştirecek. Onun adaşı, …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

wordpress tema