こんにちは、ロブスタのハルです!
前回に続いて今回は迷路のスタートとゴールを作っていきたいと思います。
前回の記事はこちらからご覧ください。
スタートを設定しよう
今回はスタートをSpawnLocationに設定します。
迷路の画像データを見ながらSpawnLocationをスタート地点に移動させましょう。
SpawnLocationをクリックして、ホームタブの移動を押すことで移動できます。
今回は迷路の幅が4なのでSpawnLocationのSizeプロパティを(x, y, z) = (4, 1, 4)にします。
こんな感じになればOKです!
ゴールを設定しよう
ゴールはパーツを踏むとプレイヤーの画面上に『クリア!』と表示されるようにしたいと思います。
ゴールパーツを作ろう
まずはゴール用のパーツを作っていきましょう。
いつも通りホームタブのパーツからブロックを選択してWorkspace上に置きます。
そうしたらこちらもSizeプロパティを(x, y, z) = (4, 1, 4)とします。
ゴールに配置するのは一旦置いておいて、このパーツの名前をGoalとしておきます。
クリア!という文字を用意しよう
まずは表示用のGUIを作っていきます。
エクスプローラ上でStarterGuiを探して+マークを押します。
ScreenGuiを押し、さらにScreenGuiの右の+マークを押してTextLabelを選択します。
画面上にLabelと書かれた白い長方形が出てきていれば大丈夫です。
TextLabelを選択した状態で3Dビューポートの白い長方形をつかんでみると動かすことができます。
TextLabelのSizeプロパティを{0, 300},{0, 100}としておきます。
その状態で白い長方形をつかみ、上下左右に緑の点線が出る位置まで動かします。
これで画面の真ん中に持ってくることができました。
以下の設定をしましょう。
- TextLabelのTextプロパティにクリア!と入力
- TextColor3プロパティを好きな色に設定
- TextSizeプロパティを64ぐらいに設定
- BackgroundTransparencyプロパティを1にする
- Visibleプロパティにチェックをいれる
ゴールに触れるとクリア!と表示しよう
Goalパーツの右の+マークをクリックしてScriptを追加します。
Scirptには以下のコードを書きます。
local goal = script.Parent
goal.Touched:Connect(function (hit)
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if player then
local textLabel = player:FindFirstChildOfClass("PlayerGui"):FindFirstChild("ScreenGui").TextLabel
-- 内部的にはlocal textLabel = PlayerGui.ScreenGui.TextLabelとなっている
textLabel.Visible = true
task.wait(2)
textLabel.Visible = false
end
end)
スクリプトの説明
1行目でスクリプトの親であるGoalパーツを変数goalに保管しています。
3行目でgoalにTouchedイベントを設定し、Connectの引数として無名関数を接続しています。
無名関数の引数としてhitを渡しており、このhitはgoalに触れたパーツそのものを表しています。
4行目のhit.Parentはhitの親――つまり、触れたパーツが属しているキャラクター全体のオブジェクトを表しています。GetPlayerFromCharacter関数はhit.Parentに対応するプレイヤー――つまり、そのキャラクターを操作しているプレイヤーオブジェクトを取得して、変数playerに保管しています。
4行目ではnilが返されることがあります。そこで5行目にif player thenという条件を設けることでplayerが存在する場合にのみそれ以降の処理を実行します。
6行目は少し複雑ですが、最終的にTextLabelを取得しています。
まず、player:FindFirstChildOfClass(“PlayerGui”)の部分でプレイヤーのPlayerGuiオブジェクトを探しています。次にFindFirstChild(“ScreenGui”)ではPlayerGui内のScreenGuiオブジェクトを取得しています。最後に.TextLabelによってScreenGuiオブジェクト内のTextLabelを取得しています。
8行目ではTextLabelのVisibleプロパティをtrueにすることで画面上に表示しています。
9行目で2秒待って、10行目で再びTextLabelのVisibleプロパティをfalseにして、画面上から見えなくしています。
一見するとややこしくてわかりづらいですが、長々と書かれている部分はすべてオブジェクトを取得する処理となっており、結局はTextLabelのVisibleプロパティをON/OFFに切り替えているだけです。
テストプレイ
テストしてみましょう。プレイを押して、ゴールパーツを踏んでみてください。
画面上にクリア!と表示されれば成功です!!
後はゴール位置にゴールパーツを配置すれば完成です!
まとめ
お疲れ様でした。これまで基本編や練習編、Lua言語講座など基礎的な勉強ばかりでつまらなかったかもしれませんが、そのときの知識と少しだけ新しい知識を使うことで簡単な迷路ゲームを作ることができましたね!
今回の迷路は使い方によってはダンジョンなどに応用できるかと思います。
迷路の制作は一旦完了しましたが、ここからはよりゲーム性を高めるために工夫してみたいと思います。
そこで次回は1人称視点に固定し、FPSなどでよく見るクロスヘア(レティクル)を表示させてみたいと思います。
コメント