UserInputService を使用すると、マウスクリックやタップ、ゲームパッドのボタンを押した処理を直接コントロールすることができます。デバイスからの入力は当然クライアントの処理になりますのですべてLocalScriptになります。
- StarterPlayer の StarterPlayerScripts に LocalScript を追加します。
- 以下のプログラムを入力します。
local UserInputService = game:GetService("UserInputService")
local function onClick()
print("クリックかタップされた")
end
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if gameProcessedEvent then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
onClick()
end
if input.UserInputType == Enum.UserInputType.Touch then
onClick()
end
end)
gameProcessedEvent
gameProcessedEvent は、イベントがゲームによって既に処理されたかどうかを示すものです。
true の場合、その入力はもうゲーム側で何かの目的に使用されているということになります。ですから、その入力に対して追加のアクション(あなたがプログラムで設定したもの)を起こさない方がいいということになります。これによって、ゲームの既存の機能や他のスクリプトとの衝突を防ぐことができます。
input
input は、どのからの入力かを調べるときに使用します。
Enum.UserInputType.〇〇〇〇 には以下のようなものがあります。
MouseButton1 | マウスの左ボタン |
MouseButton2 | マウスの右ボタン |
MouseButton3 | マウスの中央ボタン(スクロールボタン) |
Touch | 画面のタッチ(タブレットやスマートフォンなど) |
Keyboard | キーボードのキー押下 input.KeyCode == Enum.KeyCode.Q |
Gamepad1 Gamepad2 Gamepad3 Gamepad4 | ゲームパッドのボタン(異なるゲームパッドのボタンを区別) |
Keyboard
Enum.UserInputType.Keyboard はキー押下になりますが、例えば「Q」キーが押された場合の処理は以下のようになります。
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if gameProcessedEvent then return end
if input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode == Enum.KeyCode.Q then
print("Qキーが押されました!")
end
end
end)
「A」から「Z」は、Enum.KeyCode.A~Enum.KeyCode.Z となりますが、それ以外の特殊なキーの表記はRobloxのドキュメントを参照してください。
https://create.roblox.com/docs/ja-jp/reference/engine/enums/KeyCode
GetMouse()
クリック、タップした位置を取得したい場合は、LocalPlayer の GetMouse() を使用します。
local Players = game:GetService("Players")
local mouse = Players.LocalPlayer:GetMouse()
mouse はオブジェクトで、プロパティとイベントが含まれます。
mouse.〇〇 のプロパティには以下のようなものがあります。
プロパティ | データ型 | 解説 |
---|---|---|
X,Y | number | マウスカーソルのスクリーン上の位置 |
Target | BasePart | マウスカーソルが指しているゲーム内のオブジェクト(パーツやモデルなど) |
TargetSurface | Enum | クリックされた面(Enum.NormalId.〇〇〇) |
Hit | CFrame | マウスカーソルが指しているゲーム内のオブジェクトの正確な3D空間内の位置 |
mouse.〇〇 のイベントには以下のようなものがあります。
イベント | 呼ばれるタイミング |
---|---|
KeyDown | キーボードのキーが押されたときに発生 |
KeyUp | キーボードのキーが放されたときに発生 |
Button1Down | マウスの左ボタンが押されたときに発生 |
Button1Up | マウスの左ボタンが放されたときに発生 |
Button2Down | マウスの右ボタンが押されたときに発生 |
Button2Up | マウスの右ボタンが放されたときに発生 |
Move | マウスが移動したときに発生 |
Button1Down イベントは、スマホやタブレットのタップでも発生するので、クリック/タップだけの処理を行うのであれば、UserInputService の InputBegan を使用せずに、こちらを使用した方が簡単です。
local Players = game:GetService("Players")
local mouse = Players.LocalPlayer:GetMouse()
local function onClick()
print("クリックかタップされた")
end
mouse.Button1Down:Connect(onClick)