Mobil Giriş

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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:

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örCihaz, 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 SoluFiziksel 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ğ ManzaraFiziksel 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.
PortreFiziksel 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 StarterGuiEnum.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çenekAçıklama
ClickToMoveKullanı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
DynamicThumbstickKullanı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.
ScriptableTüm varsayılan kontrolleri devre dışı bırakır ve sizin kendi kontrol sisteminizi yazılım etmenizi sağlar.
Thumbpad
ThumbstickEkranı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.
UserChoiceKullanı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ğerTürAçıklama
eylem adıdiziBağladığınız eylem için bir tanımlayıcı yapısı. EylemName'i ContextActionService ile eylem bağlantısını düzenleyebilirsiniz.
fonksiyonToBindfonksiyonBelirli girdi başlatıldığında çağırılan işlev. Bu işlev üç argüman alır:
  • Eylem adına eşdeğer bir yol.
  • enum.UserInputState bir fonksiyonu çağırdığında giriş durumunu tanımlayan bir şeriftir.
  • İşlev çağrısında kullanılan InputObject öğesi.
触摸按钮 oluşturbooAçık olduğunda, oyun bir mobil cihazda çalışırken ekranda bir düğme oluşturur.
輸入TürleritupluEnvanter 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ğla
ContextActionService: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 ayarla
ContextActionService: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 ayarla
ContextActionService: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 ayarla
ContextActionService: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 ayarla
ContextActionService: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

PC
Mobil

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ü gerektirir
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)