【3】パラメータとイベント(トラップ)

トラップはプレイヤーにダメージを与え、場合によっては他のオブジェクトも破壊します。ゲームにトラップパーツを追加することで、プレイヤーが完走するのがより難しくなります。このスクリプトでは、パーツに触れたすべてのものを破壊するトラップを作成します。トラップは必ず固定し、落下して勝手にものを破壊することがないようにしてください。

プロジェクトを設定する

新しいパーツを作成する

  1. Partを少しだけ地面から浮かせて設置します。(Baseplateに触れないように)
  2. Explorer (エクスプローラー)でパーツの名前を TrapPart に変更します。
  3. パーツを Anchor に設定します。

パーツは固定し、浮いているようにすること
これを行わないと、意図せず他のものに触れ、破壊してしまうことがあります。

スクリプトと変数を作成する

  1. TrapPartScript を追加します。
  2. スクリプトの名前を TrapScript に変更します。
  3. Hello World を説明コメントに置き換えます。
  4. コメントの下に local trap = script.Parent と入力します。

コードは次のようになっているはずです。

-- 触れたものは何でも破壊する
 
-- パーツのトラップ
local trap = script.Parent

関数のパラメータを作成する

このトラップは、パーツに触れたものを破壊する機能があります。これを実現させるためには、関数で何がタッチされたのかが分からなくてはなりません。

外部から情報を得るために、関数はパラメータと呼ばれるプレースホルダを使用します。パラメータは、関数名の後に続く( )の中に入力されます。パラメータは変数でもあるので、好きな名前を付けることができます。

onTouch() という新しい関数を作成し、objectTouched というパラメータでトラップに触れたものを確認し、触れた部分を破壊します。

  1. ローカル関数を作成します。関数の名前は何でも構いませんが、このレッスンでは onTouch を使用します。
  1. ( ) 内にパラメータ名を入力します。ここでは objectTouched という名前にします。

名前のつけ方のルール – パラメータ
パラメータは変数なので、最初の1文字は小文字にし、その後のワードはすべて頭文字を大文字にします。
例:playerItem、objectTouched、player

  1. local function onTouch()end の間に print文を入れ、関数をテストできるようにします。

次は、ObjectTouchedパラメータを見て、何がパーツに触れたのかを確認します。

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

何かがパーツに触れたときに関数を実行するようにしたいと思います。これを実現するには、関数を Touched イベントに接続します。イベントとは、ゲーム内で起こることです。プレイヤーがパーツに触れたり、HPが減るなどのようなものです。イベントに関数を接続すると、イベントが発生するたびに関数が実行されます。

Touchedイベントは、あるパーツが別のパーツに触れるたびに発生します。これを使用すれば、プレイヤーが押せるボタンやトラップなどが作成できます。

Touchedイベントを作成する

  1. 関数の中ではなく、関数の外、end の下に trap.Touched:Connect(onTouch) と入力します。
  1. テストプレイし、パーツに触れてみてください。Outputウィンドウに「Something touched the trap」とメッセージが表示されることを確認します。

問題解決のヒント
文字列がOutputウィンドウに表示されない場合、次のことを確認してください。
print(“Something touched the part”)local function onTouch()end の間に入っているか。
Touched の頭文字が大文字になっているか。

パーツを破壊する

onTouch が呼ばれたことが確認できたので、次に関数を使用してパーツにタッチしたものすべてが破壊されるようにします。

  1. print文の次の行に objectTouched:Destroy() と入力します。
  1. テストプレイして、プレイヤーがトラップに触れるとどうなるのかを確認します。

記号の使用
」はオブジェクトと関数を結びつける特別な記号です。この場合、destroy()objectTouched パラメータ内に格納されているオブジェクトに対して使用されます。

コードは次のようになっているはずです。

-- 触れたものは何でも破壊する
-- 変数の設定
local trap = script.Parent
 
-- 触れたときに呼ばれる
local function onTouch(objectTouched)
    -- 触れたものを消す
    print("Something touched the trap part")
    objectTouched:Destroy()
End
 
-- タッチイベントの接続
trap.Touched:Connect(onTouch)

トラブルシューティングコード

起動時にレベルの一部が破壊されたり、画面が点滅したりするなどの予期せぬ問題が発生します。

  • トラップパーツが固定されていることを確認してください。固定されていないと、誤って落下して何かに触れる可能性があります。
  • ゲームの開始時に、パーツが何かに触れていないことを確認してください。

トラブルシューティングのヒント

  • Touched は頭の1文字目を大文字にしてください。
  • part.Touched:Connect(onTouch) はイベント関数の後にくるようにする必要があります。

コメントを残す