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.
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.
Sonuç:
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.
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.
Sonuç:
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.
'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.
Sonuç:
Umarım soranlar ve kamera geçişini anlamayanlar için yararlı bir ders olmuştur.
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.
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.
Sonuç:
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.
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.
Sonuç:
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.
'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.
Sonuç:
Umarım soranlar ve kamera geçişini anlamayanlar için yararlı bir ders olmuştur.