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

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

プロジェクトを設定する

新しいパーツを作成する

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

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

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

  1. TrapPart に Script を追加します。
  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) はイベント関数の後にくるようにする必要があります。

コメントを残す