輸入對象 代表單一使用者輸入,例如滑鼠移動、觸摸、按鍵按下等。它是在輸入開始時創建的。
這個對象的屬性會隨著 UserInputType 的變化而變化。 每種輸入的輸入會在其 UserInputState 中設定
輸入的開始時,同一個對象會持續存在並且會在輸入結束時更新。因此,您可以使用 Changed 事件作為使用者變更輸入問題的輸入點的結果來跟蹤對象的變更。您也可以將這些對象放置在
也看:
- ContextActionService ,傳輸輸入對象至 bound 操作處理功能
- UserInputService ,其事件和函數常常使用輸入對象
- GuiObject ,其事件與使用者輸入有關的輸入對象
範例程式碼
-- 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)
-- 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)
-- 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 描述滑鼠/握柄移動之間的 Delta。
包含一個描述所使用輸入類型的枚列。
描述此輸入的位置值。
描述輸入的狀態,並且在 UserInputType 中依照特定的流程執行。
描述輸入的種類 (滑鼠、鍵盤、遊戲手柄、觸摸等等)。
屬性
Delta
一個 Vector3 描述鼠標/握柄移動之間的 Delta 變化。
這很有用,當你使用輸入的 position 來跟蹤用戶滑鼠/觸柄的位置和移動,例如當你正在創建自訂移動或攝影指令碼時。考慮使用 Object.Changed 事件或
注意, InputObject 與 Class.UserInputService.InputBegan|InputB
也看:
範例程式碼
-- 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)
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
KeyCode
包含一個 Enum.KeyCode 枚表,描述使用了什麼輸入方式。對於鍵盤輸入類型,這表示按下了哪個鍵。對於滑鼠輸入類型,這表示沒有額外信息。
數值
<tr><td><b>未知</b></td><td>0</td><td /></tr><tr><td><b>返回空格鍵</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></td><td>27</td><td /></tr><tr><td><b>空格</b></td><td>32</td><td /></tr><tr><td><b>引用雙倍</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>零</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>右盤子</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>F</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>左髮捲</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>鍵盤零</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>鍵盤三角形</b></td><td>259</td><td /></tr><tr><td><b>鍵盤四分衛</b></td><td>260</td><td /></tr><tr><td><b>鍵盤五角形</b></td><td>261</td><td /></tr><tr><td><b>KeypadSix 鍵盤六傢機</b></td><td>262</td><td /></tr><tr><td><b>鍵盤七號碼碼頭</b></td><td>263</td><td /></tr><tr><td><b>鍵盤八達角</b></td><td>264</td><td /></tr><tr><td><b>鍵盤九號碼</b></td><td>265</td><td /></tr><tr><td><b>鍵盤期間</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>鍵盤減少按鈕</b></td><td>269</td><td /></tr><tr><td><b>鍵盤擴充器</b></td><td>270</td><td /></tr><tr><td><b>鍵盤輸入器</b></td><td>271</td><td /></tr><tr><td><b>按鍵等同號碼</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>左Shift</b></td><td>304</td><td /></tr><tr><td><b>右Shift</b></td><td>303</td><td /></tr><tr><td><b>左Meta</b></td><td>310</td><td /></tr><tr><td><b>右Meta</b></td><td>309</td><td /></tr><tr><td><b>左Alt</b></td><td>308</td><td /></tr><tr><td><b>右 Alt</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>迷你帽</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>左Super</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>系統要求</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</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>世界0</b></td><td>160</td><td /></tr><tr><td><b>World1</b></td><td>161</td><td /></tr><tr><td><b>世界2</b></td><td>162</td><td /></tr><tr><td><b>World3</b></td><td>163</td><td /></tr><tr><td><b>世界4</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>世界8</b></td><td>168</td><td /></tr><tr><td><b>世界9</b></td><td>169</td><td /></tr><tr><td><b>世界10</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>世界22</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>世界28</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>World78</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>1000</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>ButtonL1</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>DPadLeft</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>Thumbstick1</b></td><td>1016</td><td /></tr><tr><td><b>Thumbstick2</b></td><td>1017</td></tr>
名稱 | 價值 | 說明 |
---|
也看:
範例程式碼
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 元素中描述。 在 GUI 元素(例如從上方欄中)上的邊框是被計算在位置。
對於滑鼠輪子輸入,Z 元件會描述輪子是否移動前進 (1)、後退 (-1) 或不是 (0)。
對於 Enum.KeyCode 輸入,這表示玩家的 Mouse 位置。
注意,您 InputObject 從 Class.
也看看
範例程式碼
-- 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)
-- 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)
-- 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。它使用相同名稱的枚列,Enum.UserInputState。 查看枚列頁面以取得此屬性的所有可用值的列表。
也看:
範例程式碼
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
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 代表的輸入類型,例如滑鼠、鍵盤、觸摸或遊戲控制器輸入。它使用相同名稱的枚數, Enum.UserInputType 。 查看枚數頁面以取得此屬性的所有可用值。
也看:
範例程式碼
-- 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)
-- 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)
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