5. 変数
いろんなひとにあいさつをするスクリプトを書いてみましょう。

文字はダブルクオーテーション"
で囲って…こうかな?
print("田中さんおはようございます")
print("佐藤さんおはようございます")
print("山本さんおはようございます")
print("吉村さんおはようございます")
このスクリプトだと、あいさつを変えたいときにすべてひとつひとつ書きなおさなければなりません。
print("田中さんこんばんは")
print("佐藤さんこんばんは")
print("山本さんこんばんは")
print("吉村さんこんばんは")
-- おはようございます → こんばんは
そこで、変数を使い、あいさつを変更しやすくしてみましょう。
変数とは箱のようなもので、自分で変数をつくったあと、好きな値を入れて保存できます。
また、保存した値は好きなときに取り出して使うことができます。
ためしに変数を定義してみましょう。変数を作ることを、変数を定義すると言います。
まず最初にlocal
と書き、ひとつあけて変数の名前を書きます。
local test
変数名は自由ですが、数字が一番最初に入っていたり、日本語が入っている場合はエラーになってしまいます。
変数を定義できたので、好きな値を代入してみましょう。

値を入れることを、代入すると言いますよ。
変数に値を代入するには、変数名 = 値
のかたちでプログラムを書きます。
以下のスクリプトのように、=
の右側に代入する値、左側に変数名があれば、変数を定義すると同時に値を代入することもできます。
また、見やすいように=
の両側に空白をつけるのが一般的です。
-- 変数を定義した後に、値を代入するパターン
local test1
test1 = "あ、どうも"
-- 変数の定義と同時に値を代入するパターン
local test2 = 10
値を代入できたので、変数の値をprint関数で出力してみましょう。
以下のように変数名を書けば、スクリプトが実行されるときに、自動で変数に保存されている値におきかわります。
local HELLO = "あ、こんにちはー"
print(HELLO)
-- 出力ウィンドウでは... --
あ、こんにちはー
変数に何の値も代入しないで、空のまま出力してみると、nilと出力されます。
nilは、値がない状態を表します。

nilは結構見ることになりそうだし、覚えといたほうが良いんじゃね?知らんけど。
local ABC
print(ABC)
-- 出力ウィンドウでは... --
nil
変数のスクリプト例

出力はどのようになるのか、まずは自分で予想してみてください。
その後、実際にこのスクリプトをテストして答え合わせしてみましょう。
local A = 10 + 20
print(A)
local A = 10
local B = 20
print(A + B)
local A = 10 + 20
local B = "10 + 20 = " .. A
print(B)
6. オブジェクトの取得
スクリプトでは、パーツの色を変化させたり、当たり判定を変えたり、位置を変えたりなど、オブジェクトのプロパティの値を変化させることができます。
そのためには、まずオブジェクトを取得しなければなりません。
今回は、以下のようにフォルダの中にパーツを作成し、さらにその中に
スクリプトを作成します。
そして、script.Parent
を使用してパーツを取得してみます。

エクスプローラのようす⇩
スクリプトからそのスクリプト自体を取得する場合はscript
と書きます。
以下のとおり、script.プロパティ名
でスクリプトそのもののプロパティを変更することもできますし、script.オブジェクト名
でスクリプトの中に入っているオブジェクトを取得することもできます。
-- スクリプトのNameプロパティを変数に保存する
local scriptName = script.Name
-- スクリプトの中に入っているパーツを変数に保存する
local part = script.Part

だんだん話がむずかしくなってきたよ~…
そういえば、スクリプト自体もオブジェクトのひとつなんだよね。
ってことは、script
と書いたときは「 スクリプトさんが自分自身をオブジェクトとして取得する」というわけか!
それでは、これを使用してパーツを取得してみましょう。
スクリプトを含むほぼすべてのオブジェクトにはParentプロパティがあります。
このプロパティはシステムが自動で設定するもので、そのオブジェクトの親を指します。
今回の場合、 スクリプトの親は
パーツになります。
オブジェクトの親とは、そのオブジェクトが入っている場所を示します。たとえば、Workspaceの中の
パーツの親は、
Workspaceです。
以下が、 スクリプトの親である
パーツを取得するスクリプトです。
local part = script.Parent
これ以外にも、オブジェクトを取得する方法があります。
Workspace内にあるすべてのオブジェクトは、
workspace.オブジェクト名
で取得することができます。
以下のスクリプトを見ると分かるように、workspace.Folder
はFolderを取ってくるというような意味です。
local folder = workspace.Folder

Folderってことは、パソコンのフォルダと同じように、いろんなオブジェクトやスクリプトを整頓しておける場所なんじゃね?知らんけど。

オブジェクトの整理整頓は、常に心がけておかないとだね。
ゲーム内のオブジェクトを取得するときは、.
を間に入れ、必ず順を追ってスクリプトを入力しなければなりません。
-- パーツはフォルダ内にあり、これでは取得できない
local test = workspace.Part -- ×
-- Workspaceのフォルダ内のパーツを取得できる
local test = workspace.Folder.Part -- 〇
パーツを取得できたので、ためしにprint関数を使い出力してみましょう。
テストプレイをしてみると、出力ウィンドウに取得したパーツの名前が出力されるはずです。
その名前をクリックすると、エクスプローラからパーツが選択状態になります。
print(workspace.Folder.Part)
練習
それでは、ためしに3つのパーツを
フォルダの中に作成し、名前をそれぞれ
A
,B
,C
にしましょう。

エクスプローラのようす⇩
スクリプトから3つのパーツを取得してみましょう。
一度自分で書いてみて、どうしても分からない場合は以下のスクリプトを確認してください。
こたえ
ひとつずつWorkspaceから名前を指定して取得しています。
また、 スクリプトは
Workspace内に作成しています。
-- 3つのパーツを取得する
local partA = workspace.Folder.A
local partB = workspace.Folder.B
local partC = workspace.Folder.C
-- print関数で出力する
print(partA)
print(partB)
print(partC)
7. プロパティの変更
オブジェクトを取得できたので、プロパティを変更してみます。
ここでは6. オブジェクトの取得で作成した、フォルダ中の
パーツのプロパティを変更してみることにします。
オブジェクトを取得するときと同じように、.
を付けた後、プロパティの名前を書いて、そこに変数に代入するように値を変えることができます。
以下のスクリプトでは、2つの違う方法でパーツのプロパティを変更していますが、一度パーツを変数に入れるかどうかの違いなので、結果はどちらもおなじです。
-- 変数に保存したパーツのプロパティを変更できる
local test = workspace.Folder.Part
test.変更したいプロパティの名前 = 値
-- 直接プロパティを変更できる
workspace.Folder.Part.変更したいプロパティの名前 = 値
以下がパーツの透明度を変更するスクリプトです。
透明度のプロパティは数値なので、文字などは入れられません。
local test = workspace.Folder.Part
test.Transparency = 1
ためしに当たり判定も変更してみたいと思います。
ですが、当たり判定のプロパティをプロパティウィンドウから確認するとわかるように、値が数値でも文字でもなく、チェックボックスの と
の値になっています。

プロパティウィンドウのようす⇩
スクリプトでは、チェックボックスの と
を、trueとfalseで表します。
trueが で、falseが
です。
当たり判定を変更するスクリプトは以下のようになります。
local test = workspace.Folder.Part
test.CanCollide = true -- 当たり判定をオンに
test.CanCollide = false -- 当たり判定をオフに
このように、データの形式が違うプロパティに対応した、色々なデータ型が存在します。
計算ができる数値型、一番最初に使った文字列型、trueとfalseがあるブーリアン型などなど…
ここにプロパティ別のデータ型の使い方をまとめておくので、参考にしてください。
プロパティ別データ型の例
色のデータ型
色別の濃さを、0
から255
までの数値で指定する。
Color3.fromRGB(赤色の濃さ, 緑色の濃さ, 青色の濃さ)
パーツの色のプロパティ名: Color
workspace.Folder.Part.Color = Color3.fromRGB(56, 255, 238)
詳しい情報はこちら⇩
素材のデータ型
Robloxで用意されている素材を指定する。
Enum.Material.素材の名前(英語)
パーツの素材のプロパティ名: Material
workspace.Folder.Part.Material = Enum.Material.Concrete
詳しい情報はこちら⇩
位置のデータ型X
, Y
, Z
のそれぞれをstud単位で指定する。大きさのデータ型と同じ。
Vector3.new(x軸, y軸, z軸)
位置のプロパティ名: Position
studは、1stud = 28cm
と定められているRoblox独自の単位です。
-- パーツの位置を 3, 7, 6 にする
workspace.Folder.Part.Position = Vector3.new(3, 7, 6)
-- パーツのX軸の位置を出力する
print(workspace.Folder.Part.Position.X)
オブジェクトを移動させる時に出てくる矢印の 赤色がx軸、緑色がy軸、青色がz軸 です。

大きさのデータ型X
, Y
, Z
のそれぞれをstud単位で指定する。位置のデータ型と同じ。
Vector3.new(x軸, y軸, z軸)
大きさのプロパティ名: Size
studは、1stud = 28cm
と定められているRoblox独自の単位です。
-- パーツの大きさを 2, 3, 2 にする
workspace.Folder.Part.Size = Vector3.new(2, 3, 2)
-- パーツのZ軸の大きさを出力する
print(workspace.Folder.Part.Size.Z)
オブジェクトの大きさを変える時に出てくる点の 赤色がx軸、緑色がy軸、青色がz軸 です。

回転のデータ型X
, Y
, Z
のそれぞれを度単位°
で指定する。
Vector3.new(x軸, y軸, z軸)
回転のプロパティ名: Rotation
-- パーツの角度を 10°, 20°, 30° にする
workspace.Folder.Part.Rotation = Vector3.new(10, 20, 30)
-- パーツのY軸の角度を出力する
print(workspace.Folder.Part.Rotation.Y)
オブジェクトを回転させる時に出てくる円盤の 赤色がx軸、緑色がy軸、青色がz軸 です。


ほかにもいろんな種類がありそうじゃね?知らんけど。
8. プロパティを数秒後に変更 (task.wait関数)

あれ?テストプレイしても、透明になる瞬間が見えないよ。
パーツの透明度を変えるスクリプトを書いてテストプレイをすると、ゲームが開始した瞬間にスクリプトが実行されるので、実際に透明度が変わっている場面が見れません。
local test = workspace.Folder.Part
test.Transparency = 1
そこで、task.wait関数を使い、数秒待ってから透明度を変えてみましょう。
使い方はとてもシンプルで、以下のようにtask.wait()
と書いた後、()
の中に待ちたい時間を数値で指定します。
print("今から5秒待ちます。")
task.wait(5)
print("5秒経ちました!")
()
の中になにも入れなかった場合は、1フレーム待つしくみです。
print("今から1フレーム待ちます。")
task.wait()
print("1フレーム待ちました。")
フレームの解説はこちらのサイトからご確認ください。

これを使えば、透明になる瞬間が見れんじゃね?知らんけど。
練習
実際に透明度が変わる瞬間が見れるように、スクリプトを書いてみましょう。
一度ご自身で書いてみて、どうしても分からない場合は以下のスクリプトをご確認ください。
こたえ
local test = workspace.Folder.Part
task.wait(5)
test.Transparency = 1