Ozzy

Unreal MVP
29 Kas 2015
620
321
63
(34) İstanbul Anadolu
Merhabalar, burada ve Discord kanalında gördüğüm en çok sorunlardan biri de iki kamera arasında geçiş yapmak ve smooth (pürüzsüz) bir geçiş sağlamak. Bu geçişlerin farklı versiyonlarını da göstereceğim. Smooth geçişler sırasından Timeline ve Lerp anlatımlarıyla olacaktır. 

Bu ders kullanıcın temel blueprintler bilgisi olduğunu varsayıyor.

1. Karakteri Third Person Kamera Açısı ve First Person Kamera Açısı Arasında Geçiş Sağlamak

Karakter Blueprints içerisinden +Add Component ile Spring Arm (CameraBoomFP) ve Camera ekleyeceğiz. Daha sonrasında Camera Spring Arm içerisine, Spring Arm'ı ise Mesh içine atacağız çünkü head üzerinden oynatacağız. Head socketine eklememizin nedeni True First Person olması yani en gerçek birinci şahıs görüntüsünü elde etmiş olacağız. CameraBoomFP Target Arm default kısmı 300 fakat biz 0 getireceğiz çünkü First Person kamera için Camera ile Spring Arm arasında mesafe olmasını istemiyoruz.

PCfATw.gif
  
IiYcsc.gif


Daha sonrasında Follow Camera'nın yani Third Person kameranın Auto Active kısmını False yapıyoruz. 'C' tuşuna her basışta kameralar arasında dönüşümlü olarak kullanılan FlipFlop isimli node kullanarak kontrol ettiğimi görebilirsiniz. Bunun yerine OnBeginOverlap tetikleyicilerle veya Custom Event'la bile kullanılabilir.

5q5sVz.png


6H4LD1.png


Sonuç:

Z9QbJ0.gif



2. Karakteri Third Person Kamera Açısı ve First Person Kamera Açısı Arasında Pürüzsüz Geçiş Sağlamak.

İlk yaptığımız kamera geçişinde anında kamera değişikliği olacaktır fakat şimdi yapacağımızda hareketli ve pürüzsüz (smooth) bir geçiş olacaktır. Timeline ve Lerp kullanımını göreceğiz.

Not: Blueprint esnasında tek bir kamera kullanılmıştır fakat siz üst kısımdaki sistem ile bir kullanabilirsiniz. Pürüzsüz geçiş sağlandıktan sonra diğer kamerayı aktif ederek onu da kullanabilirsiniz.

'C' tuşuna her basışta kameralar arasında dönüşümlü olarak kullanılan FlipFlop isimli node kullanarak İlk Timeline'nımıza bağlıyoruz. First Person kamera açısına geçtiğimizden Target Arm Length 0 olmak zorundadır. 

Timeline ayarlarımızın genel mantığı şöyledir. Bir Float track oluşturuyoruz ismi NewTrack_9 fakat siz istediğiniz ismi koyabilirsiniz. Length uzunluğumuz 1 saniye ve 2 adet key ekliyoruz. Time=Zaman, Value=Değer. İlk key de Time 0 ve Value 300 olacak ikinci key de ise Time 1, Value 0 olacak. Burada yaptığımız Time 0 yani 0. saniyede değer 300 yani Target Arm Length default değeri. 2. key de ise Time 1 yani 1. saniyede değeri sıfıra düşürüyoruz. Not: Eğer Time'ı uzatırsanız o kadar yavaş geçiş olacaktır.

YnLfdh.gif


CameraBoom (SpringArm) ile Set Target Arm seçiyoruz ve Timeline da oluşturduğumuz New Track kısmını Target Arm Length'in input kısmına bağlıyoruz. Daha sonra bir Timeline daha oluşturuyoruz bu Timeline ise kameranın lokasyonunu lerp ile pürüzsüz şekilde değiştirmemizi sağlayacak. 

2. Timeline ayarları ise yine Float Track ekliyoruz ve ilk key 0. saniyede 0 değerinde Time=0, Value=0. İkinci key 1.saniye 1 değerinde Time=1, Value=1. Length yine 1 değerinde çünkü 1 saniyede gerçekleşmesini istediğimden dolayı. Not: Length değeri genel olarak en son Time değerini alması gerekir yoksa belirlediğiniz değerde timeline sona erecektir.

Oluşturduğumuz Timeline'da bulunan New Track float kısmını Lerp (Vector) isimli node Alpha kısmına bağlıyoruz. Lerp'de bulunan A kısmı CameraBoom (Spring Arm) bulunduğu mevcut lokasyon (location) değeri çünkü diyoruz ki A lokasyonundan B lokasyonuna git. B kısmı ise karakterimizin kafasının bulunduğu kısımı yani kameranın, benim karakterim X ekseninde 30, Y ekseninde 0 ve Z ekseninde 60 değerinde ki bir noktaya denk geliyor. Bu değeri de girdikten sonra Lerp (Vector) isimli node Return Value kısmını CameraBoom'dan çektiğimiz SetRelativeLocation isimli node New Location kısmına bağlıyoruz. Artık CameraBoom lokasyonu belirlediğimiz noktalarla (A ve B) ilerlemiş olacak. 

C tuşuna tekrar bastığımız da ise First Persondan Third Person haline dönmesini istiyorsak FlipFlop A çıkısındakileri kopyalayıp B çıkışına yapıştırmalıyız. Bazı değişiklikler yapmamız gerekiyor onlar ise şunlardır; ilk Timeline'ı Reverse veya Reverse from end ile çalıştırmalıyız çünkü Time 0 da Value 300 iken ve Time 1 de Value 0 iken Reverse dediğimiz zaman tersini alacaktır ve 1. saniyede 300 olacaktır. Lerp kısmıda tam tersi şeklinde olmalıdır çünkü First Persondan Third Person bakış açısına geçmiş olacağından Kafa noktasında olan kısmı tekrardan X:0 Y:0 Z:0 çekmemiz gerekiyor.

Not: Lerp node birden çok değişik versiyonları vardır. Lerp (Vector), Lerp (Rotator), Lerp (Float) vb gibi fakat hepsi aynı mantık çerçevesinde çalışır.


roKPWm.png


Sonuç: 

Z9QbJz.gif


3. Karakter ve Level Üzerindeki Kamera Arasında Pürüzsüz Geçiş Sağlamak.

Haritamıza bir kamera atıyoruz ve istediğimiz gibi konumunu ayarlıyoruz. Daha sonrasında üstüne tıkladığımız şekilde Level Blueprint içerisine giriyoruz. Event Graph kısmında boş bir yere sağ tıklıyoruz ve referansı çağrıyoruz.

XUrjuC.png


MKzQsN.png


'C' tuşuna her basışta kameralar arasında dönüşümlü olarak kullanılan FlipFlop isimli node kullanarak A çıkışına Get Player Controller ile Set View Target with Blend çekiyoruz. New View Target kısmına ise referansını çektiğimiz level içerisindeki kamerayı bağlıyoruz. Blend Time size kalmış ne kadar sürede geçiş sağlamasını istiyorsanız o değeri girebilirsiniz. Eğer 0 girerseniz direkt bir geçiş sağlayacaktır. Blend Func. kısmında ise VTBlend Ease in Out bence en iyi smooth sağlamakta ve Blend Exp float değerini kullanabilirsiniz. B çıkışına ise Pawn'a dönüşünü sağlayabilirsiniz. Alternatif olarak Get Player Character ile Cast to CharacterBP seçtiğiniz ve bağladığınız zamanda aynı çözüme ulaşırsınız.

g3WF7O.png


Sonuç:

lOrarl.gif


Umarım soranlar ve kamera geçişini anlamayanlar için yararlı bir ders olmuştur.
 
ozzy çoook teşekkür ederim. Gerçekten çok faydalı bir paylaşım oldu. İhtiyaç duyduğum bir konuydu doğrusu. Benzer bir şekilde ili konu hakkında da böyle ders hazırlarsan emin ol teşekkürlerim katlanarak artacak. 

İlki bir kapının açılıp kapanmasını sağlamak. Aynı zamanda yani aynı kapının istendiğinde sabit olan kısımlarıyla birlikte rengini değiştirmek. Olayı kapı olarak değil kutu olarak da düşünebilirsin. Kutunun kapağını açmanın yolunu biliyorum. Renk değiştirmenin de yolunu biliyorum. Ama ikisini aynı nesne üzerinde yapamıyorum. Mesela kutu hareket için actor kullanıyorsam bu actor sadece bir işi yapabiliyor. İkincisini yaptıramadım.

Diğeri ile bunların mobil sistemde kullanılabilmesi için butonlara bağlanması. Bu konuda bir arkadaş bazı bilgiler vermişti ama denemeye fırsatım olmamıştı. 

Umarım bu dersleri de en kısa zamanda okuruz.

Saygılar derin muhabbetler.
 
Ellerinize sağlık (doğru bir kullanım oldu mu emin değilim), harika bir rehber olmuş. Bu tarz shooter oyunları üzerinde çalışan insanların göz bebeği olabilecek kadar mükemmel hazırlanmış. Teşekkürler!
 
yılmaz hoca' Alıntı:
ozzy çoook teşekkür ederim. Gerçekten çok faydalı bir paylaşım oldu. İhtiyaç duyduğum bir konuydu doğrusu. Benzer bir şekilde ili konu hakkında da böyle ders hazırlarsan emin ol teşekkürlerim katlanarak artacak. 

İlki bir kapının açılıp kapanmasını sağlamak. Aynı zamanda yani aynı kapının istendiğinde sabit olan kısımlarıyla birlikte rengini değiştirmek. Olayı kapı olarak değil kutu olarak da düşünebilirsin. Kutunun kapağını açmanın yolunu biliyorum. Renk değiştirmenin de yolunu biliyorum. Ama ikisini aynı nesne üzerinde yapamıyorum. Mesela kutu hareket için actor kullanıyorsam bu actor sadece bir işi yapabiliyor. İkincisini yaptıramadım.

Diğeri ile bunların mobil sistemde kullanılabilmesi için butonlara bağlanması. Bu konuda bir arkadaş bazı bilgiler vermişti ama denemeye fırsatım olmamıştı. 

Umarım bu dersleri de en kısa zamanda okuruz.

Saygılar derin muhabbetler.

Teşekkür ederim. İstediğiniz dersi tam anlayamadım. Hem kapı açılma hem de kapının materiallerini widget yardımı ile değiştirmek mi istiyorsunuz ?

theysfkaan' Alıntı:
Ellerinize sağlık (doğru bir kullanım oldu mu emin değilim), harika bir rehber olmuş. Bu tarz shooter oyunları üzerinde çalışan insanların göz bebeği olabilecek kadar mükemmel hazırlanmış. Teşekkürler!

Teşekkür ederim umarım faydalı olur.