トラップはプレイヤーにダメージを与え、場合によっては他のオブジェクトも破壊します。ゲームにトラップパーツを追加することで、プレイヤーが完走するのがより難しくなります。このスクリプトでは、パーツに触れたすべてのものを破壊するトラップを作成します。トラップは必ず固定し、落下して勝手にものを破壊することがないようにしてください。
プロジェクトを設定する
新しいパーツを作成する
- Partを少しだけ地面から浮かせて設置します。(Baseplateに触れないように)
- Explorer (エクスプローラー)でパーツの名前を TrapPart に変更します。
- パーツを Anchor に設定します。
パーツは固定し、浮いているようにすること
これを行わないと、意図せず他のものに触れ、破壊してしまうことがあります。
スクリプトと変数を作成する
- TrapPart に Script を追加します。
- スクリプトの名前を TrapScript に変更します。
- Hello World を説明コメントに置き換えます。
- コメントの下に local trap = script.Parent と入力します。
コードは次のようになっているはずです。
-- 触れたものは何でも破壊する
-- パーツのトラップ
local trap = script.Parent
関数のパラメータを作成する
このトラップは、パーツに触れたものを破壊する機能があります。これを実現させるためには、関数で何がタッチされたのかが分からなくてはなりません。
外部から情報を得るために、関数はパラメータと呼ばれるプレースホルダを使用します。パラメータは、関数名の後に続く( )の中に入力されます。パラメータは変数でもあるので、好きな名前を付けることができます。
onTouch() という新しい関数を作成し、objectTouched というパラメータでトラップに触れたものを確認し、触れた部分を破壊します。
- ローカル関数を作成します。関数の名前は何でも構いませんが、このレッスンでは onTouch を使用します。
- ( ) 内にパラメータ名を入力します。ここでは objectTouched という名前にします。
名前のつけ方のルール – パラメータ
パラメータは変数なので、最初の1文字は小文字にし、その後のワードはすべて頭文字を大文字にします。
例:playerItem、objectTouched、player
- local function onTouch() と end の間に print文を入れ、関数をテストできるようにします。
次は、ObjectTouchedパラメータを見て、何がパーツに触れたのかを確認します。
イベントを使って関数を呼び出す
何かがパーツに触れたときに関数を実行するようにしたいと思います。これを実現するには、関数を Touched イベントに接続します。イベントとは、ゲーム内で起こることです。プレイヤーがパーツに触れたり、HPが減るなどのようなものです。イベントに関数を接続すると、イベントが発生するたびに関数が実行されます。
Touchedイベントは、あるパーツが別のパーツに触れるたびに発生します。これを使用すれば、プレイヤーが押せるボタンやトラップなどが作成できます。
Touchedイベントを作成する
- 関数の中ではなく、関数の外、end の下に trap.Touched:Connect(onTouch) と入力します。
- テストプレイし、パーツに触れてみてください。Outputウィンドウに「Something touched the trap」とメッセージが表示されることを確認します。
問題解決のヒント
文字列がOutputウィンドウに表示されない場合、次のことを確認してください。
・print(“Something touched the part”) は local function onTouch() と end の間に入っているか。
・Touched の頭文字が大文字になっているか。
パーツを破壊する
onTouch が呼ばれたことが確認できたので、次に関数を使用してパーツにタッチしたものすべてが破壊されるようにします。
- print文の次の行に objectTouched:Destroy() と入力します。
- テストプレイして、プレイヤーがトラップに触れるとどうなるのかを確認します。
記号の使用
「:」はオブジェクトと関数を結びつける特別な記号です。この場合、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) はイベント関数の後にくるようにする必要があります。
[ 【2】インスタンスとパーティクル ]