InputObject

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ไม่สามารถสร้าง

วัตถุป้อนข้อมูล เป็นตัวแทนการป้อนข้อมูลของผู้ใช้เดียว เช่นการเคลื่อนไหวเมาส์ การแตะ การกดปุ่ม และอื่นๆ มันถูกสร้างขึ้นเมื่อเริ่มต้นการป้อนข้อมูล

สมบัติของวัตถุนี้จะแตกต่างกันตาม UserInputType ตั้งค่า

เมื่อสร้างขึ้นต้นของการป้อนข้อมูลให้เดียวกันและจะปรับปรุงจนกว่าข้อมูลจะสิ้นสุด ดังนั้นคุณจึงสามารถติด

ดูเพิ่มเติม:

  • ContextActionService ซึ่งส่งตัวเข้าสู่การทำงานของ bound โดยการจัดการงาน
  • UserInputService ซึ่งมักใช้งานและการใช้งานของเหตุการณ์และการใช้งานของ InputObject
  • GuiObject ซึ่งมีกิจกรรมที่เกี่ยวข้องกับการป้อนข้อมูลของผู้ใช้ใช้งานใช้งานInputObject

ตัวอย่างโค้ด

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)

สรุป

คุณสมบัติ

  • อ่านพร้อมๆ กัน

    Vector3 ที่อธิบายความสัมพันธ์ระหว่างการเคลื่อนไหวของเมาส์/ joystick

  • อ่านพร้อมๆ กัน

    มีรายการที่อธิบายประเภทของการป้อนข้อมูล

  • อ่านพร้อมๆ กัน

    อธิบายค่าตำแหน่งของข้อมูลนี้

  • อ่านพร้อมๆ กัน

    อธิบายสถานะของการประมวลผลการป้อนข้อมูล โดยใช้การไหลของเฉพาะ ขึ้นอยู่กับ UserInputType

  • อ่านพร้อมๆ กัน

    อธิบายประเภทของการประมวลผลข้อมูล (เมาส์, คีย์บอร์ด, เกมแพด, แตะ, ฯลฯ)

คุณสมบัติ

Delta

อ่านพร้อมๆ กัน

A Vector3 อธิบายการเปลี่ยนแปลงระหว่างการเคลื่อนไหวของเมาส์/ joystick

นี่เป็นประโยชน์เมื่อใช้ position ของการป้อนเข้ากับการติดตามตำแหน่งและการเคลื่อนที่ของเมาส์/ joystick ข

คลิกInputObject ตรงกับ En

ดูเพิ่มเติม:

ตัวอย่างโค้ด

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
อ่านพร้อมๆ กัน

มี Enum.KeyCode รายการที่อธิบายว่ามีการใช้งานประเภทใดของการป้อนข้อมูล สำหรับประเภทของการป้อนข้อมูลเช่นการป้อนข้อมูลผ่านคีย์บอร์ด, นี่จะอธิบายว่ากุญแจใดถูกกด สำหรับประเภทของการป้อ

เอนัม


<tr>
<td>
<b>ไม่ทราบ</b>
</td>
<td>0</td>
<td />
</tr>
<tr>
<td>
<b>Backspace</b>
</td>
<td>8</td>
<td />
</tr>
<tr>
<td>
<b>แท็บ</b>
</td>
<td>9</td>
<td />
</tr>
<tr>
<td>
<b>ล้าง</b>
</td>
<td>12</td>
<td />
</tr>
<tr>
<td>
<b>กลับไปยังหน้าแรก</b>
</td>
<td>13</td>
<td />
</tr>
<tr>
<td>
<b>หยุดชั่วคราว</b>
</td>
<td>19</td>
<td />
</tr>
<tr>
<td>
<b>หนีหนีนี้จะทำให้คุณเสียพลังงานไปมากขึ้นเรื่อยๆ</b> Escape
</td>
<td>27</td>
<td />
</tr>
<tr>
<td>
<b>ช่องว่าง</b>
</td>
<td>32</td>
<td />
</tr>
<tr>
<td>
<b>QuoteDouble</b>
</td>
<td>34</td>
<td />
</tr>
<tr>
<td>
<b>แฮช</b>
</td>
<td>35</td>
<td />
</tr>
<tr>
<td>
<b>ดอลลาร์</b>
</td>
<td>36</td>
<td />
</tr>
<tr>
<td>
<b>เปอร์เซ็นต์</b>
</td>
<td>37</td>
<td />
</tr>
<tr>
<td>
<b>แอมเพอร์แลนด์</b>
</td>
<td>38</td>
<td />
</tr>
<tr>
<td>
<b>อ้างอิง</b>
</td>
<td>39</td>
<td />
</tr>
<tr>
<td>
<b>พ่อแม่ซ้าย</b>
</td>
<td>40</td>
<td />
</tr>
<tr>
<td>
<b>พ่อแม่มุขที่ขวา</b>
</td>
<td>41</td>
<td />
</tr>
<tr>
<td>
<b>ดาวเหนือ</b>
</td>
<td>42</td>
<td />
</tr>
<tr>
<td>
<b>บวก</b>
</td>
<td>43</td>
<td />
</tr>
<tr>
<td>
<b>คอมมา</b>
</td>
<td>44</td>
<td />
</tr>
<tr>
<td>
<b>ลบ</b>
</td>
<td>45</td>
<td />
</tr>
<tr>
<td>
<b>ระยะเวลา</b>
</td>
<td>46</td>
<td />
</tr>
<tr>
<td>
<b>สแลช</b>
</td>
<td>47</td>
<td />
</tr>
<tr>
<td>
<b>Zero ตัวแรก</b>
</td>
<td>48</td>
<td />
</tr>
<tr>
<td>
<b>หนึ่ง</b>
</td>
<td>49</td>
<td />
</tr>
<tr>
<td>
<b>สอง</b>
</td>
<td>50</td>
<td />
</tr>
<tr>
<td>
<b>สาม</b>
</td>
<td>51</td>
<td />
</tr>
<tr>
<td>
<b>สี่</b>
</td>
<td>52</td>
<td />
</tr>
<tr>
<td>
<b>ห้า</b>
</td>
<td>53</td>
<td />
</tr>
<tr>
<td>
<b>หก</b>
</td>
<td>54</td>
<td />
</tr>
<tr>
<td>
<b>เจ็ด</b>
</td>
<td>55</td>
<td />
</tr>
<tr>
<td>
<b>แปด</b>
</td>
<td>56</td>
<td />
</tr>
<tr>
<td>
<b>เจ็ด</b>
</td>
<td>57</td>
<td />
</tr>
<tr>
<td>
<b>ชุดอุปกรณ์เสริม</b>
</td>
<td>58</td>
<td />
</tr>
<tr>
<td>
<b>เว้นวรรค</b>
</td>
<td>59</td>
<td />
</tr>
<tr>
<td>
<b>น้อยกว่า</b>
</td>
<td>60</td>
<td />
</tr>
<tr>
<td>
<b>เท่ากัน</b>
</td>
<td>61</td>
<td />
</tr>
<tr>
<td>
<b>ใหญ่กว่า</b>
</td>
<td>62</td>
<td />
</tr>
<tr>
<td>
<b>คำถาม</b>
</td>
<td>63</td>
<td />
</tr>
<tr>
<td>
<b>ที่</b>
</td>
<td>64</td>
<td />
</tr>
<tr>
<td>
<b>กันซ้ายของแท่งเหล็ก</b>
</td>
<td>91</td>
<td />
</tr>
<tr>
<td>
<b>แบ็คสแลช</b>
</td>
<td>92</td>
<td />
</tr>
<tr>
<td>
<b>RightBracket สิทธิ์ ©</b>
</td>
<td>93</td>
<td />
</tr>
<tr>
<td>
<b>ดูแล</b>
</td>
<td>94</td>
<td />
</tr>
<tr>
<td>
<b>เรือด้านล่าง</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>ฉัน</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>ซ้ายCurly</b>
</td>
<td>123</td>
<td />
</tr>
<tr>
<td>
<b>ท่อ</b>
</td>
<td>124</td>
<td />
</tr>
<tr>
<td>
<b>โคลนขวา</b>
</td>
<td>125</td>
<td />
</tr>
<tr>
<td>
<b>ไม่เน้น</b>
</td>
<td>126</td>
<td />
</tr>
<tr>
<td>
<b>ลบ</b>
</td>
<td>127</td>
<td />
</tr>
<tr>
<td>
<b>แป้นเว้นวรรค Zero</b>
</td>
<td>256</td>
<td />
</tr>
<tr>
<td>
<b>แป้นหนึ่ง</b>
</td>
<td>257</td>
<td />
</tr>
<tr>
<td>
<b>แป้นสองคีย์</b>
</td>
<td>258</td>
<td />
</tr>
<tr>
<td>
<b>KeypadThree แล้ว</b>
</td>
<td>259</td>
<td />
</tr>
<tr>
<td>
<b>KeypadFour แล้ว</b>
</td>
<td>260</td>
<td />
</tr>
<tr>
<td>
<b>KeypadFive แล้ว</b>
</td>
<td>261</td>
<td />
</tr>
<tr>
<td>
<b>KeypadSix แล้ว</b>
</td>
<td>262</td>
<td />
</tr>
<tr>
<td>
<b>KeypadSeven แล้ว</b>
</td>
<td>263</td>
<td />
</tr>
<tr>
<td>
<b>KeypadEight แล้ว</b>
</td>
<td>264</td>
<td />
</tr>
<tr>
<td>
<b>KeypadNine แล้ว</b>
</td>
<td>265</td>
<td />
</tr>
<tr>
<td>
<b>KeypadPeriod ระยะเวลา</b>
</td>
<td>266</td>
<td />
</tr>
<tr>
<td>
<b>แผงคีย์แพดผู้แบ่งตัว</b>
</td>
<td>267</td>
<td />
</tr>
<tr>
<td>
<b>การเพิ่มขึ้นของแป้นเวลา</b>
</td>
<td>268</td>
<td />
</tr>
<tr>
<td>
<b>KeypadPlus</b>
</td>
<td>269</td>
<td />
</tr>
<tr>
<td>
<b>KeypadPlus</b>
</td>
<td>270</td>
<td />
</tr>
<tr>
<td>
<b>กีย์แพดเข้า</b>
</td>
<td>271</td>
<td />
</tr>
<tr>
<td>
<b>KeypadEquals แล้ว</b>
</td>
<td>272</td>
<td />
</tr>
<tr>
<td>
<b>ขึ้น</b>
</td>
<td>273</td>
<td />
</tr>
<tr>
<td>
<b>ลง</b>
</td>
<td>274</td>
<td />
</tr>
<tr>
<td>
<b>ขวา</b>
</td>
<td>275</td>
<td />
</tr>
<tr>
<td>
<b>ซ้าย</b>
</td>
<td>276</td>
<td />
</tr>
<tr>
<td>
<b>ใส่</b>
</td>
<td>277</td>
<td />
</tr>
<tr>
<td>
<b>บ้าน</b>
</td>
<td>278</td>
<td />
</tr>
<tr>
<td>
<b>จุดสิ้นสุด</b>
</td>
<td>279</td>
<td />
</tr>
<tr>
<td>
<b>หน้าขึ้น</b>
</td>
<td>280</td>
<td />
</tr>
<tr>
<td>
<b>ลงหน้า</b>
</td>
<td>281</td>
<td />
</tr>
<tr>
<td>
<b>เลนซ์ชิฟท์ซ้าย</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>
</td>
<td>308</td>
<td />
</tr>
<tr>
<td>
<b>RightAlt</b>
</td>
<td>307</td>
<td />
</tr>
<tr>
<td>
<b>การควบคุมซ้าย</b>
</td>
<td>306</td>
<td />
</tr>
<tr>
<td>
<b>การควบคุมขวา</b>
</td>
<td>305</td>
<td />
</tr>
<tr>
<td>
<b>CapsLock ปิด</b>
</td>
<td>301 รหัส</td>
<td />
</tr>
<tr>
<td>
<b>ล็อคตัวเลข</b>
</td>
<td>300</td>
<td />
</tr>
<tr>
<td>
<b>ล็อคการเลื่อน</b>
</td>
<td>302</td>
<td />
</tr>
<tr>
<td>
<b>ซุปเปอร์ซ้าย</b>
</td>
<td>311</td>
<td />
</tr>
<tr>
<td>
<b>ซุปเปอร์ขวา</b>
</td>
<td>312</td>
<td />
</tr>
<tr>
<td>
<b>โหมด</b>
</td>
<td>313</td>
<td />
</tr>
<tr>
<td>
<b>แต่งตัว</b>
</td>
<td>314</td>
<td />
</tr>
<tr>
<td>
<b>ช่วยเหลือ</b>
</td>
<td>315</td>
<td />
</tr>
<tr>
<td>
<b>พิมพ์</b>
</td>
<td>316</td>
<td />
</tr>
<tr>
<td>
<b>SysReq</b>
</td>
<td>317</td>
<td />
</tr>
<tr>
<td>
<b>พักผ่อน</b>
</td>
<td>318</td>
<td />
</tr>
<tr>
<td>
<b>เมนู</b>
</td>
<td>319</td>
<td />
</tr>
<tr>
<td>
<b>อํานาจ</b>
</td>
<td>320</td>
<td />
</tr>
<tr>
<td>
<b>ยูโร</b>
</td>
<td>321</td>
<td />
</tr>
<tr>
<td>
<b>ยกเลิก</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 เพื่อแก้ปัญหาปากกาเขียว 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>World0</b>
</td>
<td>160</td>
<td />
</tr>
<tr>
<td>
<b>World1</b>
</td>
<td>161</td>
<td />
</tr>
<tr>
<td>
<b>World2</b>
</td>
<td>162</td>
<td />
</tr>
<tr>
<td>
<b>World3</b>
</td>
<td>163</td>
<td />
</tr>
<tr>
<td>
<b>World4 โลก</b>
</td>
<td>164</td>
<td />
</tr>
<tr>
<td>
<b>World5</b>
</td>
<td>165</td>
<td />
</tr>
<tr>
<td>
<b>World6</b>
</td>
<td>166</td>
<td />
</tr>
<tr>
<td>
<b>World7</b>
</td>
<td>167</td>
<td />
</tr>
<tr>
<td>
<b>World8</b>
</td>
<td>168</td>
<td />
</tr>
<tr>
<td>
<b>World9</b>
</td>
<td>169</td>
<td />
</tr>
<tr>
<td>
<b>World10</b>
</td>
<td>170</td>
<td />
</tr>
<tr>
<td>
<b>World11 โลก</b>
</td>
<td>171</td>
<td />
</tr>
<tr>
<td>
<b>World12 เวิลด์</b>
</td>
<td>172</td>
<td />
</tr>
<tr>
<td>
<b>World13 เวิลด์</b>
</td>
<td>173</td>
<td />
</tr>
<tr>
<td>
<b>World14 เวิลด์</b>
</td>
<td>174</td>
<td />
</tr>
<tr>
<td>
<b>World15 เวิลด์</b>
</td>
<td>175</td>
<td />
</tr>
<tr>
<td>
<b>World16</b>
</td>
<td>176</td>
<td />
</tr>
<tr>
<td>
<b>World17</b>
</td>
<td>177</td>
<td />
</tr>
<tr>
<td>
<b>World18 เวิลด์</b>
</td>
<td>178</td>
<td />
</tr>
<tr>
<td>
<b>World19 โลก</b>
</td>
<td>179</td>
<td />
</tr>
<tr>
<td>
<b>World20</b>
</td>
<td>180</td>
<td />
</tr>
<tr>
<td>
<b>World21 เวิลด์</b>
</td>
<td>181</td>
<td />
</tr>
<tr>
<td>
<b>World22</b>
</td>
<td>182</td>
<td />
</tr>
<tr>
<td>
<b>World23</b>
</td>
<td>183</td>
<td />
</tr>
<tr>
<td>
<b>World24 เวลาให้บริการ</b>
</td>
<td>184</td>
<td />
</tr>
<tr>
<td>
<b>World25</b>
</td>
<td>185</td>
<td />
</tr>
<tr>
<td>
<b>World26</b>
</td>
<td>186</td>
<td />
</tr>
<tr>
<td>
<b>World27</b>
</td>
<td>187</td>
<td />
</tr>
<tr>
<td>
<b>World28</b>
</td>
<td>188</td>
<td />
</tr>
<tr>
<td>
<b>World29</b>
</td>
<td>189</td>
<td />
</tr>
<tr>
<td>
<b>World30</b>
</td>
<td>190</td>
<td />
</tr>
<tr>
<td>
<b>World31</b>
</td>
<td>191</td>
<td />
</tr>
<tr>
<td>
<b>World32</b>
</td>
<td>192</td>
<td />
</tr>
<tr>
<td>
<b>World33</b>
</td>
<td>193</td>
<td />
</tr>
<tr>
<td>
<b>World34 โลก</b>
</td>
<td>194</td>
<td />
</tr>
<tr>
<td>
<b>World35</b>
</td>
<td>195</td>
<td />
</tr>
<tr>
<td>
<b>World36</b>
</td>
<td>196</td>
<td />
</tr>
<tr>
<td>
<b>World37</b>
</td>
<td>197</td>
<td />
</tr>
<tr>
<td>
<b>World38</b>
</td>
<td>198</td>
<td />
</tr>
<tr>
<td>
<b>World39</b>
</td>
<td>199</td>
<td />
</tr>
<tr>
<td>
<b>World40</b>
</td>
<td>200</td>
<td />
</tr>
<tr>
<td>
<b>World41</b>
</td>
<td>201</td>
<td />
</tr>
<tr>
<td>
<b>World42 โลก</b>
</td>
<td>202</td>
<td />
</tr>
<tr>
<td>
<b>World43</b>
</td>
<td>203</td>
<td />
</tr>
<tr>
<td>
<b>World44 โลก</b>
</td>
<td>204</td>
<td />
</tr>
<tr>
<td>
<b>World45</b>
</td>
<td>205</td>
<td />
</tr>
<tr>
<td>
<b>World46</b>
</td>
<td>206</td>
<td />
</tr>
<tr>
<td>
<b>World47</b>
</td>
<td>207</td>
<td />
</tr>
<tr>
<td>
<b>World48</b>
</td>
<td>208</td>
<td />
</tr>
<tr>
<td>
<b>World49</b>
</td>
<td>209</td>
<td />
</tr>
<tr>
<td>
<b>World50</b>
</td>
<td>210</td>
<td />
</tr>
<tr>
<td>
<b>World51 โลก</b>
</td>
<td>211</td>
<td />
</tr>
<tr>
<td>
<b>World52</b>
</td>
<td>212</td>
<td />
</tr>
<tr>
<td>
<b>World53</b>
</td>
<td>213</td>
<td />
</tr>
<tr>
<td>
<b>World54 โลก</b>
</td>
<td>214</td>
<td />
</tr>
<tr>
<td>
<b>World55</b>
</td>
<td>215</td>
<td />
</tr>
<tr>
<td>
<b>World56</b>
</td>
<td>216</td>
<td />
</tr>
<tr>
<td>
<b>World57</b>
</td>
<td>217</td>
<td />
</tr>
<tr>
<td>
<b>World58</b>
</td>
<td>218</td>
<td />
</tr>
<tr>
<td>
<b>World59</b>
</td>
<td>219</td>
<td />
</tr>
<tr>
<td>
<b>World60</b>
</td>
<td>220</td>
<td />
</tr>
<tr>
<td>
<b>World61 เวิลด์</b>
</td>
<td>221</td>
<td />
</tr>
<tr>
<td>
<b>World62 เวิลด์</b>
</td>
<td>222</td>
<td />
</tr>
<tr>
<td>
<b>World63</b>
</td>
<td>223</td>
<td />
</tr>
<tr>
<td>
<b>World64</b>
</td>
<td>224</td>
<td />
</tr>
<tr>
<td>
<b>World65</b>
</td>
<td>225</td>
<td />
</tr>
<tr>
<td>
<b>World66</b>
</td>
<td>226</td>
<td />
</tr>
<tr>
<td>
<b>World67</b>
</td>
<td>227</td>
<td />
</tr>
<tr>
<td>
<b>World68</b>
</td>
<td>228</td>
<td />
</tr>
<tr>
<td>
<b>World69 โลก</b>
</td>
<td>229</td>
<td />
</tr>
<tr>
<td>
<b>World70</b>
</td>
<td>230</td>
<td />
</tr>
<tr>
<td>
<b>World71 เวิลด์</b>
</td>
<td>231</td>
<td />
</tr>
<tr>
<td>
<b>World72 เวิลด์</b>
</td>
<td>232</td>
<td />
</tr>
<tr>
<td>
<b>World73 เวิลด์</b>
</td>
<td>233</td>
<td />
</tr>
<tr>
<td>
<b>World74 โลก</b>
</td>
<td>234</td>
<td />
</tr>
<tr>
<td>
<b>World75 เวิลด์</b>
</td>
<td>235</td>
<td />
</tr>
<tr>
<td>
<b>World76 เวิลด์</b>
</td>
<td>236</td>
<td />
</tr>
<tr>
<td>
<b>World77</b>
</td>
<td>237</td>
<td />
</tr>
<tr>
<td>
<b>World80</b>
</td>
<td>238</td>
<td />
</tr>
<tr>
<td>
<b>World79 เวิลด์</b>
</td>
<td>239</td>
<td />
</tr>
<tr>
<td>
<b>World80</b>
</td>
<td>240</td>
<td />
</tr>
<tr>
<td>
<b>World81 โลก</b>
</td>
<td>241</td>
<td />
</tr>
<tr>
<td>
<b>World82 เวิลด์</b>
</td>
<td>242</td>
<td />
</tr>
<tr>
<td>
<b>World83</b>
</td>
<td>243</td>
<td />
</tr>
<tr>
<td>
<b>World84 โลก</b>
</td>
<td>244</td>
<td />
</tr>
<tr>
<td>
<b>World85 โลก</b>
</td>
<td>245</td>
<td />
</tr>
<tr>
<td>
<b>World86</b>
</td>
<td>246</td>
<td />
</tr>
<tr>
<td>
<b>World87 โลก</b>
</td>
<td>247</td>
<td />
</tr>
<tr>
<td>
<b>World88 เวิลด์</b>
</td>
<td>248</td>
<td />
</tr>
<tr>
<td>
<b>World89</b>
</td>
<td>249</td>
<td />
</tr>
<tr>
<td>
<b>World90</b>
</td>
<td>250</td>
<td />
</tr>
<tr>
<td>
<b>World91 โลก</b>
</td>
<td>251</td>
<td />
</tr>
<tr>
<td>
<b>World92 โลก</b>
</td>
<td>252</td>
<td />
</tr>
<tr>
<td>
<b>World93</b>
</td>
<td>253</td>
<td />
</tr>
<tr>
<td>
<b>World94 โลก</b>
</td>
<td>254</td>
<td />
</tr>
<tr>
<td>
<b>World95 โลก</b>
</td>
<td>255</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม X</b>
</td>
<td>1,000</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม Y</b>
</td>
<td>1001</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม A</b>
</td>
<td>1002 และ</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม B</b>
</td>
<td>1003</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม R1</b>
</td>
<td>1004 และ</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม L1</b>
</td>
<td>1005</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม R2</b>
</td>
<td>1006</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม L2</b>
</td>
<td>1007</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่ม R3</b>
</td>
<td>1008</td>
<td />
</tr>
<tr>
<td>
<b>ปุ่มL3</b>
</td>
<td>1009</td>
<td />
</tr>
<tr>
<td>
<b>เริ่มปุ่ม</b>
</td>
<td>1010</td>
<td />
</tr>
<tr>
<td>
<b>เลือกปุ่ม</b>
</td>
<td>1011</td>
<td />
</tr>
<tr>
<td>
<b>DPadซ้าย</b>
</td>
<td>1012</td>
<td />
</tr>
<tr>
<td>
<b>DPadRight</b>
</td>
<td>1013</td>
<td />
</tr>
<tr>
<td>
<b>DPadUp</b>
</td>
<td>1014</td>
<td />
</tr>
<tr>
<td>
<b>DPadDown</b>
</td>
<td>1015</td>
<td />
</tr>
<tr>
<td>
<b>ทัมบ์สตริค1</b>
</td>
<td>1016</td>
<td />
</tr>
<tr>
<td>
<b>ทัมบ์สตริค2</b>
</td>
<td>1017</td>
</tr>
ชื่อมูลค่าคำอธิบาย

ดูเพิ่มเติม:

ตัวอย่างโค้ด

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

อ่านพร้อมๆ กัน

คุณสมบัตินี้อธิบายค่าตำแหน่ง Vector3 ของข้อมูลนี้

สำหรับการเล่นเมาส์และการแตะ นี่คือตำแหน่งหน้าจอของเมาส์ / แตะ ที่อธิบายในส่วน X และ Y ต่างๆ ตำแหน่งการใส่จะถูกนับในตำแหน่ง

สำหรับการป้อนเมาส์ของล้อ ส่วน Z อธิบายว่าล้อถูกย้ายไปข้างหน้า (1) หรือไม่ได้เลย (0)

สำหรับการป้อนข้อมูล Enum.KeyCode ของผู้เล่นนี้จะแสดงตำแหน่งของ Mouse ของผู้เล่น

คลิกInputObject ที่ตรงกับ Enum.User

ดูเพิ่มเติม

ตัวอย่างโค้ด

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

อ่านพร้อมๆ กัน

สถานะของการป้อนข้อมูลผู้ใช้ อธิบายสถานะของการป้อนข้อมูลที่ดำเนินการตามการไหลของ UserInputType มันใช้รายการเดียวกันของชื่อเรียก

ดูเพิ่มเติม:

ตัวอย่างโค้ด

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

อ่านพร้อมๆ กัน

ประเภทการใส่ข้อมูลผู้ใช้ เป็นสมบัติที่อธิบายว่า InputObject ตอบแทนสำหรับปุ่มเมาส์ เป็นตัวอุปกรณ์เข้า/ออก เป็นตัวอุปกรณ์เข้า/ออก เป็นตัว

ดูเพิ่มเติม:

ตัวอย่างโค้ด

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

วิธีการ

IsModifierKeyDown

พารามิเตอร์

modifierKey: Enum.ModifierKey

ส่งค่ากลับ

อีเวนต์