触れるとやり直し:溶岩の床をLuauで作る
3ステージの下へ溶岩のPartを敷き、TouchedイベントとHumanoidを使って、触れたキャラクターを開始地点から再出現させよう。

前の記事で作った足場から落ちても、そのまま空へ落ち続けるだけでは失敗した場所が分かりにくい。コースの下へ大きな溶岩床を敷き、触れたキャラクターが倒れてSpawnLocationから再出現する仕組みを作ろう。
ここで初めて Script とRobloxのプログラミング言語 Luau を使う。コードを全部暗記する必要はない。「何に触れたかを受け取り、その中にHumanoidがあればHealthを0にする」という流れを追えば十分だ。
溶岩のPartを作る
Homeの Part から新しいPartを追加し、Explorerで名前をLavaFloorへ変えよう。Propertiesで次の値を入れる。
- Size:
70, 1, 125 - Position:
0, -4, -50 - Anchored: オン
- CanCollide: オン
- CanTouch: オン
- Color: オレンジ
- Material:
Neon

StartIslandとコースの下を覆う大きな板になる。上面はStartIslandより3.5 studほど低いので、開始直後に触れることはない。コースの外へ落ちたときだけ溶岩へ着く高さだ。

PlayするとNeonが明るく見える。見た目は溶岩らしくなったが、今の段階では触れても普通の床と同じだ。次のScriptで失敗の動きを加える。
LavaFloorへScriptを入れる
ExplorerでLavaFloorへマウスを重ね、右に出る+を押そう。見えないときはLavaFloorを右クリックして Insert Object を選ぶ。

左側の Insert Basic Objects で Script を選ぼう。見つからない場合は上の検索欄へScriptと入力する。

LavaFloorの下にScriptが入ったら、名前をKillOnTouchへ変える。

Scriptをダブルクリックしてエディタを開き、最初から入っている内容をすべて消す。次のコードをそのまま貼り付けよう。これはRoblox公式のDeadly lavaと同じ基本形だ。
local lava = script.Parent
local function kill(otherPart)
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
lava.Touched:Connect(kill)

Tip:インデントはコードの段差
行の先頭にある空白をインデントという。家の間取りで「部屋の中に机があり、机の引き出しの中に物がある」と一段ずつ内側へ書くように、コードのまとまりを段差で見やすくするものだ。このコードでは、4〜6行目が
functionの中なので1段、7行目はさらにifの中なので2段下がっている。8行目のendはifと同じ1段目、9行目のendはfunctionと同じ一番左へ戻る。Luauではendがまとまりの終わりを示すため、貼り付けたあとも見本と同じ段になっているか確認しよう。公式のFunctionsでも、関数の中身をfunctionとendの間に置く形を確認できる。
コードの文字、丸かっこ、引用符は半角で入力する。貼り付けた直後に赤い下線が出たら、前後の行まで見比べよう。
家の中と呼び鈴にたとえてコードを読む
Tip:オブジェクトと
.の意味現実の家には、部屋、机、椅子、照明などのモノがある。それぞれに色や大きさがあり、どの部屋に置かれているかも決まっている。RobloxでもPart、Script、キャラクターなどのモノをオブジェクトとして扱い、色や体力、親子関係などをプロパティとして持たせる。
.は「そのモノが持つ情報を見る」という印だ。script.Parentなら、scriptは今書いているKillOnTouch自身、ParentはExplorerでそれを中に入れている1つ上のオブジェクトを指す。今回はLavaFloorだ。公式のData modelはRobloxの場所がオブジェクトの親子関係でできていることを、Properties and attributesは.でプロパティへアクセスし、script.Parentで親を参照する方法を説明している。
最初のlocal lava = script.Parentは、LavaFloorにlavaという短い呼び名を付ける行だ。このあとのコードでは、長い場所を毎回たどらずlavaと書ける。
Tip:関数とイベントは呼び鈴のようなもの
家の呼び鈴では、ボタンが押されたという合図と、音を鳴らす動作を配線でつなぐ。コードでは、あとで実行したい動作のまとまりを関数、何かが起きた合図をイベントという。このコードの
killが「キャラクターを倒す動作」、Touchedが「溶岩に何かが触れた合図」、Connect(kill)が2つをつなぐ配線だ。
local function kill(otherPart)からendまでが、触れたあとに行う動作だ。キャラクターの足や胴体など、最初に触れたPartがotherPartという名前でこの中へ渡される。
otherPart.Parentで、足や胴体を中に持つキャラクター全体へ1つ戻る。そこからFindFirstChild("Humanoid")でHumanoidを探す。Humanoidはキャラクターの体力や移動を管理するオブジェクトだ。見つかったときだけif humanoid thenの中へ進み、.でHealthプロパティへアクセスして0にする。体力が0になるとキャラクターが倒れ、しばらくしてSpawnLocationから再出現する。
最後のlava.Touched:Connect(kill)が、呼び鈴の配線に当たる行だ。この行がないと、killという動作を書いても、溶岩へ触れた合図から実行されない。
Playして死亡と再出現を確認する
Playを押し、StartIslandの横から溶岩へ降りよう。触れた直後にキャラクターが倒れ、数秒後にSpawnLocationへ戻れば成功だ。


SpawnLocationへ戻ったら、もう一度Playして青・紫・緑・黄色の足場にも乗ってみよう。普通の足場では倒れず、LavaFloorへ触れたときだけ倒れれば確認完了だ。
動かないときの確認順
- Explorerで
KillOnTouchがLavaFloorの下に入っているか確認する LavaFloorのCanTouchとCanCollideがオンになっているか確認する- コードの
Touched、Humanoid、Healthの大文字と小文字を見直す - Studio上部の Window から Output を開き、赤いエラーの行番号を見る

OutputはScriptのエラーとprint()の結果を見る場所だ。公式のOutput windowでも、実行中のメッセージやエラーを確認する基本ツールとして案内されている。エラーが出た行だけでなく、その1行前の閉じかっこや引用符も確認しよう。
ここまでの完成チェック
LavaFloorがコースの下を覆い、AnchoredになっているKillOnTouchがLavaFloorの子になっている- 溶岩へ触れるとキャラクターが倒れる
- 数秒後にStartIslandのSpawnLocationへ戻る
- 普通の足場では倒れない
これで失敗してやり直す流れが加わった。次の記事では、毎回スタートへ戻る不便を減らすため、途中から再開できるチェックポイントを作る。
前の記事: 足場を増やそう:3ステージのアスレチックを組み立てる
次の記事: 途中から再開しよう:チェックポイントを作る