Steamworks Belgeleri
Geliştiriciler İçin Başlarken

Genel Bakış


Steam Girdisi API'ı, oyununuzda Steam Girdi cihazlarını kolayca tam destekleyebilmeniz için tasarlanmıştır. Tam desteği şu şekilde tanımlıyoruz:

  • Oyununuz, oyun içerisinde girdi sembollerini kontrolcüye özel uygun biçimde gösterir.
  • Steam Girdisi yapılandırıcısı ekranı, butonlar veya tuşlar yerine oyuncunun oyun içinde yapacağı eylemleri kullanır.
  • Desteklediğiniz kontrolcüler için resmî bir yapılandırma yayınladınız.
  • Oyununuz kullanıcının kontrolleri değiştirebilmesine olanak tanır. Bu; fare, klavye ve oyun kumandası girdilerinin karıştırılarak aynı anda kullanılabilmesine imkân tanımak anlamına gelir.
  • Oyununuz klavye girdisi istediği zaman (ör. avatarlara ad verirken) otomatik bir biçimde metin girme arayüzünü ortaya çıkarmak için API'ı kullanırsınız.
  • Oyununuzun fare veya klavye girdisine ihtiyaç duyan bir başlatıcısı hatta herhangi bir başlatıcısı yoktur.

Kullanıcıların kanepede oturup oynarken daha iyi bir tecrübe yaşamaları için aynı zamanda şunları da önermekteyiz:

  • Arayüzünüzü uzaktan okunabilir yapın. Bizim baz aldığımız temel kural; 1920x1080 çözünürlükte çalışan bir oyunumunuz varsa karakterlerin boyutunu en az 24 piksel yapmaktır.
  • Eğer kullanıcı Steam Geniş Ekran modu ("SteamTenfoot" ortam değişkeni ayarlanır) kullanıyorsa oyununuzu varsayılan olarak tam ekranda başlatın.
  • Eğer daha da ileri gitmek isterseniz, oyun ilk defa başlatıldığı zaman kullanıcının ekran çözünürlüğünü tespit ederek buna uygun bir çözünürlük belirleyin.

Yaygın Kullanım Yerleri

Oyunumu çıkarmadan önce Steam Girdisi API desteğini ekleyeceğim


Güzel! Steam Girdisi API Desteğini Entegre Etmek dokümantasyonunda yer alan teknik yönergeleri takip edin.

Steam Girdisi API desteğinin yanı sıra diğer girdi kütüphanelerini ekleyeceğim


Geleneksel oyun kumandası girdilerini ve Steam Girdisi'ni oyununuza eklemek oldukça kabul edilebilir bir durumdur; ayrıca eğer Steam Girdisi API desteğini oyun ilk çıktıktan sonra ekleyecek veya oyununuzu birden çok platformda çıkaracaksanız kendinizi böyle bir pozisyonda bulmanız da oldukça olasıdır. Aklınızda bulundurmanız gereken birkaç husus var:

1. Analog eylemleriniz kasti olsun.
Bu konuyu daha detaylandıracağız fakat kısaca özet geçecek olursak:
  • İmleç ve hassas kamera kontrolleri için her zaman fare türünde bir eylem eklemelisiniz. Analog çubuk konumunun yönsel hedef almak için kullanıldığı Twin stick veya spor oyunlarında fare benzeri girdileri es geçmek sorun teşkil etmeyebilir.
  • Gerçekten ihtiyacınız olmadığı müddetçe sistem faresini ("os_mouse" option) kullanmaktan kaçının. İyi bir kullanıcı tecrübesi sunmanın en iyi yöntemlerinden biri de girdinin gerçek bir fareden mi yoksa kontrolcüden mi geldiğine karar vermektir.
  • Ya yapılandırıcının sağladığı hassasiyete güvenmeli (bunda gelen Steam Girdisi verisini filtrelemezsiniz) ya da Steam Girdisi için sistem faresinden farklı olan adanmış bir hassasiyet seçeneğini kullanmalısınız.

2. Analog çubuklarda otomatik nişan alma konusunda tutarlı olun.
Eğer XInput analog çubuklarına otomatik nişan alma ya da nişan alma yardımı uygulayacaksanız, bunları Steam Girdisi cihazları (en azından Steam Girdisi aracılığıyla yapılandırılan geleneksel kontrolcü modelleri) için de uygulamayı göz önünde bulundurun. Kullanıcının kontrolcü türünü belirlemek için GetInputTypeForHandle'ı çağırabilir veya ayrı bir fare benzeri girdi ve analog çubuk benzeri kamera eylemleri ekleyebilirsiniz.

3. Eğer mümkünse SDL 2.0.8 veya üzerini kullanın.
Girdi gibi şeyleri düzenlemek için en popüler çapraz platform oyun kütüphanelerinden biri olan SDL (Simple DirectMedia Layer)'i kullanıyorsanız, bunun en son sürümünü en azından 2.0.8 veya üstü bir sürümünü kullandığınızdan emin olun. Bu sürüm, Steam'in SDL'e Steam Girdisi tarafından yapılandırılan kontrolcülerden gelen girdileri yok saymasını söylemesine imkân tanıyarak çifte girdi hatasını ortadan kaldırır.

4. Xbox kontrolcüleri için bir planınız olsun.
Oyununuz çıkmışsa ve XInput desteği varsa, Xbox kontrolcülerini varsayılan olarak XInput dizininde bırakmak isteyebilirsiniz. Oyun yerel çok eşli bir oyunsa, her iki dizinden aynı anda girdi kabul edebileceğinizden olun veya bütün kontrolcüleri Steam Girdisi'ne yöneltin.

Steam Girdisi'nin, Steam Girdisi API'na sahip olmayan oyunlarımla birlikte düzgün bir şekilde çalışmasını istiyorum


İlk olarak Zach Burke'ün The Five Golden Rules of Input başlıklı yazısını okumanızı tavsiye ediyoruz.

Yazıyı özetleyecek olursak:

  1. Ekrandaki simgeler girdi cihazıyla uyuşmalıdır
  2. Fare imleci girdi cihazıyla uyuşmalıdır
  3. Bütün cihazlar her daim çalışabilir durumda olmalıdır
  4. DPAD, analog çubuk ve fare, menülerde gezinmek için kullanılabilmelidir
  5. Bağlantısı kesilen bir oyun kumandası oyunu durdurmalıdır

Bu maddeler, eğer mümkünse, takip edebileceğiniz işe yarar yol gösterici maddelerdir. Üsttekilere kendi ek maddelerimizi ekleyecek olursak:

Oyun kumandası ve fare girdisi aynı anda kullanılabilmelidir.

Birçok oyunda fare ve oyun kumandası girdisi kullanılabilirdir ancak bu ikisi aynı anda kullanılamaz, bu da Steam Girdisi sistemiyle yaşanan uyumsuzluk sorunlarının kaynağında başı çeker.

Ayrıca:

  1. Bütün kontrolcü türleri için tavsiye edilen birer kontrolcü yapılandırması belirleyin.
    Bu sayede Steam, kullanıcılar oyunu başlatırken onlardan bir yapılandırma seçmelerini istemez. Hem Xbox 360 hem de Xbox One kontrolcüsü için ayrı ayrı yapılandırma oluşturmanıza gerek yok. Bir modeli desteklediğiniz müddetçe diğerini de desteklemiş olursunuz.
  2. Steam Girdisi için yerel desteğe sahip olmayan kontrolcü türlerini dâhil etmek.
    Eğer bu kontrolcüler için entegre edilmiş desteğe sahip değilseniz partner sitesini kullanarak bunları Steam Girdisi'ne dâhil etmelisiniz. Daha fazla bilgi için bu kısmın en altına bakın.
  3. Eğer aynı anda oyun kumandası/fare girdisine izin vermeyecekseniz...
    ...en azından ölü bölgeyi, hızlanmayı ve analog çubuğun hassasiyetini yapılandırılabilir yapın. Dokunmatik yüzeyde analog çubuk emülasyonu, sanal analog çubuğunun hızlıca ileriye itilmesiyle işler ve bu yüzden bu ayarlar oldukça hassastır. İyi sonuçlar için oldukça yüksek hassasiyetlere, 0'a inen ölü bölgelere ve doğrusal hızlanma eğrisine izin vermelisiniz. Shadow of War'un kontrolcü ayarları bunun iyi bir örneğidir.
  4. Kullanıcıların Xbox veya PS4 sembollerini menü aracılığıyla seçmesine imkân verin ya da aygıtı API'ımız aracılığıyla tespit edin.
    Steam oyun kumandası girdileri gönderirken bu kumanda, oyununuzda mevcut aygıt yerine standart bir Xbox kontrolcüsü girdisi olarak görünür. Bu, oyuncuların normalde kullanamayacakları aygıtları kullanmasına olanak tanıdığı için gayet kullanışlıdır fakat bu aynı zamanda USB aygıt ID'si kontrolü için yapılan normal kontrollerin işe yaramayacağı ve Steam'den yardımcı bir işlev çağırmanız gerekeceği anlamına gelir. Oyunda dâhili destek sunduğunuz kontrolcülerin bile Steam Girdisi üzerinden görülebileceğini aklınızda bulundurun. Bunun iki nedeni vardır; ya kullanıcı oyunu Steam Remote Play ile oynuyordur ya da oyuncu, aygıtlarını yeniden yapılandırmak için Steam Girdisi'ni kullanıyordur.

Bununla ilgili daha fazla bilgiye Steam Girdisi Oyun Kumandası Emülasyonu - En İyi Yöntemler sayfasından ulaşabilirsiniz.

Metin Girdisi


Ekrandaki metin girdileri teknik olarak ISteamInput'un bir parçası değildir, ISteamUtils'de yer alır.

Bazı referanslar:

Steam Girdisi'ni kullansanız da kullanmasanız da bunları işe yarar bulabilirsiniz.

Steam Girdisi API'ı Desteğini Entegre Etmek


Entegrasyon süreci oldukça basittir ve birkaç günden fazla sürenizi almayacaktır. Dört adımı vardır:

  1. Bir metin düzenleyicisi aracılığıyla bir oyun içi eylemler dosyası (bu dosya oyuncuların kontrolcüye atayabilecekleri bütün eylemleri Steam'e söylemeye yarar) oluşturun.
  2. Steam'de Steam Girdisi yapılandırıcısı arayüzünü kullanarak varsayılan yapılandırmanızı oluşturun.
  3. Oyununuzda kontrolcüden gelen eylemleri okumak ve gösterilecek uygun sembolleri belirlemek için Steam Girdisi API'ını kullanın.
  4. Oyun deponuzu yeni ikililerle güncelleyin ve yapılandırmanızı resmî yapılandırma olarak yayınlayın.

Adım 1 - Oyun İçi Eylemler Dosyası Oluşturmak


Oyun içi eylemler (IGA) dosyasını indirerek başlayın. Dosyayı "<Steam Install Directory>\controller_config" dizininize (eğer dizin mevcut değilse oluşturun) ekleyin. Dosyayı şu şekilde yeniden adlandırın: "game_actions_X.vdf". X oyununuzun Steam AppID'sidir. Eğer oyununuzun AppID'sini bilmiyorsanız, Steam partner sitesine giriş yaparak öğrenebilirsiniz.

Dosyayı istediğiniz bir metin düzenleyicisini kullanarak açın. Dosya, KeyValues adlı basit ve okuması kolay olan standart Valve formatındadır. Oyun İçi Eylemleri Dosya Şablonlarından işinize yarayacak birini indirebilir veya referans olması açısından Portal 2 IGA dosyasını indirmek isteyebilirsiniz.

Daha fazla detay için Oyun İçi Eylemleri Dosyası
dokümanına göz atın

Dosya Formatı


IGA dosyalarında, oyununuzdaki bütün oyun içi eylem setlerinin (IGAS) listelendiği bir adet "actions" kısmı yer alır. IGAS, bir oyuncunun araç kullanma, yaya yürüme veya menü sisteminde gezinme gibi belirli bir oyun bağlamı içerisinde yapabileceği eylemleri tanımlar. Steam Girdisi yapılandırıcısı arayüzü, her IGAS için oyunculara, bu eylemlerin kontrolcüye atanma şeklini değiştirebilecekleri bir sekme sağlar.

IGA dosyasındaki bir IGAS girdisinde "başlık" anahtarı ve değeri, ayrıca belirtilen şu alt kısımlar yer almalıdır: "StickPadGyro", "AnalogTrigger", and "Button". "StickPadGyro" ve "AnalogTrigger" kısımlarının her birinde oyuncunun sadece sırasıyla çubuk/pad/jiroskop ve analog tetiklere atayabileceği IGA'lerin bir listesi yer alır. "Buttons" kısmında sadece dijital girdilere (fiziksel ABXY butonları, ABXY modunda olan dokunmatik yüzey veya AnalogTrigger eylemi olarak kullanılmayan bir tetik) atanabilen IGA'ler yer alır.

IGA'inizi tasarlamak

Oyununuzun işlevlerini göz önünde bulundurun. Kaç tane farklı mod var? Farklı kontrollerin olmasını istediğiniz her yer için birer eylem seti oluşturmalısınız. Birçok oyunda en azından "Menü" ve "Oyun İçi" için farklı eylem setleri yer alır ancak birçok oyun bundan daha fazlasına ihtiyaç duymaktadır. Oyununuzda araç kullanıldığı durumlar veya harita ya da envanter ekranı gibi özel oyun içi menüler var mı? Bunlar için eylem setleri oluşturmak isteyebilirsiniz.

Tabii her şey için ayrı bir eylem seti oluşturmanıza gerek yok, benzer modlar için eylem seti katmanlarını kullanabilirsiniz. Örneğin eğer oyununuzda hem otomobil hem de tekne kullanılabiliyorsa "tekne" veya "otomobil" katmanına sahip bir "araç" eylem seti oluşturmak isteyebilirsiniz. Eylem seti katmanları ana eylem setinin bütün ayarlarını alırlar ve hem geliştirme ekibiniz hem de kullanıcılarınız için yapılandırmaları anlamayı ve düzenlemeyi daha anlaşılabilir bir hâle getirirler.

Eylem seti katmanlarıyla ilgili daha fazla bilgi için Eylem Seti Katmanları dokümanına göz atın.

Eylem sayısı limitleri

Şu an için azami eylem sayısı 16 analog ve 128 dijital eylemdir. Eylemlerin farklı eylem setleri tarafından paylaşabildiğini unutmayın. Bundan ötürü çoğu durumda bahsedilen azami eylem sayılarına ulaşmayacaksınız. Verilen limitlerde değişikliğe gidilebilmesi söz konudur, eğer daha yüksek bir limite ihtiyaç duyuyorsanız ve bunun için geçerli bir sebebiniz varsa lütfen bizimle irtibata geçin.

Button Eylemleri


"Button" eylemleri formatı şu şekildedir:

"<action name>" "#<localization key>"

<action name>, oyun kodunuzun Steam Girdisi API'ı ile konuşurken bu eyleme başvurmak için kullanabileceği sizin verdiğiniz dâhili addır. <localization key>, yerelleştirme kısmındaki bir girdinin adı olmalıdır (bkz. Yerelleştirme Eklemek). Yerelleştirme anahtarınızın başına "#" eklediğinizden emin olun.

Analog Tetik Eylemleri


"AnalogTrigger" eylemlerinin formatı "Button" ile aynıdır. "AnalogTrigger" eylemleri araç hızlanması gibi oyununuzun tam analog girdisi olarak algılayacağı eylemler olmalıdır. Eğer bu tür bir girdiye sahip değilseniz bu kısmı boş bırakın. Steam Girdisi yapılandırıcısı arayüzü, oyuncuların herhangi bir "Button" eylemini, "AnalogTrigger" eylemi olarak kullanılmadıkları sürece fiziksel tetiklere atayabilmelerine, imkân sağlar.

StickPadGyro Eylemleri


"StickPadGyro" eylemleri formatı şu şekildedir:

"<action name>" { "title" "#<localization key>" "input_mode" "<analog mode>" }

<action name> ve <localization key>, "Button" formatında yer alan eşleşen anahtarlarla aynıdır. <analog mode>, Steam Girdisi API'ı ile veriyi oyununuza aktarmadan önce fiziksel kontrolcüden gelen bu veriyi nasıl yorumlamamız gerektiğini söyler.

Geçerli <analog modes>'lar şunlardır:

  • "absolute_mouse" - eylemin fare gibi davranmasını beklediğiniz durumlar içindir. Birinci veya üçüncü şahıs kameraları veya gerçek bir fare imleci için kullanışlıdır.
  • "joystick_move" - karakteri hareket ettirmek için kullandığınız eylem içindir.

"absolute_mouse" ve "joystick_move"

Birinci/üçüncü şahıs ya da imleç kullanan oyununuz için bir kamera girdisi oluştururken her daim "absolute_mouse" türünü eklemeniz gerektiğini ve deltalara fare gibi reaksiyon göstermenizi ne kadar söylesek azdır zira kaliteli bir jiroskopla nişan alma veya dokunmatik yüzey girdisi için 1:1 oranında veri gereklidir. Stean Girdisi oyun kumandasından gelen analog çubuk girdisini sizin için "absolute_mouse" türü bir girdiye dönüştürebilir fakat oyun içinde uygulanan hızlandırma eğrilerinden ve ölü bölgelerden ötürü bu işlemin tersini yapmak mümkün değil.

Analog çubuk girdisi için konsol derlemelerinizle bire bir denklik istiyorsanız, "joystick_move" türünde bir eylem ekleyebilirsiniz fakat hem PlayStation hem de Switch kontrolcülerinin analog çubukla birlikte jiroskopla nişan alabilmeyi kullanabilmelerini sağlamak için lütfen derlemenizi test ederek "absolute_mouse" ve "joystick_move"'dan girdi kabul edebildiğine emin olun. Kameranın dikey pozisyonunu tekrar ortalamak için "Kamerayı Sıfırla" için dijital bir eylem de eklemek isteyebilirsiniz. XInput için otomatik nişan almayı etkinleştirdiyseniz lütfen Steam Input API'ını kullanarak aynı mantığı analog çubuk girdilerine de uygulayın ve dokunmatik yüzey/jiroskop nişan alması için de hafif de olsa biraz otomatik nişan eklemeyi göz önünde bulundurun.

"absolute_mouse"'u girdileri olarak kullanan StickPadGyro eylemleri için bir adet isteğe bağlı seçenek vardır. Eğer "os_mouse" anahtarını "1" olarak belirlerseniz oyuncudan gelen girdiyi hem İS'ye hem de oyununuza göndeririz. Eğer bu eylem tarafından kontrol edilmesi gereken görünür bir işletim sistemi imleciniz varsa, bu oldukça kullanışlıdır.

Örnek:

"menu_mouse" { "title" "#Menu_Mouse_Title" "input_mode" "absolute_mouse" "os_mouse" "1" }

Uyarı

  1. Kamera kontrolleri için "os_mouse" seçeneğini kullanmanızı hiç tavsiye etmiyoruz. Eğer oyununuzun bazı kısımlarını yamamak zorsa oyun içi eylem setleri yerine sadece menüde kullanılacak analog eylemleri kullanabilirsiniz.
  2. "os_mouse" kullandığınızda, kontrolcü girdilerinin oyun içi fare hassasiyetleri tarafından kontrol edilmesine neden olursunuz ve bu sadece tek yerel oyuncu için geçerli olur.

Adım 1.1 - Yerelleştirme Eklemek


IGA dosyanızdaki "localization" kısmında dillerin bir listesi yer almaktadır. Bunların her biri yerelleştirme anahtarlarının ve değerlerinin yer aldığı bir kısımdır. Örneğin:

"localization" { "english" { "Action_Jump" "Jump" "Action_Camera" "Camera" } "turkish" { "Action_Jump" "Zıpla" "Action_Camera" "Kamera" } }

IGA dosyanızdaki eylemler de bunların adlarını istenilen yerelleştirme anahtarını başında "#" olacak şekilde göstererek belirtmelidir. Yukarıdaki yerelleştirme anahtarlarını kullanmakla ilgili örnek eylemler:

"StickPadGyro" { "Camera" { "title" "#Action_Camera" "input_mode" "absolute_mouse" } } "Button" { "Jump" "#Action_Jump" }

Eğer oyunun çalıştırıldığı dildeki yerelleştirme kısmı bulunamazsa, oyun İngilizce olarak çalışır. Eğer İngilizce de yoksa, dizge olduğu gibi gösterilir. Desteklenen diller hakkında ayrıntılı bilgi için Tam olarak desteklenen diller belgesine bakın.

Adım 1.2 - Başlıklar ve Açıklamalar


Yapılandırmaların aynı zamanda yerelleştirilmiş başlıkları ve açıklamaları da olmalıdır. Eğer oyununuz için sadece tek bir resmî yapılandırma yapıyorsanız bununla uğraşmanıza gerek yok, size varsayılan bir başlık ve açıklama vereceğimiz için bu adımı tamamen geçebilirsiniz. Ancak eğer oyununuz için birden fazla resmî yapılandırma oluşturacaksanız bunlar için yerelleştirilmiş başlıklar ve açıklamalar da sağlamanız gereklidir.

Yapılandırma başlıkları ve açıklamaları diğer yerelleştirme anahtarlarınızla birlikte listelenmelidir. Başlık anahtarı "Title_" ile başlamalı, açıklama anahtarı da "Description_" ile başlamalıdır. İşte bir örnek:

"localization" { "turkish" { "Title_Config1" "Resmî Yapılandırma" "Description_Config1" "Bu yapılandırma X oyununun geliştiricisi tarafından oluşturuldu." "Title_Config2" "Southpaw Resmi Yapılandırması" "Description_Config2" "Bu yapılandırma X oyununun geliştiricisi tarafından oluşturuldu ve Southpaw kullanıcıları için ayarlandı." "Action_Jump" "Zıpla" "Action_Camera" "Kamera" } }

Bir yapılandırma yayınladığınız zaman (bkz. Adım 4 - Yayınlama) bu yerelleştirilmiş başlık ve açıklamalardan hangisini kullanmak istediğinizi seçebileceksiniz.

Adım 2 - Varsayılan Bir Yapılandırma Oluşturmak


IGA dosyanızı oluşturduktan sonra doğru dizinde olduğundan ve adının oyununuzun AppID'siyle uyuştuğundan eminseniz artık bir yapılandırma oluşturmaya hazırsınız demektir.

Steam'i Geniş Ekran modunda başlatın ve oyununuzun oyun detayları sayfasına gidin.

"Oyunu Ayarları"nı seçin sonra "Kontrolcü Yapılandırması" seçeneğine tıklayın. Bu esnada karşınıza çıkabilecek uyarılar IGA dosyanızdaki sorunları gösterir, bu sorunları geri dönüp düzeltmelisiniz. Yapılan en yaygın hata kapatılmamış kesme işareti veya küme işaretidir.

Eğer herhangi bir hata çıkmadıysa bu, oyununuz için boş bir kontrolcü yapılandırmasına sahip olduğunuz anlamına gelir ve yapılandırma artık bütün oyun içi eylemleri algılayabilecek vaziyettedir. Varsayılan yapılandırma oluşturmak için arayüzü kullanın. Sadece ilkini değil, bütün oyun içi eylem setleriniz için varsayılanları belirlediğinizden emin olun.

Yapılandırmayı yaptıktan sonra yerel olarak kaydedin. Oyununuz henüz IGA dosyalarını almaya hazır olmadığı için bunu yayınlamayın.

Adım 3 - Steam Girdisi API'ı


En güncel Steamworks API'na sahip olduğunuzdan emin olun. SteamWorks ile Başlarken
belgesine giderek indirebilirsiniz.

Steam Girdisi, hangi atamanın çalışacağına karar vermek için kontrolcüler için uygulama başına atama sunar ve Steam, ön plan penceresini izler. Hata ayıklayıcınızda bir kesme noktasına geldiğiniz zaman kontrolcünün yapılandırması değişeceği için bu; siz API üzerinde çalışırken kontrolcüye hata ayıklaması yapmanızı biraz zorlaştırır. Steam'in pencerenize hata ayıklama için kilitlenmesini sağlamanın iki yolu bulunur, aşağıdaki Steam URL'ini çalıştırabilirsiniz:
steam://forceinputappid/<your_game's_AppID or 0 to reset to normal operation>

veya aşağıdaki komut satırı parametrelerini Steam kısayolunuza ekleyin:
-forcecontrollerappid <your_game's_AppID

NOT:

"Steam kısayolu" dediğimiz zaman Steam istemcisinin kısayolunu kastediyoruz. Komut satırı parametreleri oyununuza değil Steam istemcisine aktarılmalıdır.

Ekranda beliren kontrolcü sembollerinin resmî sembollerini veya PSD kaynağını indirebilirsiniz. Bunlar sadece, eğer kendi çizimleriniz için bir başlangıç noktası olarak kullanmak istiyorsanız gereklidir. Öbür türlü herhangi bir kontrolcü girdisine çizimin yer aldığı dosya yolunu doğrudan atamak için API'ı kullanabilirsiniz (görsel dosyaları Steam istemcisiyle birlikte gelir).

Adım 3.1 - API Genel Bakışı


Steam Girdisi API'ı, Adım 1'deki dosyada sizin belirtmiş olduğunuz oyun içi eylemleri baz alarak oyun içi eylemleri ve setleri oluşturur.

Tam bir API referansı için ISteamInput Arayüzü belgelendirmesini ziyaret edin.

İşlevlere bir genel bakış:

  • Oyun başlatıldığı zaman Steam Girdisi'ni ISteamInput::Init ile başlatın, eylem ve set adlarını, tanıtıcılara dönüştürmek için [[api]ISteamInput::GetActionSetHandle
[/api], ISteamInput::GetDigitalActionHandle ve ISteamInput::GetAnalogActionHandle işlevlerini kullanın. API'ın diğer kısımlarında eylemleri ve setleri tanımlamak için bu tanıtıcıları kullanın.
  • Bir kontrolcü olup olmadığını anlamak için ISteamInput::GetConnectedControllers'ı kullanın. API'ın diğer kısımlarında kontrolcüleri tanımlamak için döndürdüğü tanıtıcıları kullanın.
  • Hangi kontrolcülerin hangi eylem setlerine atandığını görmek için ISteamInput::ActivateActionSet / ISteamInput::DeactivateActionSet kullanın ve eğer eylem seti katmanlarını kullanıyorsanız ISteamInput::ActivateActionSetLayer / ISteamInput::DeactivateActionSetLayer kullanın.
  • Bütün oyun içi eylemlerinizin girdi durumlarını okumak için ISteamInput::GetDigitalActionData ve ISteamInput::GetAnalogActionData'yı kullanın. En son veriyi almak için bunlardan hemen önce ISteamInput::RunFrame'i çağırabilir ya da oyununuzdaki diğer yerlerde bunu yapmak için SteamAPI_RunCallbacks'i çağırmayı kullanabilirsiniz.
  • Oyuncunun oyun içi eylemlerinize atadıklarının köken/kökenlerini almak için ISteamInput::GetDigitalActionOrigins ve ISteamInput::GetAnalogActionOrigins'i kullanın ve uygun sembolleri ekran arayüzünüzde gösterin.
  • Belirli bir kontrolcünün kontrolcü yapılandırmasında doğrudan Steam arayüzünü açığa çıkarmak için ISteamInput::ShowBindingPanel'ı kullanın. Bu sayede özelleştirme kullanıcı arayüzü yapmanıza gerek kalmaz.
  • Her kontrolcü cihazı modelini tanımlamak ve bu sayede bunlara uygun sembolleri göstermek istiyorsanız ISteamInput::GetInputTypeForHandle'ı kullanın. Bu özellikle kanepede birlikte oynanabilen eşli oyunlar ve spor oyunlarındaki gibi oyunlarda bulunan koltuk seçimi menüleri gibi şeylerin olduğu oyunlar için kullanışlıdır.
  • [/list]

    Güvenli Arayüzler

    Kontrolcü verisi ISteamInput::RunFrame çağrıldığında toplanır. Bu normalde sizin için SteamAPI_RunCallbacks tarafından her karede toplanır. Fakat eğer sürüm güvenli arayüzleri etkinleştirdiyseniz ve iyi yoklama verisi alamadığınızı fark ederseniz her kare için ISteamInput::RunFrame'i çağırmanız gerekecektir.

    Sürüm güvenli arayüzleri etkinleştirip etkinleştirmediğinizi öğrenmek için kodunuzda şu #define'ın olup olmadığına bakın:
    VERSION_SAFE_STEAM_API_INTERFACES

    Adım 3.2 - Girdi İşlemesi


    Dijital eylemlerde ISteamInput::GetDigitalActionData tarafından döndürülen veri oldukça açıktır:

    bState: eğer eylem kontrolcü tarafından gönderiliyorsa (butona basıldı, tetik çekildi, vb.) "true"dur.

    Analog eylemlerde ISteamInput::GetAnalogActionData tarafından döndürülen veri biraz daha karışıktır:

    x,y: oyun eylemine IGA dosyanızda atadığınız moda bağlıdır. - "absolute_mouse": x ve y bir önceki fare konumunun deltalarıdır. - "joystick_move": x ve y değeri -1 ve 1 arasında değişir, analog çubuğun mevcut pozisyonunu temsil eder.

    Kodunuzdayken kullanıcının farklı tür girdileri birbirleriyle ilişkilendirebilme imkânını engellemediğinizden emin olun. Oyunların bir fare ve klavye gördüklerinde oyun kumandası girdisini yok saymaya başlaması ya da oyun kumandası görünce fare ve klavyeyi yok saymaya başlaması sıklıkla gördüğümüz yaygın bir hatadır.

    Adım 3.3 - Ekrandaki Semboller

    Kontrolcünüz için ekranda bir sembol göstermek amacıyla bir oyun içi eyleme atanan fiziksel kökeni almalısınız. Oyuncu aynı eyleme birden fazla fiziksel köken atamış olabileceği için arayüzünüzün her kökeni sırayla göstermesi en iyi seçenek olacaktır. ISteamInput::GetDigitalActionOrigins ve ISteamInput::GetAnalogActionOrigins belirtilen eylem için köken sayısını döndürür ve originsOut'ta yer alan aktarılan tabloyu doldurur.

    Kökeni ilgili görsele atamak için her köken için ISteamInput::EControllerActionOrigin sıralamasını kullanabilirsiniz. Bu işlevi köken sıralamasıyla birlikte çağırdığınız zaman, Valve'ın resmi görsel setinde (Steam istemcisi yükleme dosyasında yer alır) yer alan ve buna karşılık gelen kontrolcü sembolünün .png veya .svg dosyasına giden yerel dosya yolunu döndürür. Bu yöntem Steam Girdisi tarafından tanınan bütün donanım cihazlarını destekler (yani örneğin PlayStation kontrolcüsü PlayStation butonlarını, Xbox kontrolcüsü de Xbox butonlarını gösterir). Bunun daha da iyi olan yanı gelecek için hazır olmasıdır. Valve yeni bir donanım için destek eklediği zaman bu işlev, yeni sembol varlıklarıyla birlikte oyununuzu tekrar derlemenize gereksinim duymadan otomatik olarak güncellenmiş sembolleri getirir.

    Kontrolcü sembolleri için kendi görsellerinizi sağlayabilirsiniz ancak Steam Girdisi her zaman yeni aygıtlar için destek eklediğinden ve bunların oyununuzla iyi bir şekilde çalışmasını engelleyecek tek şey kontrolcü görsellerinin bozuk ya da boş olması olacağı için geleceğe dönük düşünmenizi şiddetle tavsiye ediyoruz. İki seçeneğiniz var:
    • Bir eylem kökenini tanımadığınızda ISteamInput::GetGlyphForActionOrigin tarafından döndürülen yedek görseli kullanabilirsiniz.
    • Aynı sürümdeki Steamworks SDK'yi varken mevcut olan sembole en yakın eş değer sembolü almak için ISteamInput::TranslateActionOrigin'i çağırabilirsiniz. Ör. PS6 çarpı butonu, PS5 çarpı butonuna dönüştürülür.

    Devamlı yoklama yapın!

    Kullanıcı, yapılandırmasını istediği zaman değiştirebilir. Buna yardımcı olmak için ISteamInput::GetDigitalActionOrigins ve ISteamInput::GetAnalogActionOrigins işlevlerini çağırmanın bedelini oldukça küçük tuttuk.

    Ekranda bir istem göstereceğiniz zaman kökeni önbelleklemeyin ve ilk sonuçları göstermeye devam edin. Bunun yerine her karenin kökenini tekrar toplamanızı ve bununla eşleşen istemi göstermenizi tavsiye ediyoruz. Bu yolla, eğer kullanıcı gördükleri istem sonucu yapılandırmalarını değiştirmeye karar verirse yapılandırma ekranından geri döndükleri zaman istemler yeni kökenlerle eşleşecek şekilde otomatik olarak güncellenir.

    Adım 4 - Yayınlama


    Oyununuz kontrolcüyle çalışabilir vaziyete geldikten sonra artık bu güncellemeyi yayınlamaya hazırsınız demektir. Yeni oyun güncellemenizi yayınlamalı ve bu yapılandırmayı resmî olarak işaretlemelisiniz. Bir oyuncu oyununuzu ilk defa başlattığı zaman, resmî yapılandırmalar otomatik olarak yüklenir. Bu, oyuncuya oyununuzu direkt olarak başlatabilme ve yapılandırma ekranına gitmeden hemen oynayabilme imkânı tanır.

    Tavsiye edilen süreç şu şekilde:

    Adım 4.1 - Oyununuzu güncelleyin

    • Steam deponuzu oyunun yeni sürümüyle güncelleyin

    Adım 4.2 - Yapılandırmanızı yayınlayın

    • Steam'i Geniş Ekran modunda başlatarak kontrolcü yapılandırması kısmında oluşturmuş olduğunuz varsayılan yapılandırmaya gidin.
    • (Y) butonuna veya ekranın altında yer alan "Farklı Kaydet" butonuna basın.
    • Açılır pencerede arzu ettiğiniz yerelleştirilmiş başlığı ve açıklamayı seçin, profili "HERKESE AÇIK" olarak değiştirin ve "YAYINLA" butonuna tıklayın.
    • Bir onaylama ve herkese açık yapılandırmanın dosya ID'sini alacaksınız. ID'yi kopyalayın/kaydedin.

    Adım 4.3 - Yapılandırmayı resmî olarak işaretleyin

    • Steamworks partner sitesine giderek oyununuzun sayfasını açın.
    • "Uygulama" sekmesinden "Steam Girdisi" seçeneğini seçin.

      steamworks_steam_input.png

    • "Steam Girdisi Şablonu" adlı kısma ilerleyin. Açılır menüden "Özel Yapılandırma" seçeneğini seçin. (Eğer oyununuza yerel destek eklemeyi planlamıyor ve ortak eski mod ön ayarlarından seçmek istiyorsanız bunu buradan yapacaksınız.)

      steamworks_steam_input_custom_config.png

      Aşağıdaki seçeneklerden "Özel Yapılandırma Ekle"'yi seçin.

      steamworks_steam_controller_custom2.png

    • Herkese açık yapılandırmanızın dosya ID'sini kutuya yapıştırın ve "Tamam" butonuna tıklayın.

      steamworks_steam_controller_custom3.png

    • Her zaman yaptığınız gibi partner sitesine giderek uygulama değişikliklerinizi yayınlayın.

    Eğer arzu ederseniz oyununuz için birden fazla resmî yapılandırma belirleyebilirsiniz. Örneğin resmî bir "Solak" modu oluşturmak isteyebilirsiniz.

    Bunu yapmak için birden fazla yapılandırma oluşturun ve adım 4.2'de anlatıldığı gibi bunların her birini yayınlayın. Ardından adım 4.3'e geldiğiniz zaman yapılandırmalarınızın tüm dosya ID'lerini, birbirlerinden virgülle (,) ayrılmış olarak, kutuya yapıştırın. Listedeki ilk yapılandırmaya en yüksek önem seviyesi verilir ve yeni oyuncular için varsayılan olarak bu seçilir. Her biri için başlık ve açıklama eklemeyi unutmayın.

    Resmî yapılandırmalarınız yayınladığı zaman "Özel Yapılandırma" kısmında gösterilirler:

    steamworks_steam_input_branch_settings.png

    Her yapılandırmanın direkt bağlantısını alabilir, hangi kontrolcü türü için olduğunu görebilir, hangi beta dalında olduğunu görebilir veya silebilirsiniz. Yeni bir resmî yapılandırma oluşturduğunuzda bu kısımda yer alan sil/ekle işlevlerini kullanarak mevcut yapılandırmayı değiştirebilirsiniz.

    Steam Girdisi'ne Kontrolcü Eklemek


    Şimdi Steam Girdisi'ni ne tür bir kontrolcünün kullanacağını belirlemelisiniz. Steam Girdisi API'ını kullanıyorsanız; kontrolcü desteğiniz yayınlandıktan sonra yeni kontrolcülerin siz bir şey yapmadan varsayılan olarak çalışmasını sağlamak için "Gelecekteki Bütün Cihazlar"ı seçmelisiniz.

    steamworks_steam_input_optin_settings.png

    Bu kutucukları işaretlediğiniz zaman işaretlenen kontrolcüler kendi standart oyun kumandası girdi protokollerini kullanmak yerini Steam Girdisi'ni kullanırlar.

    Resmî yapılandırmalarınızı güncellemek

    Yapılandırmanızı güncellemenin iki yolu vardır.
    1. Yapılandırmayı kökünden etkileyebilecek nitelikte bir değişiklik (atanması mecburi olan bir eylem seti eklemek/silmek gibi) yapacaksanız yeni yapılandırmayı desteklenen her bir kontrolcü türü için yüklemeli ve eski yapılandırmayı silmelisiniz. Ayrıca yapılandırmayı oluşturan hesapla Steam Girdisi Yapılandırması tarayıcısına gitmeli ve şuna basarak silindi olarak işaretlemelisiniz:

      steamworks_remove_community_config.png
    2. İsteğe bağlı bir değişiklik (eylem adı yerelleştirmeleri için yeni bir dil eklemek veya her yapılandırmada atanması mecburi olmayan isteğe bağlı yeni bir eylem eklemek gibi) yapacaksanız bir yeni yapılandırma yükleyin ve "Eylem Bloku Kullan" kutucuğunu işaretleyerek bu yapılandırmanın eylem blokunun seçili dallarda öncelikli olarak kullanılmasını sağlayın.

      steamworks_steam_input_use_action_block.png

    İpuçları

    Ayrılmış Menü Eylemleri

    Ana oyun setinizdeki eylemleri tekrar kullanmak yerine menü kontrolleriniz için ayrı bir oyun içi eylem seti oluşturmanızı tavsiye ediyoruz. Birçok müşteri bu menü kontrolleri setini değiştirmeye gereksinim duymayacak olsa da değiştirmeye gereksinim duyacak oyunculara (engelli oyuncular gibi) bu şekilde kolay bir yol sunabilirsiniz.

    Özel Simgeler

    Steam Girdisi sistemi aynı zamanda birden fazla farklı türde ekran menüsü de oluşturabilir. Kendi .png simgelerinizi <your base game directory>TouchMenuIcons/*.png'ye koyduğunuz zaman bu simgeler oyununuzun dokunmatik/radyal menüleri listesinde başlarda gösterilir. Bu sayede kendi ekran radyal veya dokunmatik menülerinizi, oyun/arayüz koduna gereksinim duymadan belirli eylemlere atanmış simgelerle özelleştirebilirsiniz. Varsayılan yapılandırmanızda radyal veya dokunmatik menüler olmasa dahi bir geliştirici olarak bunu yapmak isteyebilirsiniz. Kullanıcılar tarafından değiştirilen yapılandırmaların aynı zamanda bunlara erişimi olacağı için bunu yaptığınız zaman kullanıcılar sizin resmî simge çizimlerinizi kullanarak güzel temalara sahip menüler oluşturabilir.