Snap Tap Movement

スクリプトコード
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- Wait for character and humanoid
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
player.CharacterAdded:Connect(function(newCharacter)
character = newCharacter
humanoid = newCharacter:WaitForChild("Humanoid")
end)
-- Disable default controls
local PlayerModule = require(player:WaitForChild("PlayerScripts"):WaitForChild("PlayerModule"))
local controls = PlayerModule:GetControls()
controls:Disable()
-- Input tracking
local keys = {
[Enum.KeyCode.W] = false,
[Enum.KeyCode.S] = false,
[Enum.KeyCode.A] = false,
[Enum.KeyCode.D] = false,
[Enum.KeyCode.Space] = false
}
-- Last pressed stacks for opposing directions
local verticalStack = {} -- W, S
local horizontalStack = {} -- A, D
local function removeFromStack(stack, key)
for i = #stack, 1, -1 do
if stack[i] == key then
table.remove(stack, i)
end
end
end
local function updateStack(stack, key, isPressed)
removeFromStack(stack, key)
if isPressed then
table.insert(stack, key)
end
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if keys[input.KeyCode] ~= nil then
keys[input.KeyCode] = true
if input.KeyCode == Enum.KeyCode.W or input.KeyCode == Enum.KeyCode.S then
updateStack(verticalStack, input.KeyCode, true)
elseif input.KeyCode == Enum.KeyCode.A or input.KeyCode == Enum.KeyCode.D then
updateStack(horizontalStack, input.KeyCode, true)
end
end
end)
UserInputService.InputEnded:Connect(function(input)
if keys[input.KeyCode] ~= nil then
keys[input.KeyCode] = false
if input.KeyCode == Enum.KeyCode.W or input.KeyCode == Enum.KeyCode.S then
updateStack(verticalStack, input.KeyCode, false)
elseif input.KeyCode == Enum.KeyCode.A or input.KeyCode == Enum.KeyCode.D then
updateStack(horizontalStack, input.KeyCode, false)
end
end
end)
RunService.RenderStepped:Connect(function()
if not humanoid or not character:IsDescendantOf(workspace) then return end
-- Handle jumping
if keys[Enum.KeyCode.Space] then
humanoid.Jump = true
end
local moveDir = Vector3.new(0, 0, 0)
-- Vertical movement (Snap Tap)
if #verticalStack > 0 then
local activeKey = verticalStack[#verticalStack]
if activeKey == Enum.KeyCode.W then
moveDir += Vector3.new(0, 0, -1)
elseif activeKey == Enum.KeyCode.S then
moveDir += Vector3.new(0, 0, 1)
end
end
-- Horizontal movement (Snap Tap)
if #horizontalStack > 0 then
local activeKey = horizontalStack[#horizontalStack]
if activeKey == Enum.KeyCode.A then
moveDir += Vector3.new(-1, 0, 0)
elseif activeKey == Enum.KeyCode.D then
moveDir += Vector3.new(1, 0, 0)
end
end
if moveDir.Magnitude > 0 then
humanoid:Move(moveDir.Unit, true)
else
humanoid:Move(Vector3.new(0, 0, 0), true)
end
end)
説明
Snap Tap is an advanced movement feature that gives instant priority to the most recently pressed movement key. When two opposite movement keys (such as A and D, or W and S) are held at the same time, the latest key pressed automatically becomes active without requiring the other key to be released. This allows for faster direction changes, smoother movement, and more responsive controls during gameplay. Once the active key is released, control instantly returns to the previously held key.
コメント (0)
- 最初のコメントを投稿しましょう。
よくある質問
- Snap Tap Movementスクリプトはどう使いますか?
- 上のスクリプトコードをコピーし、Robloxエグゼキューターを開いて貼り付け、ゲーム中に実行を押してください。スクリプトが実行されると、機能が即座に有効になります。
- Snap Tap Movementスクリプトは無料ですか?
- はい。このスクリプトは無料でコピー&使用できます。キーシステムを使用している場合は、リンクから無料でキーを取得してください。
- Snap Tap Movementスクリプトの使用は安全ですか?
- ソースコード全体がこのページに表示されるので、実行前に内容を正確に確認できます。信頼できるエグゼキューターを使用し、スクリプトの使用はRobloxの利用規約に違反するため、自己責任で使用してください。
- Snap Tap Movementに対応するエグゼキューターは?
- このスクリプトはほとんどの人気Robloxエグゼキューターで動作します。お使いのデバイス向けの信頼できる無料または有料エグゼキューターを見つけるには、エグゼキューターページをご覧ください。