第18回 ~タッチイベント Touched~

イベントというものを理解しましょう。最初のイベントは「タッチイベント」というもので、プレイヤーがパーツに触れると発生するものです。

登場する英単語

英単語読み方
Touchedタッチド別のパーツに触れたら発生するイベント接続用オブジェクト
Connectコネクトイベントを接続する Touchedの関数
Humanoidヒューマノイドオブジェクト
HealthヘルスHumanoidのプロパティ、体力値、これを0にすると絶命
RightFootライトフット「右足」 Humanoidの1パーツ
LeftFootレフトフット「左足」  Humanoidの1パーツ
LeftLowerLegレフトロウレグ「左下腿」  Humanoidの1パーツ
RightLowerLegライトロウレグ「右下腿」  Humanoidの1パーツ
FindFirstChildWhichIsA ファインド・ファースト・チャイルド・フィッチイズエー指定したクラスを子供の中から探す

チェックポイント

  • 「イベント」とは「出来事」のこと
  • 「タッチイベント」とは「触れた」という出来事を伝える仕組み
  • Touched」とはPartに装備されているイベント
  • Partオブジェクトには、プロパティ(Properties)、関数(Functions)、イベント(Events)の3つがある
  • イベントを実行するには、TouchedのConnect関数を使ってイベント処理を接続する
local function onTouch(hit)
    print(hit.Name)
end

script.Parent.Touched:Connect(onTouch)
  • タッチイベントのパラメーターには触れたオブジェクトが渡される
  • プレイヤーがパーツに触れるというのは、キャラクターの足などのパーツが触ったということ
  • 足のパーツの親はキャラクターの「Model
  • プレイヤーモデルの場合、Model内に「Humanoid」オブジェクトがある
  • Model内にHumanoidオブジェクトがあるかどうかを探す
  • Humanoidが見つかったら、プロパティ「Health」に0を代入するとキャラクターが絶命
local function onTouch(hit)
    local character = hit.Parent
    local humanoid = character:FindFirstChild("Humanoid")

    if humanoid then
        humanoid.Health = 0
    end
end

script.Parent.Touched:Connect(onTouch)
  • FindFirstChild」は子供の中から指定した名前のオブジェクトを見つける関数
  • FindFirstChildWhichIsA」は子供の中から指定したクラスのオブジェクトを見つける関数
  • キャラクターのHumanoidを探す場合は「FindFirstChildWhichIsA」がベスト
local function onTouch(hit)
    local character = hit.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid then
        humanoid.Health = 0
    end
end

script.Parent.Touched:Connect(onTouch)
  • パラメーター内に直接、関数の本体を記述することができる
  • 「function( ) ~ end」で記述する
script.Parent.Touched:Connect(function(hit)
    local character = hit.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid then
        humanoid.Health = 0
    end
end)
5 thoughts on “第18回 ~タッチイベント Touched~”
    1. 方法はいくつかあると思いますが、次のようなプログラムで実現可能でしょう。

      local part = script.Parent

      local function onTouch(hit)
      local humanoid = hit.Parent:FindFirstChild(“Humanoid”)
      if humanoid then
      connect:Disconnect()
      humanoid:TakeDamage(5)
      wait(1)
      connect = part.Touched:Connect(onTouch)
      end
      end

      connect = part.Touched:Connect(onTouch)

  1. すみません。質問です。僕はブロックに触れたら、急にブロックの色が真っ黒になり、そしてだんだん色が明るくなって最終的に赤色になったりしたり、それの同時にブロックが移動したり、隕石が降ったりするシステムを作ろうとしてるだけど、作ってみたら移動がたくさんあったり、色が急に黒になったり、赤になったりチカチカしていました。どうすればいいでしょうか?

    1. 一度にたくさんのことを行おうとするとプログラムが複雑になり、自身でも想定しないような動作になります。
      1つ1つ分けて考え、シンプルなコードを作るように心がけてください。

コメントを残す