例えばROBLOXで簡単なアスレチックゲームを作成しようとした時、1つのアスレチックステージをクリアした後にチェックポイントもなく次のステージに進むと失敗すると最初まで戻ってしまいます。
そうなると進めば進むほど最初に戻るリスクが高く、失敗できないゲームになるので気軽に楽しめるゲームではなくなります。
その為、プレイヤーがやられた時に最後に触れたチェックポイントから開始できるようにすることで、気軽にアスレチックゲームを楽しむことができるようになります。
ROBLOXにはSpawnLocationというキャラクターがゲームに入った時に開始地点となるオブジェクトが準備されています。
勘違いしやすいのですが、SpawnLocationから開始されるからと言って複数配置しても最後に触れたSpawnLocationから開始することはできません。
また、検索をかけても曖昧な情報が多い為、わかりやすくまとめます。
まずSpawnLocationは1つ設置することで開始地点を決めることができます。
次に「パーツ」より「ブロック」を配置して、適当な間隔で配置します。
※この時、ブロックを空中に配置している為、上のタブ内にある「アンカー」を有効にしないとゲーム開始時に下に落ちてしまうので注意
次にチェックポイント用のパーツを追加します。
この時追加するパーツは何でも可能ですが、今回はわかりやすくブロックをSpawnLocationと同じように大きめの四角形に形を変えて配置します。
※この時パーツがチェックポイントとわかりやすいように「Workspace」内にあるチェックポイントに設定したいパーツの名前を「CheckPoint1」としてます。
上の手順で作成した「CheckPoint1」にスクリプトを追加するため、画面右側のタブにある「CheckPoint1」を選択して「+」アイコンを押すと、パーツの下に追加できる項目の一覧が表示されます。
その中から「Script」を選択して追加します。
追加された「Script」をダブルクリックするとプログラムが記載されています。
記載されているプログラムは削除し、下記のプログラムを記載してください。
下記にコピーできるように文字で記載
-- スクリプトの親オブジェクト=CheckPoint1を変数に取得
local checkPoint = script.Parent;
-- CheckPoint1に触れた時に発生するイベント
checkPoint.Touched:Connect(function(touchPart)
-- CheckPoint1に触れたプレイヤーを変数に取得
local player = game.Players:GetPlayerFromCharacter(touchPart.Parent);
-- プレイヤーが取得出来た時
if player then
-- キャラクターが追加された時に発生するイベント
player.CharacterAdded:Connect(function(character)
wait();
-- キャラクターの配置場所をcheckPoint1の上にする
character:WaitForChild("HumanoidRootPart").CFrame = checkPoint.CFrame + Vector3.new(0, 4, 0);
end)
end
end)
チェックポイントの動作確認用を行うために、複数のステージが必要になる為、ここまでに追加した足場のパーツとチェックポイントをコピーして、次のステージを作成します。
ここまで完成したら【デバッグ実行(実際にプレイ)】してみます。
まずは画面上部の「テスト」タブを開き、「プレイ」をクリックします。
ゲームは「SpawnLocation」の上から開始されるはずです。
この先にあるブロックを渡り、チェックポイントに触れた後に「Esc」キーを押してキャラクターのリセットをしてみてください。
最後に触れたチェックポイントから開始されるはずです。
開発を始めた時に色々探してみて作ったチェックポイントがかなり複雑なチェックポイントになりました。
慣れてきた今だからこそ、自分で考えてたった10行でチェックポイントを作成できる方法にたどり着くことが出来ました。
これを応用することでもっと色々なことが出来るようになります。