Tüm Roblox oturumlarının yarısından fazlası mobil cihazlarda oynanır, bu yüzden geniş bir izleyici için bir deneyim tasarlarken kros platformlardaki erişilebilirlik göz önünde bulundurulmalıdır. Tüm çeşitlilik giriş cihazlarını desteklemelidir, bunlar arasında fareniz ve klavyeniz .
Bir mobil deneyim tasarlarken, kullanıcınızın deneyiminizde kullanmasını planladığınız dispositif yönlendirmesi dikkate alın, ardından girdilerinizi ContextActionService ile entegre ederek şu mobil ilgili girdi görevlerini yerine getirin:
- Ekranda görünür düğmelere oluştur sadece mobil cihazlarda görünebilir.
- Diğer giriş cihazlarını algılayın, bir fare veya klavye gibi, bir mobil tablete bağlı bir mouse veya klavye gibi, kullanıcıya doğru ekran işaretlerini sağlamak için.
Cihaz Orientasyonu
Telefonlar ve tabletlerde, cihaz yönü kullanıcı deneyimine ve etkileşime önemli ölçüde etkiler. Örneğin, portre modu iki parmak ile çalışırken, yüz modu tek parmak arayüzüne uyabilir.
Varsayılan olarak, Roblox deneyimleri portre modunda çalışır, böylece kullanıcının cihazı döndüğünde deneyimlerin sol ve sağ portreleri arasında değişmesine izin verir. Ancak, deneyimler istediğiniz yöneğe kilitlenebilir.
Yönlendirme Modları
İki sensör tabanlı mod ve üç kilitli mod dahil olmak üzere beş farklı yönlendirme modu vardır.
Sensör Modları | |
---|---|
Peyzaj Sensörü | Deneyim her zaman portre modu olmadan yerleşik olarakLandscape modunda görünür ve cihaz, deneyimin her zaman yukarı doğru yönlendirilmesini sağlamak için fiziksel yönlendirmeyi tespit eder. |
Sensör | Cihaz, deneyim görüntüsünün her zaman yukarı doğru yönlendiğinden emin olmak için fiziksel yönelimini algılar ve arzu edildiğinde portre moduna geçer. |
Kilitli Modlar | |
---|---|
Sahne Solu | Fiziksel bir ev düğmesine sahip cihazlarda, ev düğmesi göstergenin solundadır. Sanal bir ev/Navigasyon çubuğuna sahip cihazlarda, dokunma bölgesi göstergenin altındadır. |
Sağ Manzara | Fiziksel bir ev düğmesine sahip cihazlarda, ev düğmesi göstergenin sağındadır. Sanal bir ev/Navigasyon çubuğuna sahip cihazlarda, dokunma bölgesi göstergenin altındadır. |
Portre | Fiziksel bir ev düğmesine sahip cihazlarda, ev düğmesi ekranın altındadır. Sanal bir ev/Navigasyon çubuğuna sahip cihazlarda, dokunma bölgesi ekranın altındadır. |
Yönlendirme Özellikleri
Bir yön ayarlarken, Yönlenmeyi Başlatma Eğilimi, Deneyimden Başlayan Yönlenme ve Mevcut Yönlenme ayarlarını ayarlayabilirsiniz.
Yönlendirmeyi Başlatıyor
StarterGui.ScreenOrientation bir dünyaiçin varsayılan yönlendirmeyi ayarlar. Kabul edilebilir değerler arasında:
Çünkü bu özellik deneyime katılan tüm yeni kullanıcıları etkiler, değerini StarterGui → Enum.ScreenOrientation içinde Studio'da ayarlayabilirsiniz.
Tecrübeli Olmayan Yönlendirme
PlayerGui.ScreenOrientation deneyimin yönünü kullanıcı için açıkça değiştirir. Bu özellik Class.LocalScript içindeki bir Enum.ScreenOrientation enumuna ayarlandığında deneyim anında yönünü ayarlar. Bu, bir deneyimin belli bir deneyim sunması gerektiğinde yararl
Aşağıdaki kod örneği bir LocalScript içinde ekran yönünü portre olarak ayarlar:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")task.wait(2)playerGUI.ScreenOrientation = Enum.ScreenOrientation.Portrait
Mevcut Yönlendirme
PlayerGui.CurrentScreenOrientation şimdiki cihaz yönlendirmeyi alır. Olası değerler arasında:
Aşağıdaki kod kullanıcının mevcut ekran yönlendirmeyi basar:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")print(playerGUI.CurrentScreenOrientation)
Karakter Hareket Modları
Roblox, mobil cihazların kullanıcılarının deneyiminizde nasıl hareket edebileceğini değiştirmek için birkaç StarterPlayer özelliği sunuyor.
Roblox deneyimleri için mobil hareket kontrolü şemalarını değiştirerek StarterPlayer.DevTouchMovementMode değerlerinden biri ile takip edilenayarlayabilirsiniz:
Seçenek | Açıklama |
---|---|
ClickToMove | Kullanıcılar sadece bir hedef bölgesine dokunarak deneyimde hareket edebilir. Bu moda, ekranın sağ alt kısmındaki bir atlama düğmesi de dahil edilmiştir. Otomatik atlama bu hareket modunda her zaman aktifdir. |
DPad | |
DynamicThumbstick | Kullanıcının başlangıçta aşağıya basması gereken bir dinamik başlık görünür. Bu mod, ekranın sağ alt kısmındaki bir atlama düğmesini içerir. Bu, UserChoice ayarının varsayıldığında mobil kullanıcılar için ayarlakullanıcı ayarıdır. |
Scriptable | Tüm varsayılan kontrolleri devre dışı bırakır ve sizin kendi kontrol sisteminizi yazılım etmenizi sağlar. |
Thumbpad | |
Thumbstick | Ekranın sol alt bölgesinde bulunan bir mobil başlık. DynamicThumbstick ile aynı olmayan olarak, başlık pozisyonu statik olup ekranın kullanıcı tarafından dokunulduğunda değişmez. |
UserChoice | Kullanıcılar deneyim menüsünden istedikleri kontrol sistemini seçmelerine izin verir. Bu, deneyimler için varsayılan hareket modudur. |
Otomatik Zıplama
Class.StarterPlayer.AutoJumpEnabled aktifleştirildiğinde, kullanıcının karakteri platformun kenarına yaklaştığında otomatik olarak boşluklar arasında atlar. StarterPlayer.AutoJumpEnabled mobil cihazlar için varsayılır olarak etkin.
Bu özelliği devre dışı bırakmak için StarterPlayer.AutoJumpEnabled 를 devre dışı bırakın.
Mobil Düğmelere Ekleme
Mobil düğmeler eklemek için ContextActionService:BindAction() yöntemini kullanın.
Class.ContextActionService:BindAction()|BindAction() yöntemi şu parametreleri alır:
Değer | Tür | Açıklama |
---|---|---|
eylem adı | dizi | Bağladığınız eylem için bir tanımlayıcı yapısı. EylemName'i ContextActionService ile eylem bağlantısını düzenleyebilirsiniz. |
fonksiyonToBind | fonksiyon | Belirli girdi başlatıldığında çağırılan işlev. Bu işlev üç argüman alır:
|
触摸按钮 oluştur | boo | Açık olduğunda, oyun bir mobil cihazda çalışırken ekranda bir düğme oluşturur. |
輸入Türleri | tuplu | Envanter değerleri gibi işlevle bağlanacak girdileriniz. |
Ekranda bir düğme oluşturan ve ayrıca bir klavye ve bir oyun konsolu girişini de kabul eden bir Etkileşim eylemi oluşturmak için şu kod örneğini kullanabilirsiniz:
local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- İşlevi bağlayın
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
Mobil Düğmelere Kaldırma
Ekrandaki bir mobil düğmeyi kaldırmak için, Class.ContextActionService:UnbindAction()|UnbindAction() kullanıyor, eylem adını Class.ContextActionService:BindAction()|BindAction() ile geçiyor.
Önce oluşturulan Etkileşim aksiyonbağlantısını kesmek için aşağıdaki kod örneğini kullanın:
-- Eylemi adına bağlaContextActionService:UnbindAction("Interact")
Buton Kullanıcı Arayüzü Özelleştirme
Class.ContextActionService ile oluşturulan on-screen düğmelerini özelleştirmek için birkaç işlevden birini kullanabilirsiniz.
Buton Teksti
Mobil düğme için yazı etiketini değiştirmek için, aksiyon adı iletişim kutusu ve bir başlık ile aşağıdaki kodu çağırın: SetTitle() ile bir eylem adı ve bir başlık:
-- Buton etiketini "Konuş" olarak ayarlaContextActionService:SetTitle("Interact", "Talk")
Buton Görüntüsü
Mobil düğmelere, diğer GUI düğmelerinde kullanılan Class.ContextActionService:SetImage()|SetImage() yöntemini kullanarak özel görüntüler kullanabilirler.
Buton görüntüsü ayarlamak için aşağıdaki örnek kodu kullanın, varlık kimliğini seçiminizle bir görüntüye değiştirin:
-- Buton resmini ayarlaContextActionService:SetImage("Interact", "rbxassetid://0123456789")
Buton Konumu
Varsayılan olarak, ekranın sağ alt kısmı yakındaki yeni bir düğme'nin konumu görünür. Mobil cihazlarda düğme yerleştirmeyi dikkatlice göz đönürmelisiniz ve başparmakların ve ellerinizin konumlarını hatırlayın.
Aşağıdaki örnek kodu kullanarak bir düğmenin SetPosition() yöntemiyle konumunu ayarlayın:
-- Butonun konumunu ayarlaContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
Konum Bağımlı Girdiler
Mobil cihazlar için geliştirirken, tek bir düğmenin konumunu değiştirmek isteyebilirsiniz. Mobil cihazların ekran alanı sınırlı olduğundan, karakterin yapabileceği farklı eylemleri yerine getiren kapsayıcı düğmelere sahip olmak isteyebilirsiniz.
Örneğin, kullanıcının bir altın sandığının yanında durduğunda aktif bir "Topla" düğmesini gösterebilirsiniz:
Aşağıdaki kod örneğini kullanarak "Topla" olarak adlandırılan ve "Toplama" olarak bağlantılı olan bir mobil düğme oluşturun:
local ContextActionService = game:GetService("ContextActionService")
local function collectTreasure(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Collect treasure")
end
end
ContextActionService:BindAction("Interact", collectTreasure, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
-- Ekranı mavi "Tak" butonuna ayarla
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")
oyunbaşka bir noktasında, kullanıcının bir NPC'nin yakınında durduğunda "Konuş" düğmesine değiştirebilirsiniz. Mevcut düğmeyi eklemek veya kaldırmak yerine, mevcut Etkileşim aksiyonüzerinde ContextActionService:BindAction() kullanabilirsiniz, işlevi ve düğme görüntüsünü değiştirerek.
Mevcut düğme etiketini "Konuş" olarak ayarlamak ve talkToNPC'ye bağlamak için aşağıdaki kod örneğini kullanın:
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)-- Ekranı sarı "Konuş" düğmesine ayarlaContextActionService:SetImage("Interact", "rbxassetid://0011223344")
Diğer Cihazları Tespit Etme
Kavga platformları arasındaki deneyimlerde, UI'yi ve görüntüyü düzgün bir şekilde bağlayan anahtar kısayollarını ayarlamak için kullanıcının mevcut cihazını bilmek gerekir.
Örneğin, bir kullanıcı hazine sandığına yaklaştığında ve altın toplama bağlantılı bir eylem varsa, mobil kullanıcılara bir "Toplama" butonu ve masaüstü kullanıcılara bir "T" simgegösterebilirsiniz.
Bir mobil cihazın da bir fare ve klavye veya oyun konsolu ile bağlı olabileceğini unutmayın. Ayrıca, bir masaüstünün bir touchscreen ile etkinleştirilmiş olabileceği de mümkündür. Aktif olarak kullanılan cihaz için kullanıcının tercih
Bu durumlarda, UserInputService kullanılarak hangi giriş cihazlarının etkinleştirildiğini tespit edebilirsiniz. Eğer birden fazla giriş cihazı etkinleştirilmişse, kullanıcının son kullanılan giriş cihazını göstermek için UserInputService:GetLastInputType() kullanın.
Class.ReplicatedStorage içinde yer alan ReplicatedStorage , kullanıcının giriş yazalmak için kullanabilirsiniz, ardından kullanıcının giriş türünü Adaptör'e ayarlayabilirsiniz, ardından kullanıcının giriş türünü özelleştirebilirsiniz.
Aşağıdaki ModuleScript ile etkin giriş cihazlarını ve son kullanılan giriş cihazını kontrol etmek için kontrol edin:
local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Cihazın aktif klavye veya fare varsa, bu girdileri varsayın
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Aksi takdirde, cihazın dokunma yeteneği varsa, ancak klavye veya faren yoksa, dokunma girişini varsayın
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Aksi takdirde, cihazın aktif bir oyun konsolu varsa, oyun konsolu girişini varsayın
elseif UserInputService.GamepadEnabled then
inputTypeString = "Gamepad"
end
function UserInput.getInputType()
local lastInputEnum = UserInputService:GetLastInputType()
if lastInputEnum == Enum.UserInputType.Keyboard or string.find(tostring(lastInputEnum.Name), "MouseButton") or lastInputEnum == Enum.UserInputType.MouseWheel then
inputTypeString = "Keyboard/Mouse"
elseif lastInputEnum == Enum.UserInputType.Touch then
inputTypeString = "Touch"
elseif string.find(tostring(lastInputEnum.Name), "Gamepad") then
inputTypeString = "Gamepad"
end
return inputTypeString, lastInputEnum
end
return UserInput
Kullanıcı Girisi Modülü kodu dünya, bir LocalScript içinde kullanıcının son giriş yazalmak için şu kod örneğini kullanın:
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- Modülü gerektirirlocal UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))local currentUserInput, inputEnum = UserInputModule.getInputType()print(currentUserInput, inputEnum)