一個 輸入對象 代表單一使用者輸入,例如滑鼠移動、觸碰、按鍵操作等。當輸入開始時創建。
這個對象的屬性會根據 UserInputType 變化。每種輸入都會經歷各種變化到其 UserInputState 。在輸入的使用期間,其他進一步描述輸入的特性可能會變更,例如 Position 和 Delta 。鍵盤和遊戲控制器按鈕將擁有 KeyCode 屬性設定。
在輸入開始時創建一個相同的對象,直到輸入結束為止持續存在並更新。因結果,當使用者變更問題的輸入時,你可以使用 Changed 事件來跟蹤對物件的變更。您也可以將這些對象放入啟用輸入列表,並在事件,例如 UserInputService.InputBegan 創建後與對象互動。這主要適用於觸摸事件,因為每個觸摸點都會有獨立的輸入對象。
也見:
- ContextActionService , 會將輸入對象傳送到 bound 行動處理功能
- UserInputService , 其事件和功能經常使用輸入對象
- GuiObject , 其事件與使用者輸入相關的輸入對象
範例程式碼
下面的例子展示了處理輸入從輸入開始依據其類型的許多使用例子之一。
-- 為了使用輸入開始事件,必須使用 UserInputService 服務
local UserInputService = game:GetService("UserInputService")
-- 提供多種用途案例的樣本功能,用於各種類型的使用者輸入
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)
概要
屬性
一個 Vector3 描述鼠標/手柄移動之間的 Delta。
包含一個枚值,描述使用的輸入類型。
描述此輸入的位置值。
描述輸入正在執行的狀態,依照特定流程進行,取決於 UserInputType 。
描述正在執行的輸入類型 (滑鼠標、鍵盤、遊戲手柄、觸摸等)。
屬性
Delta
一個 Vector3 描述鼠標/手柄移動之間的差異(變更)。
當使用輸入的 position 與用戶的滑鼠/操縱桿進行跟蹤時,這很有用,例如當您創建自訂運動或攝影機腳本時。考慮使用 Object.Changed 事件或當使用事件,如 UserInputService.InputChanged 和 GuiObject.InputChanged 來跟蹤輸入對象變更時進行跟蹤。
請注意,與 InputObject 相對應的 Enum.UserInputType.MouseButton1 (左鍵)和 Enum.UserInputType.MouseButton2 (右鍵)從 InputBegan 回叫中提供的將不會在創建一次後更新其 Delta 或 Position ,除非滑鼠輸入結束。為了獲得更新的 delta 以供鼠標輸入,您必須參考 InputObject 從 InputChanged 回調呼中,或呼叫 GetMouseDelta() 。然而,任何與觸摸輸入相對應的 InputObjects 將在使用期間的每一個框架中更新其 delta 和位置。
也見:
範例程式碼
這個例子創建了一個望遠鏡腳本,降低玩家的 FieldOfView() 和 MouseDeltaSensitivity() 當玩家使用具有 MouseEnabled() 的鼠標點擊時。腳本還指向玩家的 Camera 將鼠標點擊的世界位置移至 Vector3 位置。
當玩家再次離開鼠標點擊時,玩家的攝影機會恢復到與玩家使用腳本縮放前相同的視野和Enum.CameraType 和CFrame() 一樣的攝影機。
當玩家使用望遠鏡時,腳本會將玩家的鼠標鎖定在屏幕中央,通過設置玩家的 MouseBehavior() 鎖定中心來鎖定玩家。當玩家移動滑鼠時,攝影機會根據傳送的 屬性移動,指示滑鼠的 在屏幕位置上的變更。
為了這個例子能夠正常運作,它應該放置在 LocalScript 中。
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
-- 在縮放前將相機重設為 CFrame 和 FieldOfView
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()
-- 允許攝影機由腳本更改
camera.CameraType = Enum.CameraType.Scriptable
-- 在縮放前儲存相機特性
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- 縮放相機
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- 鎖定並減慢滑鼠
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- 重設縮放角度
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- 切換相機縮放/取消縮放
local function MouseClick()
if zoomed then
-- 縮放相機
ResetCamera()
else
-- 在相機放大
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- 任何更高的東西都會讓查找上下更加困難;推薦 0~1 之間的任何東西
local smoothness = 0.05 -- 推薦任何介於 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 枚列,描述使用了哪種輸入。對於像鍵盤這樣的輸入類型,這裡描述了按下了哪個鍵。對於像滑鼠這樣的輸入,這不提供額外資訊。
枚數
<th>值</th><th>說明</th></tr></thead><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>At</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><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>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>左捲髮</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>tilde</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>鍵盤One</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>鍵盤六</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>Up</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>右班次</b></td><td>303</td><td /></tr><tr><td><b>左元</b></td><td>310</td><td /></tr><tr><td><b>右元</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>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</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>世界1</b></td><td>161</td><td /></tr><tr><td><b>世界2</b></td><td>162</td><td /></tr><tr><td><b>世界3</b></td><td>163</td><td /></tr><tr><td><b>世界4</b></td><td>164</td><td /></tr><tr><td><b>世界5</b></td><td>165</td><td /></tr><tr><td><b>世界6</b></td><td>166</td><td /></tr><tr><td><b>世界7</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>世界11</b></td><td>171</td><td /></tr><tr><td><b>世界12</b></td><td>172</td><td /></tr><tr><td><b>世界13</b></td><td>173</td><td /></tr><tr><td><b>世界14</b></td><td>174</td><td /></tr><tr><td><b>世界15</b></td><td>175</td><td /></tr><tr><td><b>世界16</b></td><td>176</td><td /></tr><tr><td><b>世界17</b></td><td>177</td><td /></tr><tr><td><b>世界18</b></td><td>178</td><td /></tr><tr><td><b>世界19</b></td><td>179</td><td /></tr><tr><td><b>世界20</b></td><td>180</td><td /></tr><tr><td><b>世界21</b></td><td>181</td><td /></tr><tr><td><b>世界22</b></td><td>182</td><td /></tr><tr><td><b>世界23</b></td><td>183</td><td /></tr><tr><td><b>世界24</b></td><td>184</td><td /></tr><tr><td><b>世界25</b></td><td>185</td><td /></tr><tr><td><b>世界26</b></td><td>186</td><td /></tr><tr><td><b>世界27</b></td><td>187</td><td /></tr><tr><td><b>世界28</b></td><td>188</td><td /></tr><tr><td><b>世界29</b></td><td>189</td><td /></tr><tr><td><b>世界30</b></td><td>190</td><td /></tr><tr><td><b>世界31</b></td><td>191</td><td /></tr><tr><td><b>世界32</b></td><td>192</td><td /></tr><tr><td><b>世界33</b></td><td>193</td><td /></tr><tr><td><b>世界34</b></td><td>194</td><td /></tr><tr><td><b>世界35</b></td><td>195</td><td /></tr><tr><td><b>世界36</b></td><td>196</td><td /></tr><tr><td><b>世界37</b></td><td>197</td><td /></tr><tr><td><b>世界38</b></td><td>198</td><td /></tr><tr><td><b>世界39</b></td><td>199</td><td /></tr><tr><td><b>世界40</b></td><td>200</td><td /></tr><tr><td><b>世界41</b></td><td>201</td><td /></tr><tr><td><b>世界42</b></td><td>202</td><td /></tr><tr><td><b>世界43</b></td><td>203</td><td /></tr><tr><td><b>世界44</b></td><td>204</td><td /></tr><tr><td><b>世界45</b></td><td>205</td><td /></tr><tr><td><b>世界46</b></td><td>206</td><td /></tr><tr><td><b>世界47</b></td><td>207</td><td /></tr><tr><td><b>世界48</b></td><td>208</td><td /></tr><tr><td><b>世界49</b></td><td>209</td><td /></tr><tr><td><b>世界50</b></td><td>210</td><td /></tr><tr><td><b>世界51</b></td><td>211</td><td /></tr><tr><td><b>世界52</b></td><td>212</td><td /></tr><tr><td><b>世界53</b></td><td>213</td><td /></tr><tr><td><b>世界54</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>世界57</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>世界62</b></td><td>222</td><td /></tr><tr><td><b>世界63</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>世界67</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>世界70</b></td><td>230</td><td /></tr><tr><td><b>世界71</b></td><td>231</td><td /></tr><tr><td><b>世界72</b></td><td>232</td><td /></tr><tr><td><b>世界73</b></td><td>233</td><td /></tr><tr><td><b>World74</b></td><td>234</td><td /></tr><tr><td><b>世界75</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>世界78</b></td><td>238</td><td /></tr><tr><td><b>World79</b></td><td>239</td><td /></tr><tr><td><b>世界80</b></td><td>240</td><td /></tr><tr><td><b>世界81</b></td><td>241</td><td /></tr><tr><td><b>世界82</b></td><td>242</td><td /></tr><tr><td><b>世界83</b></td><td>243</td><td /></tr><tr><td><b>世界84</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>世界87</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>世界90</b></td><td>250</td><td /></tr><tr><td><b>世界91</b></td><td>251</td><td /></tr><tr><td><b>世界92</b></td><td>252</td><td /></tr><tr><td><b>世界93</b></td><td>253</td><td /></tr><tr><td><b>世界94</b></td><td>254</td><td /></tr><tr><td><b>世界95</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>按鈕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>DPad向下</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>
名稱 |
---|
也見:
範例程式碼
這個例子獲得一個列表的導航遊戲板和一個列表的支持 Enum.KeyCodes 。然後,它會循環通過支持的 KeyCode 列表並將 ButtonX 和 X 按鍵綁定到功能,如果它們被遊戲控制器使用 ContextActionService 支持。
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
-- 因為此功能不會返回任何東西,因此此處理器將
-- 「 sink」輸入,並且在此之後不會呼叫其他動作處理器
-- 這個。
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 相對應的 Enum.UserInputType.MouseButton1 (左鍵)和 Enum.UserInputType.MouseButton2 (右鍵)從 InputBegan 回叫中提供的將不會在創建一次後更新其 Delta 或 Position ,除非滑鼠輸入結束。為了獲得更新的回調鼠輸入位置,您必須參考 InputObject 從 InputChanged 回呼中的位置,或呼叫 GetMouseLocation() 。然而,任何與觸摸輸入相對應的 InputObjects 將在使用期間的每一個框架中更新其 delta 和位置。
也見「也見」
範例程式碼
下面的例子展示了處理輸入從輸入開始依據其類型的許多使用例子之一。
-- 為了使用輸入開始事件,必須使用 UserInputService 服務
local UserInputService = game:GetService("UserInputService")
-- 提供多種用途案例的樣本功能,用於各種類型的使用者輸入
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)
UserInputState
使用者輸入狀態 描述在UserInputType執行的輸入狀態,取決於Enum.UserInputState 。查看枚列頁以獲得此屬性的所有可能值的列表。
也見:
範例程式碼
這個例子獲得一個列表的導航遊戲板和一個列表的支持 Enum.KeyCodes 。然後,它會循環通過支持的 KeyCode 列表並將 ButtonX 和 X 按鍵綁定到功能,如果它們被遊戲控制器使用 ContextActionService 支持。
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
-- 因為此功能不會返回任何東西,因此此處理器將
-- 「 sink」輸入,並且在此之後不會呼叫其他動作處理器
-- 這個。
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
UserInputType
使用者輸入類型 是一個描述這個InputObject類型的屬性,例如滑鼠、鍵盤、觸摸或遊戲控制器輸入。它使用相同名稱的枚列,Enum.UserInputType。查看枚列頁以獲得此屬性的所有可能值的列表。
也見:
範例程式碼
下面的例子展示了處理輸入從輸入開始依據其類型的許多使用例子之一。
-- 為了使用輸入開始事件,必須使用 UserInputService 服務
local UserInputService = game:GetService("UserInputService")
-- 提供多種用途案例的樣本功能,用於各種類型的使用者輸入
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)