「ゲームの中に看板を立てて、遊び方を書きたい」「ゴールの上に文字を浮かべたい」
ロブロックス(Roblox)スタジオで文字を出す方法を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、スタート地点の前に立つ看板と、ゴールの上に浮かぶ「ゴールまであと何スタッド」という文字を作り(スタッドはRobloxの中の長さの単位です)、スクリプトで数字を変えるところまで進めます。
入門ステップ17/24 前の記事:ロブロックス(Roblox)の「Infinite yield possible」の直し方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。パーツの置き方とスクリプトの入れ方はオビーの作り方で画像付きで解説しています。
今回の完成状態:下の画像のように、看板に「いま 1人 が遊んでいます」、ゴールの上に「ゴールまであと ○ スタッド」と出れば成功です。

文字を出す3つの入れ物
ロブロックスで文字を出すときは、文字(TextLabel)を「入れ物」の中に入れます。入れ物は3種類あり、どこに文字を出したいかで選びます。
| 入れ物 | 文字が出る場所 | 向き | 使う場面 |
|---|---|---|---|
| ScreenGui | 遊ぶ人の画面にそのまま重なる | いつも正面 | 遊び方ボタン、所持コインの数 |
| SurfaceGui | パーツの1つの面に貼りつく | 面と同じ向き | 看板、ポスター、掲示板 |
| BillboardGui | パーツの上の空中に浮かぶ | いつもカメラのほうを向く | ゴールの目印、頭の上の名前 |
ScreenGuiの使い方はボタンの作り方で解説しています。ここで使うのは、残りの2つのSurfaceGuiとBillboardGuiです。
1. 看板の板を置く
新しいBaseplateを開いたら、エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」(赤い枠)を押してください。赤い枠は、その手順で押す場所です。ボタンの名前や置き場所は、Roblox側の更新で変わることがあります。

検索欄に「Part」と入れて、一覧の「Part」(赤い枠)を押しましょう。

できたPartをエクスプローラで選んでF2キーを押し、名前を「Sign」に変えます(赤い枠)。

続けてSignを選んだまま、プロパティの検索欄に「Size」と入れ、Sizeを「10, 5, 0.5」にしてEnterキーを押します(赤い枠)。横に長く、薄い板になります。

プロパティの検索欄に「Position」と入れ、「CFrame」のすぐ下のPositionを「0, 3, -15」にしてEnterキーを押します(赤い枠)。スポーン地点の少し前に、看板が立ちます。

最後に、Signを選んだまま、3D画面上部の「ホーム」タブの「固定」(赤い枠)を押して、板が倒れないようにしておきます。

2. SurfaceGuiとTextLabelを入れる
エクスプローラの「Sign」にマウスを乗せて、右に出る「+」(赤い枠)を押します。

検索欄に「SurfaceGui」と入れて、「SurfaceGui」(赤い枠)を押します。

エクスプローラで入ったSurfaceGuiを選んでF2キーを押し、名前を「SignGui」に変えてEnterキーを押します。
次に、エクスプローラの「SignGui」にマウスを乗せて「+」(赤い枠)を押します。

検索欄に「TextLabel」と入れて、「TextLabel」(赤い枠)を押します。

エクスプローラで入ったTextLabelを選んでF2キーを押し、名前を「SignText」に変えてEnterキーを押します。エクスプローラは「Sign」の中に「SignGui」、その中に「SignText」が入った形になります(赤い枠)。

ただ、この時点では看板を見ても何も書かれていません。文字が板の裏側に出ているからです。
3. 文字が出る面を選ぶ
文字が出る面は、SurfaceGuiの「Face(フェイス)」で決まります。エクスプローラで「SignGui」を選び、プロパティの検索欄に「Face」と入れると、最初は「Front(前)」になっています(赤い枠)。

「Front」の右の「▼」を押すと、6つの面の一覧が出ます。カメラ側に文字を出したいので、「Back(後ろ)」(赤い枠)を選びます。

Faceが「Back」(画像の1)になると、看板の左上に小さく「Label」と出ます(画像の2)。これで、文字がこちら側の面に出るようになりました。

どの面が「Front」なのかは、パーツの向きで変わります。文字が見えないときは、まずFaceを順番に変えてみるのがいちばん早い直し方です。
4. 文字を看板いっぱいに大きくする
エクスプローラで「SignText」を選び、プロパティの検索欄に「Size」と入れます。似た名前の欄がいくつか並ぶので、名前がちょうどSizeの欄を「{1, 0},{1, 0}」にしてEnterキーを押します(赤い枠)。「1」は「看板の幅と高さいっぱい」という意味です。

次に、プロパティの検索欄に「Text」と入れ、名前がちょうどTextの欄に「ようこそ!ゴールはこの先」と入れてEnterキーを押します(赤い枠)。日本語もそのまま入れられます。

このままでは文字が小さいままです。プロパティの検索欄に「TextScaled」と入れて、チェックを入れます(赤い枠)。TextScaledをオンにすると、文字が看板の大きさに合わせて自動で大きくなります。

文字の後ろの白っぽい四角を消すには、プロパティの検索欄に「BackgroundTransparency」(背景の透明度)と入れて、「1」にしてEnterキーを押します(赤い枠)。0なら見える、1なら完全に透明です。

文字の形を変えたいときは、プロパティの検索欄に「FontFace」(フォント)と入れて、右の「▼」を押して、一覧からフォントを選びます。ここでは「Montserrat」にしました(赤い枠)。

続けて、Styleの「B」(画像の1)を押すと、Weightが「Bold」(画像の2)に変わり、文字が太くなります。

看板の文字が太くなりました(赤い枠)。

看板の文字がぼやけるときは、エクスプローラで「SignGui」を選び、プロパティの検索欄に「PixelsPerStud」と入れて、値を見ます(赤い枠)。初期値は50で、数を大きくすると細かく、小さくすると粗くなります。まずは初期値の50のまま使い、ぼやけが気になるときだけ数を大きくします。

| プロパティ | どこにある | 今回の値 | 変わること |
|---|---|---|---|
| Face | SignGui | Back | 文字が出る面 |
| Size | SignText | {1, 0},{1, 0} | 文字の枠を看板いっぱいにする |
| Text | SignText | ようこそ!ゴールはこの先 | 表示する文字 |
| TextScaled | SignText | オン | 文字を枠に合わせて大きくする |
| BackgroundTransparency | SignText | 1 | 文字の後ろの四角を消す |
5. ゴールの上に浮かぶ文字を作る
次は、空中に浮かぶ文字です。文字を浮かべるゴールの板を、1の看板と同じやり方で置きます。
エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します。検索欄に「Part」と入れて、一覧の「Part」を押します(赤い枠)。

できたPartをエクスプローラで選んでF2キーを押し、名前を「Goal」に変えます(赤い枠)。

続けてGoalを選んだまま、プロパティの検索欄に「Size」と入れ、Sizeを「6, 1, 6」にしてEnterキーを押します(赤い枠)。平たい板になります。

プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionを「0, 0.5, -60」にしてEnterキーを押します(画像の1)。スポーン地点から遠く離れた奥の床に、板が置かれます(画像の2)。

Goalを選んだまま、3D画面上部の「ホーム」タブの「固定」を押して、板が動かないようにしておきます(画像の1)。1の看板で押したのと同じボタンです。プロパティの検索欄に「Anchored」と入れると、チェックが入っています(画像の2)。

最後に色を変えます。プロパティの検索欄に「BrickColor」と入れ、BrickColorの右の欄を押して黄色の「New Yeller」を選びます(赤い枠)。

エクスプローラに「Goal」が並びます(赤い枠)。

エクスプローラの「Goal」にマウスを乗せて「+」(赤い枠)を押します。

検索欄に「BillboardGui」と入れて、「BillboardGui」(赤い枠)を押します。

エクスプローラで入ったBillboardGuiを選んでF2キーを押し、名前を「GoalGui」に変えてEnterキーを押します。
GoalGuiを選んだまま、プロパティの検索欄に「Size」と入れると、名前がちょうどSizeの欄が「{0, 200},{0, 50}」になっています(赤い枠)。入れたばかりのBillboardGuiの初期値です。

エクスプローラの「GoalGui」にマウスを乗せて「+」を押します。検索欄に「TextLabel」と入れて、一覧の「TextLabel」(赤い枠)を押します。

エクスプローラで入ったTextLabelを選んでF2キーを押し、名前を「GoalText」に変えてEnterキーを押します。
エクスプローラでGoalTextを選び、プロパティの検索欄に「Size」と入れます。看板のときと同じように、名前がちょうどSizeの欄を「{1, 0},{1, 0}」にしてEnterキーを押します(赤い枠)。

続けてGoalTextを選んだまま、プロパティの検索欄に「BackgroundTransparency」と入れて、「1」にしてEnterキーを押します(赤い枠)。

プロパティの検索欄に「TextScaled」と入れて、チェックを入れます(赤い枠)。

プロパティの検索欄に「Text」と入力し、名前がちょうどTextの欄に「ゴール」と入れてEnterキーを押します(赤い枠)。

プロパティの検索欄に「TextColor3」(文字の色)と入れて、白(255, 255, 255)にしてEnterキーを押します(赤い枠)。

プロパティの検索欄に「TextStrokeTransparency」(文字のふちどり)と入れて、「0」にしてEnterキーを押します(赤い枠)。ふちどりが付くと、空の色の上でも読みやすくなります。この時点では文字が板の中に隠れていて見えませんが、次のGoalGuiの設定で板の上に出てきます。

続けて、エクスプローラで「GoalGui」を選んでプロパティを4つ変えます。まずプロパティの検索欄に「Size」と入れて、名前がちょうどSizeの欄を「{0, 320},{0, 60}」にしてEnterキーを押します(赤い枠)。

BillboardGuiのSizeは、書く場所で大きさの決まり方が変わります。遠くからでも読ませたい目印は、2つめと4つめの数(ピクセル)で決めます。
| Sizeの書き方 | 大きさの決まり方 | 向いている文字 |
|---|---|---|
| {0, 320},{0, 60}(ピクセル) | 画面の上でいつも同じ大きさ。遠くでも読める | ゴールの目印、遠くから見せたい案内 |
| {8, 0},{2, 0}(スタッド) | 3Dの世界の大きさ。遠くに行くと小さくなる | 近くで読む札、キャラクターの名前 |
次にプロパティの検索欄に「StudsOffset」と入れて、「0, 4, 0」にしてEnterキーを押します(赤い枠)。真ん中の数が上下で、4スタッド上に浮かびます。

プロパティの検索欄に「AlwaysOnTop」と入れて、チェックを入れます(赤い枠)。オンにすると、壁などのうしろにあっても文字が手前に見えます。

最後にプロパティの検索欄に「MaxDistance」と入れて、「300」にしてEnterキーを押します(赤い枠)。300スタッドより遠くに離れると、文字が見えなくなります。初期値は「inf(どこまでも見える)」です。

3D画面を1回クリックしてからWキーを押し、カメラを前に進めてゴールに近づくと、黄色い板の上に「ゴール」が浮かんでいます(赤い枠)。

6. 看板に遊んでいる人数を出す(Script)
ここからは、スクリプトで文字を変えます。まず、看板に「いま ○人 が遊んでいます」と出します。全員に同じ文字を見せたいときは、サーバーで動くScriptで書きかえます。
エクスプローラの「ServerScriptService」にマウスを乗せて、「+」(赤い枠)を押します。

一覧の「Script」(赤い枠)を押します。

エクスプローラで入ったScriptを選んでF2キーを押し、名前を「SignService」に変えてEnterキーを押します。
続けてSignServiceを選んだまま、プロパティの検索欄に「RunContext」と入れます。RunContextは、スクリプトをサーバーと遊ぶ人のパソコンのどちらで動かすかを決める設定です。「▼動作」の欄にあるRunContextの一覧から「Server」(赤い枠)を選びます。

中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local sign = workspace:WaitForChild("Sign")
local signText = sign:WaitForChild("SignGui"):WaitForChild("SignText")
-- 看板の文字を書きかえる(leaving は、いま抜けようとしている人)
local function updateSign(leaving)
local count = #Players:GetPlayers()
if leaving then
-- 抜ける人は、この時点ではまだ一覧に入っているので1人引く
count -= 1
end
signText.Text = "ようこそ!ゴールはこの先\nいま " .. count .. "人 が遊んでいます"
end
Players.PlayerAdded:Connect(function()
updateSign(nil)
end)
Players.PlayerRemoving:Connect(function(player)
updateSign(player)
end)
updateSign(nil)

| コードの部分 | していること |
|---|---|
| Players:GetPlayers() | いまゲームにいる人の一覧を取り出す。「#」を付けると人数になる |
| PlayerAdded | だれかが入ってきたら、看板を書きかえる |
| PlayerRemoving | だれかが抜けるときに、看板を書きかえる |
| \n | 文字の途中で改行する |
7. 人ごとに「ゴールまであと…」を出す(LocalScript)
次は、ゴールの上の文字を「ゴールまであと ○ スタッド」に変えます。距離は人によって違うので、遊ぶ人それぞれのパソコンで動くLocalScriptで書きかえます。
エクスプローラの「StarterPlayer」の左の三角を押して開き、「StarterPlayerScripts」にマウスを乗せて「+」(赤い枠)を押します。

検索欄に「LocalScript」と入れて、「LocalScript」(赤い枠)を押します。

エクスプローラで入ったLocalScriptを選んでF2キーを押し、名前を「GoalDistance」に変えてEnterキーを押します。
GoalDistanceの中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local goal = workspace:WaitForChild("Goal")
local goalText = goal:WaitForChild("GoalGui"):WaitForChild("GoalText")
while true do
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
if root then
-- ゴールまでの距離(スタッド)を整数にする
local distance = math.floor((goal.Position - root.Position).Magnitude)
if distance <= 5 then
goalText.Text = "ゴール!"
else
goalText.Text = "ゴールまであと " .. distance .. " スタッド"
end
end
task.wait(0.2)
end

「Magnitude(マグニチュード)」は、2つの場所のあいだの長さです。コードの task.wait(0.2) で0.2秒ごとに、自分のキャラクターとゴールの距離を測って文字を書きかえています。コードの distance <= 5 で、ゴールまで5スタッド以内に入ると文字が「ゴール!」に変わります。
8. テストで確かめる
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。看板に「いま 1人 が遊んでいます」と出ます(赤い枠)。奥のゴールの上には「ゴールまであと 61 スタッド」と浮かんでいます。

Wキーでゴールのほうへ歩くと、数が減っていきます(赤い枠)。


ゴールの上に乗ると、「ゴール!」に変われば成功です(赤い枠)。

Shift + F5キーでテストを停止します。
9. 2人で、人数と距離の出方を確かめる
最後は、2人で遊んだときの見え方です。3D画面上部メニュー(「ファイル」「編集」などが並ぶ段)のすぐ下の段の、いちばん左に「テスト」と書かれた欄があります。その右の「∨」を押し、一覧から「サーバーとクライアント」(赤い枠)を選びます。

いちばん左の欄の右には青い再生ボタンと一時停止ボタンがあり、さらに右に人の形の印と数字が並ぶ人数の欄が出ます。人数の欄の上向き三角を押して「2」にし(赤い枠)、青い再生ボタンを押します。

サーバーの窓と、Player1・Player2の窓が開きます。以下は、アソビシフト編集部が「サーバーとクライアント」の2人のテストで確かめた結果です。下の画像の左がPlayer1、右がPlayer2の画面です。看板はどちらも「いま 2人 が遊んでいます」になり、ゴールまでの距離は、Player1が51(画像の1)、Player2が62(画像の2)と別々の数になりました。看板は全員で同じ、距離は人ごとに違うという、スクリプトの種類による違いが目で見て分かります。

| 文字 | 書きかえたスクリプト | 見え方 |
|---|---|---|
| 看板の人数 | Script(ServerScriptService) | 全員に同じ文字が見える |
| ゴールまでの距離 | LocalScript(StarterPlayerScripts) | その人の画面だけで変わる |
確かめ終わったら、どれか1つの窓で、3D画面上部の丸い「終了」ボタン(赤い枠)を押します。サーバーとPlayer1・Player2の窓のテストがまとめて止まります。

文字が出ない・見えないときの直し方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| 看板に何も出ない | SurfaceGuiのFace | Front、Backなど面を順番に変える |
| 看板の左上に小さく「Label」しか出ない | TextLabelのSize | {1, 0},{1, 0}にする |
| 文字が小さい・はみ出る | TextScaled | オンにする |
| 文字の後ろに四角が見える | BackgroundTransparency | 1にする |
| 浮かぶ文字が出ない | BillboardGuiのSize | 0以外の大きさを入れる |
| 遠くに行くと浮かぶ文字が消える | MaxDistance | 数を大きくする |
| 壁のうしろで浮かぶ文字が隠れる | AlwaysOnTop | オンにする |
| スクリプトで変えた文字がほかの人に見えない | スクリプトの種類 | 全員に見せたい文字はServerScriptServiceのScriptで変える |
スクリプトが動いているか分からないときは、スクリプトが動かないときの確認手順で出力の見方を確かめてください。
遊ぶ人が書いた文字を出すときの注意
今回の看板は、作る人が決めた文字と数字だけを出しています。一方で、寄付ゲームの看板のように遊ぶ人が書いた文字を看板に出すときは、フィルター(不適切な言葉を隠す仕組み)を通す必要があります。公式の説明では、フィルターを通していないと分かった作品は、フィルターを入れるまで公開を止められることがあります。
| 看板に出す文字 | フィルター |
|---|---|
| 作る人がStudioやスクリプトに書いた文字(「ようこそ」など) | いらない |
| 作る人が決めた文字+計算した数字(人数、距離、残り時間) | いらない |
| 遊ぶ人が入力した文字(看板のメッセージ、ペットの名前) | 必要 |
| 保存しておいた、遊ぶ人が入力した文字 | 必要 |
スクリプトでランダムに文字を組み合わせて言葉を作る場合や、外部のサイトから取ってきた文字を出す場合も、作る人が中身を決めていないのでフィルターが必要です。
フィルターはサーバーで行います。遊ぶ人の入力をサーバーに届ける仕組みは、RemoteEventの使い方で解説しています。
AIに相談するときの伝え方
AIに看板の文字を作ってもらうときは、どの入れ物を使って、だれに見せたいかを伝えます。
Roblox Studioで、パーツ「Sign」の中のSurfaceGui「SignGui」のTextLabel「SignText」に文字を出しています。
いま遊んでいる人数を、全員に同じように見せたいです。
ServerScriptServiceのScriptで、人が入ったときと抜けたときに文字を書きかえるコードを書いてください。
遊ぶ人が入力した文字は使わないので、フィルターが必要ないかも確かめてください。
次は、地形の道具で、島と海を作ります。次のステップ(入門 18/24)
次に知りたいことを選ぶ
- 次のステップ:地形の道具で、島と海を作ります → ロブロックス(Roblox)スタジオの地形の作り方と消し方
- 看板を置くコースを作りたい → ロブロックス(Roblox)でオビーを作る方法
- 拾った数を画面に出したい → ロブロックス(Roblox)でコイン集めゲームを作る方法
- 遊ぶ人の入力をサーバーに届けたい → ロブロックス(Roblox)のRemoteEventの使い方