InputObject

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo

Một InputObject đại diện cho một người dùng nhập, chẳng hạn như chuyển động chuột, nhấn chạm, nhấn phím và nhiều hơn nữa. Nó được tạo ra khi một người bắt đầu nhập.

Các thuộc tính của đối tượng này thay đổi theo UserInputType . Mỗi loại input sẽ có nhiều thay đ

Một khi tạo ra ở đầu của một輸入, cùng một ô tượng tồn tại và được cập nhật cho đến khi 輸入 kết thúc. Do kết quả, bạn có thể theo dõi sự thay đổi c

Xem thêm:

Mẫu mã

Handling InputBegan

-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
Handling InputChanged

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)
Handling InputEnded

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

Tóm Tắt

Thuộc Tính

  • Đọc Song Song

    Một Vector3 mô tả Delta giữa các chuyển động chuột / các nút.

  • Đọc Song Song

    Bao gồm một danh sách để mô tả loại đầu vào được sử dụng.

  • Đọc Song Song

    Mô tả một giá trị tương đối của đầu vào này.

  • Mô tả trạng thái của một hành động đang thực hiện, theo một lưu lượng cụ thể tùy thuộc vào UserInputType .

  • Mô tả loại dữ liệu đang thực hiện (chuột, bàn phím, gamepad, chạm, v.v...).

Thuộc Tính

Delta

Đọc Song Song

Một Vector3 mô tả Delta (thay đổi) giữa các chuyển động chuột/joystick.

Điều này hữu ích khi được sử dụng với input's position để theo dõi vị trí và di chuyển của máy chủ người dùng, như khi bạn đang tạo các mô

Lưu ý rằng một InputObject tương ứng với

Xem thêm:

Mẫu mã

Handling InputChanged

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)
Create a Binoculars Script

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Reset camera back to CFrame and FieldOfView before zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Allow camera to be changed by script
camera.CameraType = Enum.CameraType.Scriptable
-- Store camera properties before zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Zoom camera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Lock and slow down mouse
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Reset zoom angles
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Toggle camera zoom/unzoom
local function MouseClick()
if zoomed then
-- Unzoom camera
ResetCamera()
else
-- Zoom in camera
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- anything higher would make looking up and down harder; recommend anything between 0~1
local smoothness = 0.05 -- recommend anything between 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
Đọc Song Song

Bao gồm một Enum.KeyCode hành lang mô tả loại nhập được sử dụng. Đối với các loại nhập như bàn phím, điều này mô tả loại chìa khóa đã được nhấn. Đối với các loại nhập như chuột, điều này không cung cấp thêm thông tin.

Số


<tr>
<td>
<b>Không rõ</b>
</td>
<td>0</td>
<td />
</tr>
<tr>
<td>
<b>Khoảng cách sau</b>
</td>
<td>8</td>
<td />
</tr>
<tr>
<td>
<b>Mũi tên tab</b>
</td>
<td>9</td>
<td />
</tr>
<tr>
<td>
<b>Rõ ràng hóa</b>
</td>
<td>12</td>
<td />
</tr>
<tr>
<td>
<b>Quay lại</b>
</td>
<td>13</td>
<td />
</tr>
<tr>
<td>
<b>Tạm dừng</b>
</td>
<td>19</td>
<td />
</tr>
<tr>
<td>
<b>Trốn thoát</b>
</td>
<td>27</td>
<td />
</tr>
<tr>
<td>
<b>Không gian</b>
</td>
<td>32</td>
<td />
</tr>
<tr>
<td>
<b>QuoteDouble</b>
</td>
<td>34</td>
<td />
</tr>
<tr>
<td>
<b>Mật mã</b>
</td>
<td>35</td>
<td />
</tr>
<tr>
<td>
<b>Đô la Mỹ</b>
</td>
<td>36</td>
<td />
</tr>
<tr>
<td>
<b>Phần trăm</b>
</td>
<td>37</td>
<td />
</tr>
<tr>
<td>
<b>Ampersand</b>
</td>
<td>38.</td>
<td />
</tr>
<tr>
<td>
<b>引用</b>
</td>
<td>39</td>
<td />
</tr>
<tr>
<td>
<b>Cụ bố mẹ của trái cây</b>
</td>
<td>40</td>
<td />
</tr>
<tr>
<td>
<b>Phụ tử phải</b>
</td>
<td>41</td>
<td />
</tr>
<tr>
<td>
<b>Asterisk)</b>
</td>
<td>42</td>
<td />
</tr>
<tr>
<td>
<b>Cộng hơn</b>
</td>
<td>43</td>
<td />
</tr>
<tr>
<td>
<b>Câu chấm câu</b>
</td>
<td>44</td>
<td />
</tr>
<tr>
<td>
<b>Cộng</b>
</td>
<td>45</td>
<td />
</tr>
<tr>
<td>
<b>Thời gian</b>
</td>
<td>46</td>
<td />
</tr>
<tr>
<td>
<b>Cắt</b>
</td>
<td>47</td>
<td />
</tr>
<tr>
<td>
<b>Zero</b>
</td>
<td>48</td>
<td />
</tr>
<tr>
<td>
<b>Một</b>
</td>
<td>49</td>
<td />
</tr>
<tr>
<td>
<b>Hai</b>
</td>
<td>50</td>
<td />
</tr>
<tr>
<td>
<b>Ba</b>
</td>
<td>51</td>
<td />
</tr>
<tr>
<td>
<b>Bốn</b>
</td>
<td>52</td>
<td />
</tr>
<tr>
<td>
<b>Năm</b>
</td>
<td>53</td>
<td />
</tr>
<tr>
<td>
<b>Sáu</b>
</td>
<td>54</td>
<td />
</tr>
<tr>
<td>
<b>Bảy</b>
</td>
<td>55</td>
<td />
</tr>
<tr>
<td>
<b>Tám</b>
</td>
<td>56</td>
<td />
</tr>
<tr>
<td>
<b>Mười hai</b>
</td>
<td>57</td>
<td />
</tr>
<tr>
<td>
<b>Cột.</b>
</td>
<td>58</td>
<td />
</tr>
<tr>
<td>
<b>Câu chấm câu</b>
</td>
<td>59</td>
<td />
</tr>
<tr>
<td>
<b>Thiếu Thanh Toán</b>
</td>
<td>60</td>
<td />
</tr>
<tr>
<td>
<b>Bằng hữu</b>
</td>
<td>61</td>
<td />
</tr>
<tr>
<td>
<b>Lớn hơn</b>
</td>
<td>62</td>
<td />
</tr>
<tr>
<td>
<b>Câu Hỏi</b>
</td>
<td>63</td>
<td />
</tr>
<tr>
<td>
<b>Tại</b>
</td>
<td>64</td>
<td />
</tr>
<tr>
<td>
<b>Cầu phép trái</b>
</td>
<td>91</td>
<td />
</tr>
<tr>
<td>
<b>BackSlash.</b>
</td>
<td>92</td>
<td />
</tr>
<tr>
<td>
<b>RightBracket.</b>
</td>
<td>93</td>
<td />
</tr>
<tr>
<td>
<b>Quản lý</b>
</td>
<td>94</td>
<td />
</tr>
<tr>
<td>
<b>Dấu chấm câu</b>
</td>
<td>95</td>
<td />
</tr>
<tr>
<td>
<b>引用</b>
</td>
<td>96</td>
<td />
</tr>
<tr>
<td>
<b>A</b>
</td>
<td>97</td>
<td />
</tr>
<tr>
<td>
<b>B</b>
</td>
<td>98</td>
<td />
</tr>
<tr>
<td>
<b>C</b>
</td>
<td>99</td>
<td />
</tr>
<tr>
<td>
<b>D</b>
</td>
<td>100</td>
<td />
</tr>
<tr>
<td>
<b>E</b>
</td>
<td>101</td>
<td />
</tr>
<tr>
<td>
<b>F</b>
</td>
<td>102</td>
<td />
</tr>
<tr>
<td>
<b>G</b>
</td>
<td>103</td>
<td />
</tr>
<tr>
<td>
<b>H.</b>
</td>
<td>104</td>
<td />
</tr>
<tr>
<td>
<b>Tôi</b>
</td>
<td>105</td>
<td />
</tr>
<tr>
<td>
<b>J</b>
</td>
<td>106</td>
<td />
</tr>
<tr>
<td>
<b>K</b>
</td>
<td>107</td>
<td />
</tr>
<tr>
<td>
<b>L</b>
</td>
<td>108</td>
<td />
</tr>
<tr>
<td>
<b>M</b>
</td>
<td>109</td>
<td />
</tr>
<tr>
<td>
<b>N</b>
</td>
<td>110</td>
<td />
</tr>
<tr>
<td>
<b>O</b>
</td>
<td>111</td>
<td />
</tr>
<tr>
<td>
<b>P</b>
</td>
<td>112</td>
<td />
</tr>
<tr>
<td>
<b>Q.</b>
</td>
<td>113</td>
<td />
</tr>
<tr>
<td>
<b>R</b>
</td>
<td>114</td>
<td />
</tr>
<tr>
<td>
<b>S</b>
</td>
<td>115</td>
<td />
</tr>
<tr>
<td>
<b>T</b>
</td>
<td>116</td>
<td />
</tr>
<tr>
<td>
<b>U</b>
</td>
<td>117</td>
<td />
</tr>
<tr>
<td>
<b>V</b>
</td>
<td>118</td>
<td />
</tr>
<tr>
<td>
<b>W</b>
</td>
<td>119</td>
<td />
</tr>
<tr>
<td>
<b>X</b>
</td>
<td>120</td>
<td />
</tr>
<tr>
<td>
<b>Y</b>
</td>
<td>121</td>
<td />
</tr>
<tr>
<td>
<b>Z</b>
</td>
<td>122</td>
<td />
</tr>
<tr>
<td>
<b>Cột bên trái</b>
</td>
<td>123</td>
<td />
</tr>
<tr>
<td>
<b>Ống管</b>
</td>
<td>124</td>
<td />
</tr>
<tr>
<td>
<b>RightCurly</b>
</td>
<td>125</td>
<td />
</tr>
<tr>
<td>
<b>Dấu chấm hỏi</b>
</td>
<td>126</td>
<td />
</tr>
<tr>
<td>
<b>Xóa</b>
</td>
<td>127</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím Zero</b>
</td>
<td>256</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím One</b>
</td>
<td>257</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím hai</b>
</td>
<td>258</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím ba</b>
</td>
<td>259</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím KeypadFour</b>
</td>
<td>260</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím năm</b>
</td>
<td>261</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím sáu</b>
</td>
<td>262</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím Bảy</b>
</td>
<td>263</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím Eight</b>
</td>
<td>264</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím mười hai</b>
</td>
<td>265</td>
<td />
</tr>
<tr>
<td>
<b>Keypad期間</b>
</td>
<td>266</td>
<td />
</tr>
<tr>
<td>
<b>Bộ chia Keypad</b>
</td>
<td>267</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím nhiều lần</b>
</td>
<td>268</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím giảm dấu</b>
</td>
<td>269</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phím Plus</b>
</td>
<td>270</td>
<td />
</tr>
<tr>
<td>
<b>Bàn phímEnter</b>
</td>
<td>271</td>
<td />
</tr>
<tr>
<td>
<b>KeypadEquals</b>
</td>
<td>272</td>
<td />
</tr>
<tr>
<td>
<b>Lên</b>
</td>
<td>273</td>
<td />
</tr>
<tr>
<td>
<b>Xuống</b>
</td>
<td>274</td>
<td />
</tr>
<tr>
<td>
<b>Phải</b>
</td>
<td>275</td>
<td />
</tr>
<tr>
<td>
<b>Rẽ trái</b>
</td>
<td>276</td>
<td />
</tr>
<tr>
<td>
<b>Thêm vào</b>
</td>
<td>277</td>
<td />
</tr>
<tr>
<td>
<b>Trang chủ</b>
</td>
<td>278</td>
<td />
</tr>
<tr>
<td>
<b>Kết thúc</b>
</td>
<td>279</td>
<td />
</tr>
<tr>
<td>
<b>Trang Up</b>
</td>
<td>280</td>
<td />
</tr>
<tr>
<td>
<b>Trang chủ</b>
</td>
<td>281</td>
<td />
</tr>
<tr>
<td>
<b>Ctrl LeftShift</b>
</td>
<td>304</td>
<td />
</tr>
<tr>
<td>
<b>RightShift</b>
</td>
<td>303</td>
<td />
</tr>
<tr>
<td>
<b>LeftMeta</b>
</td>
<td>310</td>
<td />
</tr>
<tr>
<td>
<b>RightMeta.</b>
</td>
<td>309</td>
<td />
</tr>
<tr>
<td>
<b>Alt bên trái</b>
</td>
<td>308</td>
<td />
</tr>
<tr>
<td>
<b>RightAlt.</b>
</td>
<td>307</td>
<td />
</tr>
<tr>
<td>
<b>Điều khiển bên trái</b>
</td>
<td>306</td>
<td />
</tr>
<tr>
<td>
<b>Điều khiển phải</b>
</td>
<td>305</td>
<td />
</tr>
<tr>
<td>
<b>Khóa cáп</b>
</td>
<td>301 lần</td>
<td />
</tr>
<tr>
<td>
<b>Khóa số</b>
</td>
<td>300</td>
<td />
</tr>
<tr>
<td>
<b>Khóa màn hình cuộn dưới</b>
</td>
<td>302</td>
<td />
</tr>
<tr>
<td>
<b>Super bên trái</b>
</td>
<td>311</td>
<td />
</tr>
<tr>
<td>
<b>Siêu nhanh phải</b>
</td>
<td>312</td>
<td />
</tr>
<tr>
<td>
<b>Chế độ</b>
</td>
<td>313</td>
<td />
</tr>
<tr>
<td>
<b>Hợp nhất</b>
</td>
<td>314</td>
<td />
</tr>
<tr>
<td>
<b>Giúp ích</b>
</td>
<td>315</td>
<td />
</tr>
<tr>
<td>
<b>In ấn</b>
</td>
<td>316</td>
<td />
</tr>
<tr>
<td>
<b>Yêu cầu hệ thống</b>
</td>
<td>317</td>
<td />
</tr>
<tr>
<td>
<b>Phá vỡ</b>
</td>
<td>318</td>
<td />
</tr>
<tr>
<td>
<b>Mục lục</b>
</td>
<td>319</td>
<td />
</tr>
<tr>
<td>
<b>Sức mạnh</b>
</td>
<td>320</td>
<td />
</tr>
<tr>
<td>
<b>Euro</b>
</td>
<td>321</td>
<td />
</tr>
<tr>
<td>
<b>Hủy công việc</b>
</td>
<td>322</td>
<td />
</tr>
<tr>
<td>
<b>F1</b>
</td>
<td>282</td>
<td />
</tr>
<tr>
<td>
<b>F2</b>
</td>
<td>283</td>
<td />
</tr>
<tr>
<td>
<b>F3</b>
</td>
<td>284</td>
<td />
</tr>
<tr>
<td>
<b>F4</b>
</td>
<td>285</td>
<td />
</tr>
<tr>
<td>
<b>F5</b>
</td>
<td>286</td>
<td />
</tr>
<tr>
<td>
<b>F6</b>
</td>
<td>287</td>
<td />
</tr>
<tr>
<td>
<b>F7</b>
</td>
<td>288</td>
<td />
</tr>
<tr>
<td>
<b>F8</b>
</td>
<td>289</td>
<td />
</tr>
<tr>
<td>
<b>F9</b>
</td>
<td>290</td>
<td />
</tr>
<tr>
<td>
<b>F10</b>
</td>
<td>291</td>
<td />
</tr>
<tr>
<td>
<b>F11</b>
</td>
<td>292</td>
<td />
</tr>
<tr>
<td>
<b>F12</b>
</td>
<td>293</td>
<td />
</tr>
<tr>
<td>
<b>F13</b>
</td>
<td>294</td>
<td />
</tr>
<tr>
<td>
<b>F14</b>
</td>
<td>295</td>
<td />
</tr>
<tr>
<td>
<b>F15</b>
</td>
<td>296</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới0</b>
</td>
<td>160</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới1</b>
</td>
<td>161 lần</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 2</b>
</td>
<td>162</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới3</b>
</td>
<td>163</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 4</b>
</td>
<td>164</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới5</b>
</td>
<td>165</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 6</b>
</td>
<td>166</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 7</b>
</td>
<td>167</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 8</b>
</td>
<td>168</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 9</b>
</td>
<td>169</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới10</b>
</td>
<td>170</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới11</b>
</td>
<td>171</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới12</b>
</td>
<td>172</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới13</b>
</td>
<td>173</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới14</b>
</td>
<td>174</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới15</b>
</td>
<td>175</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới16</b>
</td>
<td>176</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới17</b>
</td>
<td>177</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới18</b>
</td>
<td>178</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới19</b>
</td>
<td>179</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 20</b>
</td>
<td>180</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 21</b>
</td>
<td>181</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới22</b>
</td>
<td>182</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 23</b>
</td>
<td>183</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới24</b>
</td>
<td>184</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 25</b>
</td>
<td>185</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới26</b>
</td>
<td>186</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 27</b>
</td>
<td>187</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 28</b>
</td>
<td>188</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới29</b>
</td>
<td>189</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới30</b>
</td>
<td>190</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới31</b>
</td>
<td>191</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới32</b>
</td>
<td>192</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới33</b>
</td>
<td>193</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới34</b>
</td>
<td>194</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới35</b>
</td>
<td>195</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới36</b>
</td>
<td>196</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới37</b>
</td>
<td>197</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới38</b>
</td>
<td>198</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới39</b>
</td>
<td>199</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 40</b>
</td>
<td>200</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới41</b>
</td>
<td>201</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới42</b>
</td>
<td>202</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 43</b>
</td>
<td>203</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới44</b>
</td>
<td>204</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 45</b>
</td>
<td>205</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới46</b>
</td>
<td>206</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 47</b>
</td>
<td>207</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 48</b>
</td>
<td>208</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 49</b>
</td>
<td>209</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới50</b>
</td>
<td>210</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới51</b>
</td>
<td>211</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới52</b>
</td>
<td>212</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới53</b>
</td>
<td>213</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới54</b>
</td>
<td>214</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới55</b>
</td>
<td>215</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới56</b>
</td>
<td>216</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới57</b>
</td>
<td>217</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới58</b>
</td>
<td>218</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới59</b>
</td>
<td>219</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 60</b>
</td>
<td>220</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới61</b>
</td>
<td>221</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới62</b>
</td>
<td>222</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới63</b>
</td>
<td>223</td>
<td />
</tr>
<tr>
<td>
<b>World64</b>
</td>
<td>224</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 65</b>
</td>
<td>225</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới66</b>
</td>
<td>226</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới67</b>
</td>
<td>227</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới68</b>
</td>
<td>228</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới69</b>
</td>
<td>229</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 70</b>
</td>
<td>230</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 71</b>
</td>
<td>231</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 72</b>
</td>
<td>232</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 73</b>
</td>
<td>233</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 74</b>
</td>
<td>234</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 75</b>
</td>
<td>235</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 76</b>
</td>
<td>236</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 77</b>
</td>
<td>237</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 78</b>
</td>
<td>238</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 79</b>
</td>
<td>239</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 80</b>
</td>
<td>240</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 81</b>
</td>
<td>241</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 82</b>
</td>
<td>242</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 83</b>
</td>
<td>243</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 84</b>
</td>
<td>244</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 85</b>
</td>
<td>245</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 86</b>
</td>
<td>246</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 87</b>
</td>
<td>247</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 88</b>
</td>
<td>248</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 89</b>
</td>
<td>249</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 90</b>
</td>
<td>250</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 91</b>
</td>
<td>251</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 92</b>
</td>
<td>252</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 93</b>
</td>
<td>253</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 94</b>
</td>
<td>254</td>
<td />
</tr>
<tr>
<td>
<b>Thế giới 95</b>
</td>
<td>255</td>
<td />
</tr>
<tr>
<td>
<b>ButtonX</b>
</td>
<td>1.000</td>
<td />
</tr>
<tr>
<td>
<b>ButtonY.</b>
</td>
<td>1001</td>
<td />
</tr>
<tr>
<td>
<b>ButtonA.</b>
</td>
<td>1002</td>
<td />
</tr>
<tr>
<td>
<b>ButtonB.</b>
</td>
<td>1003</td>
<td />
</tr>
<tr>
<td>
<b>ButtonR1</b>
</td>
<td>1004</td>
<td />
</tr>
<tr>
<td>
<b>ButtonL1</b>
</td>
<td>1005</td>
<td />
</tr>
<tr>
<td>
<b>ButtonR2</b>
</td>
<td>1006</td>
<td />
</tr>
<tr>
<td>
<b>ButtonL2</b>
</td>
<td>1007</td>
<td />
</tr>
<tr>
<td>
<b>ButtonR3</b>
</td>
<td>1008</td>
<td />
</tr>
<tr>
<td>
<b>ButtonL3</b>
</td>
<td>1009</td>
<td />
</tr>
<tr>
<td>
<b>Khu bắt đầu nút</b>
</td>
<td>1010</td>
<td />
</tr>
<tr>
<td>
<b>ButtonSelect</b>
</td>
<td>1011</td>
<td />
</tr>
<tr>
<td>
<b>DPadLeft</b>
</td>
<td>1012</td>
<td />
</tr>
<tr>
<td>
<b>DPadRight</b>
</td>
<td>1013</td>
<td />
</tr>
<tr>
<td>
<b>DPadLên</b>
</td>
<td>1014</td>
<td />
</tr>
<tr>
<td>
<b>DPadDown</b>
</td>
<td>1015</td>
<td />
</tr>
<tr>
<td>
<b>Thumbstick1</b>
</td>
<td>1016</td>
<td />
</tr>
<tr>
<td>
<b>Thumbstick2</b>
</td>
<td>1017</td>
</tr>
TênGiá TrịMô tả

Xem thêm:

Mẫu mã

Binding Supported Gamepad KeyCodes

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end

Position

Đọc Song Song

Đặt tính này mô tả giá trị Vector3 địa lý của đầu vào này.

Đối với chuột và chạm, đây là vị trí màn hình của chuột/chạm, được mô tả trong các thành phần X và Y. Khoản thu nhập từ trongset được tính vào vị trí.

Đối với bánh xe chuột, thành phần Z mô tả liệu bánh xe đã được di chuyển điều đó (1), điều đó đã quay lại (-1) hoặc không (0).

Đối với Enum.KeyCode đầu vào, điều này cho thấy vị trí của người chơi Mouse .

Lưu ý rằ

Xem thêm

Mẫu mã

Handling InputBegan

-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
Handling InputChanged

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)
Handling InputEnded

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

UserInputState

Đọc Song Song

UserInputState mô tả trạng thái của một input đang thực hiện, theo một lưu đồng hướng dựa trên UserInputType . Nó sử dụng danh mục cùng tên, Enum.UserInputState . Xem trang danh mục cho một danh sách các giá trị có thể cho giá trị

Xem thêm:

Mẫu mã

Binding Supported Gamepad KeyCodes

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Since this function does not return anything, this handler will
-- "sink" the input and no other action handlers will be called after
-- this one.
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end
Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

UserInputType

Đọc Song Song

UserInputType là một tính năng mô tả cho loại nào của input này đại diện, chẳng hạn như chuột, bàn phím, cảm ứng hoặc gamepad. Nó sử dụng danh mục cùng tên, InputObject . Hãy xem trang danh mục cho một danh sách các giá trị có thể

Xem thêm:

Mẫu mã

Handling InputChanged

-- In order to use the InputChanged event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- Prints the current input position and the change (delta) in position
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
-- A sample function providing multiple usage cases for various types of user input
local function InputChanged(input, _gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
UserInputService.InputChanged:Connect(InputChanged)
Handling InputBegan

-- In order to use the InputBegan event, the UserInputService service must be used
local UserInputService = game:GetService("UserInputService")
-- A sample function providing multiple usage cases for various types of user input
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)
Create a Custom CameraScript

local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local camera = workspace.CurrentCamera
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local torso = character:WaitForChild("HumanoidRootPart")
local playerPosition = torso.Position
local default_CameraPosition = torso.Position
local default_CameraRotation = Vector2.new(0, math.rad(-60))
local default_CameraZoom = 15
local cameraPosition = default_CameraPosition
local cameraRotation = default_CameraRotation
local cameraZoom = default_CameraZoom
local cameraZoomBounds = nil -- {10,200}
local cameraRotateSpeed = 10
local cameraMouseRotateSpeed = 0.25
local cameraTouchRotateSpeed = 10
local function SetCameraMode()
camera.CameraType = "Scriptable"
camera.FieldOfView = 80
camera.CameraSubject = nil
end
local function UpdateCamera()
SetCameraMode()
local cameraRotationCFrame = CFrame.Angles(0, cameraRotation.X, 0) * CFrame.Angles(cameraRotation.Y, 0, 0)
camera.CFrame = cameraRotationCFrame + cameraPosition + cameraRotationCFrame * Vector3.new(0, 0, cameraZoom)
camera.Focus = camera.CFrame - Vector3.new(0, camera.CFrame.p.Y, 0)
end
local lastTouchTranslation = nil
local function TouchMove(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = totalTranslation - lastTouchTranslation
cameraPosition = cameraPosition + Vector3.new(difference.X, 0, difference.Y)
UpdateCamera()
end
lastTouchTranslation = totalTranslation
end
local lastTouchRotation = nil
local function TouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = rotation - lastTouchRotation
cameraRotation = cameraRotation
+ Vector2.new(-difference, 0) * math.rad(cameraTouchRotateSpeed * cameraRotateSpeed)
UpdateCamera()
end
lastTouchRotation = rotation
end
local lastTouchScale = nil
local function TouchZoom(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
local difference = scale - lastTouchScale
cameraZoom = cameraZoom * (1 + difference)
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
lastTouchScale = scale
end
local function Input(inputObject)
if inputObject.UserInputType == Enum.UserInputType.Keyboard then
if inputObject.UserInputState == Enum.UserInputState.Begin then
-- (I) Zoom In
if inputObject.KeyCode == Enum.KeyCode.I then
cameraZoom = cameraZoom - 15
elseif inputObject.KeyCode == Enum.KeyCode.O then
cameraZoom = cameraZoom + 15
end
-- (O) Zoom Out
if cameraZoomBounds ~= nil then
cameraZoom = math.min(math.max(cameraZoom, cameraZoomBounds[1]), cameraZoomBounds[2])
else
cameraZoom = math.max(cameraZoom, 0)
end
UpdateCamera()
end
end
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)
if pressed then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
local rotation = UserInputService:GetMouseDelta()
cameraRotation = cameraRotation + rotation * math.rad(cameraMouseRotateSpeed)
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
local function PlayerChanged()
local movement = torso.Position - playerPosition
cameraPosition = cameraPosition + movement
playerPosition = torso.Position
UpdateCamera()
end
-- Determine whether the user is on a mobile device
if UserInputService.TouchEnabled then
-- The user is on a mobile device, use Touch events
UserInputService.TouchPan:Connect(TouchMove)
UserInputService.TouchRotate:Connect(TouchRotate)
UserInputService.TouchPinch:Connect(TouchZoom)
else
-- The user is not on a mobile device use Input events
UserInputService.InputBegan:Connect(Input)
UserInputService.InputChanged:Connect(Input)
UserInputService.InputEnded:Connect(Input)
-- Camera controlled by player movement
task.wait(2)
RunService:BindToRenderStep("PlayerChanged", Enum.RenderPriority.Camera.Value - 1, PlayerChanged)
end

Phương Pháp

IsModifierKeyDown

Tham Số

modifierKey: Enum.ModifierKey

Lợi Nhuận

Sự Kiện