【迷路編】2.スタートとゴールを設定しよう

実践編

こんにちは、ロブスタのハルです!
前回に続いて今回は迷路のスタートとゴールを作っていきたいと思います。
前回の記事はこちらからご覧ください。

スタートを設定しよう

今回はスタートをSpawnLocationスポーンロケーションに設定します。

迷路の画像データを見ながらSpawnLocationをスタート地点に移動させましょう。
SpawnLocationをクリックして、ホームタブの移動を押すことで移動できます。

今回は迷路の幅が4なのでSpawnLocationのSizeサイズプロパティを(x, y, z) = (4, 1, 4)にします。

start

こんな感じになればOKです!

ゴールを設定しよう

ゴールはパーツをむとプレイヤーの画面上に『クリア!』と表示されるようにしたいと思います。

ゴールパーツを作ろう

まずはゴール用のパーツを作っていきましょう。

いつも通りホームタブのパーツからブロックを選択してWorkspaceワークスペース上に置きます。
そうしたらこちらもSizeプロパティを(x, y, z) = (4, 1, 4)とします。

ゴールに配置するのは一旦置いておいて、このパーツの名前をGoalゴールとしておきます。

クリア!という文字を用意しよう

まずは表示用のGUIジーユーアイを作っていきます。

エクスプローラ上でStarterGuiスタータージーユーアイを探して+マークを押します。
ScreenGuiスクリーンジーユーアイを押し、さらにScreenGuiの右の+マークを押してTextLabelテキストラベルを選択します。

explorer
goal

画面上にLabelラベルと書かれた白い長方形が出てきていれば大丈夫です。

TextLabelを選択した状態で3Dビューポートの白い長方形をつかんでみると動かすことができます。

TextLabelのSizeプロパティを{0, 300},{0, 100}としておきます。
その状態で白い長方形をつかみ、上下左右に緑の点線が出る位置まで動かします。

Label

これで画面の真ん中に持ってくることができました。

以下の設定をしましょう。

  1. TextLabelのTextテキストプロパティにクリア!と入力
  2. TextColor3テキストカラースリープロパティを好きな色に設定
  3. TextSizeテキストサイズプロパティを64ぐらいに設定
  4. BackgroundTransparencyバックグラウンドトランスパレンシープロパティを1にする
  5. 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などでよく見るクロスヘア(レティクル)を表示させてみたいと思います。

コメント

タイトルとURLをコピーしました