STEP 04

初心者編 4 / 9

触れるとやり直し:溶岩の床をLuauで作る

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

公開日
3ステージの足場の下全体へオレンジ色の溶岩床を敷いたRoblox Studioの画面

前の記事で作った足場から落ちても、そのまま空へ落ち続けるだけでは失敗した場所が分かりにくい。コースの下へ大きな溶岩床を敷き、触れたキャラクターが倒れて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

PropertiesのCanCollideとCanTouchをオレンジの枠で示した画面

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

3ステージの下をオレンジ色のLavaFloorで覆った編集画面

PlayするとNeonが明るく見える。見た目は溶岩らしくなったが、今の段階では触れても普通の床と同じだ。次のScriptで失敗の動きを加える。

LavaFloorへScriptを入れる

ExplorerでLavaFloorへマウスを重ね、右に出る+を押そう。見えないときはLavaFloorを右クリックして Insert Object を選ぶ。

ExplorerのLavaFloor行に出る追加ボタンをオレンジの枠で示した画面

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

Insert Basic ObjectsのScriptをオレンジの枠で示した画面

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

ExplorerでLavaFloorの子になった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)

KillOnTouchに入力した11行のLuauコード

Tip:インデントはコードの段差

行の先頭にある空白をインデントという。家の間取りで「部屋の中に机があり、机の引き出しの中に物がある」と一段ずつ内側へ書くように、コードのまとまりを段差で見やすくするものだ。このコードでは、4〜6行目がfunctionの中なので1段、7行目はさらにifの中なので2段下がっている。8行目のendifと同じ1段目、9行目のendfunctionと同じ一番左へ戻る。Luauではendがまとまりの終わりを示すため、貼り付けたあとも見本と同じ段になっているか確認しよう。公式のFunctionsでも、関数の中身をfunctionendの間に置く形を確認できる。

コードの文字、丸かっこ、引用符は半角で入力する。貼り付けた直後に赤い下線が出たら、前後の行まで見比べよう。

家の中と呼び鈴にたとえてコードを読む

Tip:オブジェクトと.の意味

現実の家には、部屋、机、椅子、照明などのモノがある。それぞれに色や大きさがあり、どの部屋に置かれているかも決まっている。RobloxでもPart、Script、キャラクターなどのモノをオブジェクトとして扱い、色や体力、親子関係などをプロパティとして持たせる。.は「そのモノが持つ情報を見る」という印だ。script.Parentなら、scriptは今書いているKillOnTouch自身、ParentはExplorerでそれを中に入れている1つ上のオブジェクトを指す。今回はLavaFloorだ。公式のData modelはRobloxの場所がオブジェクトの親子関係でできていることを、Properties and attributes.でプロパティへアクセスし、script.Parentで親を参照する方法を説明している。

最初のlocal lava = script.Parentは、LavaFloorlavaという短い呼び名を付ける行だ。このあとのコードでは、長い場所を毎回たどらず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テスト

溶岩で倒れたあとStartIslandへ再出現したアバター

SpawnLocationへ戻ったら、もう一度Playして青・紫・緑・黄色の足場にも乗ってみよう。普通の足場では倒れず、LavaFloorへ触れたときだけ倒れれば確認完了だ。

動かないときの確認順

  1. ExplorerでKillOnTouchLavaFloorの下に入っているか確認する
  2. LavaFloorのCanTouchとCanCollideがオンになっているか確認する
  3. コードのTouchedHumanoidHealthの大文字と小文字を見直す
  4. Studio上部の Window から Output を開き、赤いエラーの行番号を見る

Studio下部に開いたOutputパネルをオレンジの枠で示した画面

OutputはScriptのエラーとprint()の結果を見る場所だ。公式のOutput windowでも、実行中のメッセージやエラーを確認する基本ツールとして案内されている。エラーが出た行だけでなく、その1行前の閉じかっこや引用符も確認しよう。

ここまでの完成チェック

  • LavaFloorがコースの下を覆い、Anchoredになっている
  • KillOnTouchLavaFloorの子になっている
  • 溶岩へ触れるとキャラクターが倒れる
  • 数秒後にStartIslandのSpawnLocationへ戻る
  • 普通の足場では倒れない

これで失敗してやり直す流れが加わった。次の記事では、毎回スタートへ戻る不便を減らすため、途中から再開できるチェックポイントを作る。

前の記事: 足場を増やそう:3ステージのアスレチックを組み立てる

次の記事: 途中から再開しよう:チェックポイントを作る

この記事で参照した公式情報