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 nedenle geniş bir izleyici için deneyim tasarlarken çapraz platform erişilebilirliğini düşünmek önemlidir.Fare ve klavye girişleri ve oyun kolu dahil olmak üzere çeşitli giriş cihazlarını desteklemeyi hedeflemelisiniz.

Mobil bir deneyim tasarlarken, deneyiminizde kullanıcının kullanmasını planladığınız cihaz yönelimi düşünün, ardından mobil ile ilgili aşağıdaki giriş görevlerini gerçekleştirmek için girişlerinizi ContextActionService:

Cihaz yönelimi

Telefonlarda ve tabletlerde, cihaz yönü çoğunlukla kullanıcı deneyimini ve etkileşimini etkiler.Örneğin, manzara modu iki parmakla en iyi şekilde çalışırken, portre modu bir parmak arayüzüne ödün verebilir.

Varsayılan olarak, Roblox deneyimleri manzara modunda çalışır, deneyimin kullanıcının cihazı döndüğünde manzara "sol" ve manzara "sağ" arasında geçiş yapmasına izin verir.Ancak, deneyimler istenirse belirli bir yöne kilitlenebilir.

Yönlendirme modları

İki sensör tabanlı mod ve üç kilitli mod dahil olmak üzere beş farklı yönlendirme modu vardır.

Sensor modları
Manzara sensörüDeneyimin daima manzara modunda göründüğü varsayılan Roblox ayarı (portre modu yok) ve cihazın deneyim görüşünün daima yukarı doğru yönlendirilmesini sağlamak için fiziksel yönünü tespit etmesi.
SensörCihaz, deneyim görüşünün daima yukarı doğru yönlendirilmesini sağlamak için fiziksel yönünü tespit eder ve gerektiğinde manzara ve portre modu arasında geçiş yapar.
Kilitli modlar
Manzara solduFiziksel bir ev düğmesine sahip cihazlarda, ana düğme görüntünün solunda bulunur.Sanal bir ana ekran/ navigasyon çubuğu olan cihazlarda, dokunma bölgesi görüntünün altındadır.
Manzara sağFiziksel bir ev düğmesine sahip cihazlarda, ev düğmesi görüntünün sağındadır.Sanal bir ana ekran/ navigasyon çubuğu olan cihazlarda, dokunma bölgesi görüntünün altındadır.
PortreFiziksel bir ev düğmesine sahip cihazlarda, ev düğmesi ekranın altındadır.Sanal bir ana ekran/ navigasyon çubuğu olan cihazlarda, dokunma bölgesi görüntünün altındadır.

Yönlendirme özellikleri

Bir yönelim ayarlarken, başlangıç yönelimi, deneyim içi yönelim ve mevcut yönelimi ayarlayabilirsiniz.

Başlangıç ​​odaklanması

StarterGui.ScreenOrientation bir dünyaiçin varsayılan yönü ayarlar. Kabul edilebilir değerler şunları içerir:

Bu özellik deneyime katılan tüm yeni kullanıcıları etkilediğinden, değerini Studio içinde StarterGuiEnum.ScreenOrientation içinde ayarlayabilirsiniz.

Deneyim içi yönlendirme

PlayerGui.ScreenOrientation deneyimin yönünü bir kullanıcı için açıkça değiştirir.Bu özellik bir Enum.ScreenOrientation 'de bir LocalScript enuma ayarlanırsa, deneyim hemen ayarı eşleştirmek için kendini yönlendirir.Bu, bir deneyimin bir mini oyun için görüntüyü portre olarak kilitlemesi gibi belirli bir deneyim sağlaması gerektiğinde yararlı olabilir.

Aşağıdaki kod örneği bir LocalScript 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önelim

PlayerGui.CurrentScreenOrientation mevcut cihaz yönünü alır. Mümkün olan değerler şunlardır:

Aşağıdaki kod, kullanıcının mevcut ekran yönünü basar:


local Players = game:GetService("Players")
local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")
print(playerGUI.CurrentScreenOrientation)

Karakter hareket modları

Roblox, mobil cihazlardaki kullanıcıların deneyiminizde nasıl hareket edebileceklerini değiştirmek için ayarlayabileceğiniz birkaç StarterPlayer sunar.

StarterPlayer.DevTouchMovementMode değerlerini takip edilenbirine değiştirerek Roblox deneyimleri için mobil hareket kontrol şemaları ayarlayabilirsiniz:

SeçenekAçıklama
ClickToMoveKullanıcılar sadece bir hedef konuma dokunarak deneyimden geçebilir.Bu mod, ekranın sağ alt bölgesinde bir atlama düğmesi içerir.Otomatik atlama bu hareket modunda daima aktif.
DPad
DynamicThumbstickDinamik bir joystick, kullanıcının başlangıçta bastığı yere görünür.Bu mod, ekranın sağ alt bölgesinde bir atlama düğmesi içerir.Bu, mobil kullanıcılar için varsayılan kullanıcı ayarıdır, eğer UserChoice ayarlaedilmişse.
ScriptableTüm varsayılan kontrolleri devre dışı bırakır ve kendi kontrol şemasınızı kodlamanıza izin verir.
Thumbpad
ThumbstickEkranın sol alt bölgesinde bulunan bir mobil joystick.DynamicThumbstick 'den farklı olarak, küçültme çubuğu konumu statiktir ve kullanıcı ekrana dokunduğunda pozisyonu değişmez.
UserChoiceKullanıcıların deneyim içi Ayarlar menüsünden istedikleri kontrol düzenini seçmelerine izin verir. Bu, deneyimler için varsayılan hareket modudur.

Otomatik atlama

When StarterPlayer.AutoJumpEnabled etkinleştirildiğinde, kullanıcının karakteri bir platformun kenarına yaklaştığında boşluklar arasında otomatik olarak atlar.StarterPlayer.AutoJumpEnabled mobil cihazlar için varsayılan olarak etkinleştirilir.

Bu özelliği devre dışı bırakmak için StarterPlayer.AutoJumpEnabled kapatın ve kullanıcıların yalnızca anahtar bağlantılarını kullanarak atlamasını zorlayın.

Özel Mobil Düğmeler

Özel mobil düğmeler eklemek için, aşağıdaki parametleri alan ContextActionService:BindAction() yöntemini kullanın:

DeğerleriTürAçıklama
actionNamediziBağlantı yaptığınız eylem için bir tanımlayıcı dize. Bağlantıyı düzenlemek için eylemAdını ContextActionService diğer işlevlerle kullanabilirsiniz.
functionToBindfonksiyonBelirtilen giriş tetiklendiğinde çağrılacak işlev. Bu işlev üç argüman alır:
  • Eylem adına eşit bir dize.
  • Fonksiyon çağrıldığında giriş durumunu tanımlayan bir Enum.UserInputState çıkış durumu.
  • Fonksiyon çağrısında kullanılan InputObject .
createTouchButtonboşluklıDoğru olduğunda, oyun bir mobil cihazda çalışırken ekranda bir düğme oluşturur.
inputTypestuple i̇ngilizceİşlevle bağlantı kurmayı planladığınız girişler, örneğin Enum.KeyCode 'den enum değerleri.

Aşağıdaki kod örneğini kullanarak, ekranda bir düğme oluşturan ve ayrıca bir klavye ve oyun kolu girişi kabul eden Etkileşim eylemi oluşturabilirsiniz:


local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- Eylemi işlevle bağla
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)

Özel bir düğme eklendikten sonra, ContextActionService tarafından oluşturulan ekran düğmelerini özelleştirmek için birkaç işlevten birini kullanabilirsiniz BindAction() .

  • Bir mobil düğme için metin etiketini değiştirmek için, SetTitle() dize ve bir başlık diziile çağrın actionName.
  • Diğer GUI düğmeleri gibi özel bir görüntü kullanmak için, SetImage() yöntemini çağırın ve aşağıdaki örnek varlık kimliğini seçtiğiniz bir görüntü ile değiştirin.
  • Bir düğmenin konumunu ayarlamak için, bir SetPosition() konum değeri ile UDim2 çağırın.

-- Buton etiketini "Konuş" olarak ayarla
ContextActionService:SetTitle("Interact", "Talk")
-- Buton görüntüsünü ayarla
ContextActionService:SetImage("Interact", "rbxassetid://104919049969988")
-- Buton konumunu ayarla
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))

Kontext Bağımlı Girişler

Mobil cihazlar için geliştirirken, bir tek düğmenin yaptığı şeyi kontekste göre değiştirmek isteyebilirsiniz.Mobil cihazlardaki ekran alanı sınırlı olduğundan, karakterin yapabileceği şeylere dayanarak farklı eylemler gerçekleştiren kapsayıcı düğmelere başvurun.

Örneğin, kullanıcı altın bir sandığın yanında dururken aktif bir "Topla" düğmesi görüntüleyebilirsiniz, fonksiyona bağlı collectTreasure() :


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:SetTitle("Interact", "Collect")
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))

oynanışsırasında başka bir noktada, kullanıcı bir NPC'ye yakın durduğunda düğmeyi "Konuş" olarak değiştirebilirsiniz.Mevcut düğmeyi kaldırmak yerine, başka bir yerleştirmek için mevcut "Interact" aksiyonbasitçe BindAction() çağırabilirsiniz, hedef işlev ve düğme başlığını değiştirerek:


ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
ContextActionService:SetTitle("Interact", "Talk")

Diğer cihazları tespit et

Çapraz platform deneyimlerinde, aktif olarak kullanılan cihaz için giriş seçenekleri görüntüleyerek kullanıcının tercih edilen giriş seçeneklerini referans olarak gösterilmesi önemlidir.Örneğin, bir mobil cihazın bir fare ve klavyesi veya oyun kolu bağlı olabilir veya masaüstünde bir dokunma ekranı etkinleştirilebilir.Birden fazla giriş kaynağı etkinleştirildiğinde, kullanıcının son kullandığı giriş cihazını almak için GetLastInputType() kullanabilirsiniz.

Bir temel olarak, aşağıdaki ModuleScript 'yi kullanabilirsiniz, bunu ReplicatedStorage içine yerleştirin ve kullanıcının giriş yazalmak için KullanıcıGirişModülü olarak yeniden adlandırın, ardından UI düzenini veya konteyneri deneyiminizin özel gereksinimlerine uyarlayabilirsiniz.


local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Cihazın aktif klavyesi ve fare varsa, bu girişleri varsayalım
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Aksi takdirde, cihaz dokunma yeteneğine sahipse ancak klavye ve fare yoksa, dokunma girişini varsayalım
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Aksi takdirde, cihazın aktif bir oyun kolu varsa, oyun kolu girişini varsayalım
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ıGirişModülü betiği yerleştirildikten sonra, kullanıcının son girdi yazalmak için aşağıdaki kod örneğini bir LocalScript kullanın:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Modül gerektir
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)