2-2 パラメータとイベント

パラメータとは?

前回作成した関数は、好きな食べ物を表示するものでした。ただし、人によって好きな食べ物は異なります。好きな食べ物を表示する関数といいながら「カレー」としか表示しません。どうすればいいでしょうか?
好きな食べ物を関数に教えればいいのです。言い換えると、関数に情報を渡せばいいのです。これをパラメータと言います。

イベントとは?

イベントとは、プログラム内で発生した動作や出来事のことです。ロブロックス内で起こるイベントで最も多く使用されるのが、「パーツに触れた」とか「クリックされた」だと思います。このときにイベントが発生し、発生したらどうするのかをプログラムすることになります。

パラメータとイベントを使用してトラップを作る

実際に何かを作ってみましょう。『あるパーツにプレイヤーが触れると、触れた部分がなくなってしまう』という、かなり危ないパーツを作ってみます。

新しいパーツを作成する

  1. 新しいパーツを1つ作成します。
  2. Baseplateに触れていると困るので少しだけ上に移動します。(Baseplate に触れていると、それも消えてしまいます)
  3. パーツのアンカーをオンにし落下しないように固定します。
  4. エクスプローラーで、パーツの名前を TrapPart に変更します。

スクリプトを追加する

  1. TrapPart パーツにScriptを追加します。
  2. 1行目のprint文を削除し、コメントで説明文を入れます。
  3. 「trap」という変数を作り、スクリプトの親(TrapPart)を入れておきます。
-- このパーツに触れたものを破壊する
local trap = script.Parent

パラメータを使用して関数を作成する

トラップ(TrapPart )は、触れたものを破壊するというものです。実際に何が触れたのかを知る必要があります。その情報をパラメータとして受け取るわけです。パラメータは、関数名の後に続く()内に記述します。

  1. 関数を作成します。任意の名前を付けることができますが、ここでは「onTouch」という名称を使用します。onTouchは何かに触れたら呼ばれる関数になります。
local trap = script.Parent

local function onTouch()

end
  1. ()内に、パラメータの名前を入力します。好きな名前で構いませんが、何らかのオブジェクトが触れたということになりますので object としました。
local trap = script.Parent

local function onTouch(object)

end
  1. ローカル関数「onTouch(object)」と「end」の間に、print 文を入れ、触れたときにメッセージが表示されるようにします。
local trap = script.Parent

local function onTouch(object)
    print("何かがトラップに触れた")
end

イベントを使用して関数を呼び出す

前回は、作成した関数を自ら呼び出して実行しましたが、今回はイベントを使って自動的に関数が呼ばれるようにします。つまり、何かがパーツ(TrapPart)に触れるたびにonTouchが実行されるようにするということです。
Touchイベントというものを使用します。このイベントはあるパーツが別のパーツに触れるたびに発生するもので、様々な用途に使用できますので覚えておきましょう。

  1. 関数の「end」の下に、「trap.Touched:Connect(onToch)」と入力します。タッチイベントは「Touched」という名称になり、そこに接続するという意味で「Connect」とします。 Connect は接続するという意味で、関数の一種ですからパラメータが指定できます。パラメータには触れたときに実行して欲しい関数を指定するわけです。
local trap = script.Parent

local function onTouch(object)
    print("何かがトラップに触れた")
end

-- タッチイベントに関数を接続する
trap.Touched:Connect(onTouch)
  1. 実行してみましょう。プレイヤーがパーツに触れると出力ウィンドウに「何かがトラップに触れた」というメッセ―ジが表示されると成功です。何も表示されない場合は、次の点を確認してください。
  • print文は、「local function onTouch()」と「end」の間にありますか?
  • 「Touched」と「Connect」の第一文字目は大文字になっていますか?
  • 「Touched」と「Connect」の間に「:(コロン)」が半角で入っていますか?
  • 半角で入力したつもりが全角になっていることがありますので注意しましょう。
  1. 正常にメッセージが表示された後は、触れたパーツを破壊してみましょう。触れたパーツはパラメータの「object」に入ります。print文の下に「object:Destroy()」と入力します。Destroy は、オブジェクトのメソッドと呼ばれるもので、こちらも関数の一種です。パラメータはなく、実行するとそのオブジェクトが消滅しますので覚えておきましょう。
local trap = script.Parent

local function onTouch(object)
    print("何かがトラップに触れた")
    object:Destroy()
  -- 触れたオブジェクトを破壊する
end

trap.Touched:Connect(onTouch)
  1. もう一度テストして、パーツに触れたときに何が起こるかを確認します。プレイヤーの足や腕がなくなるはずです。頭や首が触れると・・・

まとめ

ここでは、パラメータとは何なのか、どういうときに使うのか、イベントとは何なのか、どういうときに発生し、どのように利用するのかを学びました。
Connect や Destroy などが登場しましたが、現時点では何となく分かっていれば問題ありません。