UserInputService を使用すると、マウスクリックやタップ、ゲームパッドのボタンを押した処理を直接コントロールすることができます。デバイスからの入力は当然クライアントの処理になりますのですべてLocalScriptになります。

  1. StarterPlayer の StarterPlayerScripts に LocalScript を追加します。
  2. 以下のプログラムを入力します。
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,Ynumberマウスカーソルのスクリーン上の位置
TargetBasePartマウスカーソルが指しているゲーム内のオブジェクト(パーツやモデルなど)
TargetSurfaceEnumクリックされた面(Enum.NormalId.〇〇〇)
HitCFrameマウスカーソルが指しているゲーム内のオブジェクトの正確な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)

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

コメントを残す