初心者向け!スクリプトの基礎をマスターしよう【Roblox Studio】

5. 変数へんすう

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

芽キャベツくん
芽キャベツくん

文字はダブルクオーテーション"で囲って…こうかな?

print("田中さんおはようございます")
print("佐藤さんおはようございます")
print("山本さんおはようございます")
print("吉村さんおはようございます")

このスクリプトだと、あいさつを変えたいときにすべてひとつひとつ書きなおさなければなりません。

print("田中さんこんばんは")
print("佐藤さんこんばんは")
print("山本さんこんばんは")
print("吉村さんこんばんは")
-- おはようございます → こんばんは

そこで、変数へんすうを使い、あいさつを変更しやすくしてみましょう。

変数とは箱のようなもので、自分で変数をつくったあと、好きな値を入れて保存できます。
また、保存したは好きなときに取り出して使うことができます。

ためしに変数定義ていぎしてみましょう。変数を作ることを、変数を定義すると言います。
まず最初にlocalと書き、ひとつあけて変数の名前を書きます。

local test

変数名は自由ですが、数字が一番最初に入っていたり、日本語が入っている場合エラーになってしまいます。

変数を定義できたので、好きな代入だいにゅうしてみましょう。

Mint
Mint

を入れることを、代入すると言いますよ。

変数に値を代入するには、変数名 = 値のかたちでプログラムを書きます。

以下のスクリプトのように、=右側に代入する値、左側に変数名があれば、変数を定義すると同時に値を代入することもできます。

また、見やすいように=の両側に空白をつけるのが一般的です。

-- 変数を定義した後に、値を代入するパターン
local test1
test1 = "あ、どうも"

-- 変数の定義と同時に値を代入するパターン
local test2 = 10

代入できたので、変数の値print関数で出力してみましょう。

以下のように変数名を書けば、スクリプトが実行されるときに、自動で変数に保存されている値におきかわります

local HELLO = "あ、こんにちはー"

print(HELLO)

-- 出力ウィンドウでは... --
あ、こんにちはー

変数に何の値も代入しないで、空のまま出力してみると、nilニルと出力されます。
nilは、値がない状態を表します。

シャインマスカットちゃん
シャインマスカットちゃん

nilは結構見ることになりそうだし、覚えといたほうが良いんじゃね?知らんけど。

local ABC

print(ABC)

-- 出力ウィンドウでは... --
nil

変数のスクリプト例

Mint
Mint

出力はどのようになるのか、まずは自分で予想してみてください。
その後、実際にこのスクリプトをテストして答え合わせしてみましょう。

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.FolderFolderフォルダを取ってくるというような意味です。

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 -- 当たり判定をオフに

このように、データの形式が違うプロパティに対応した、色々なデータ型が存在します。
計算ができる数値型、一番最初に使った文字列型truefalseがあるブーリアン型などなど…

ここにプロパティ別のデータ型の使い方をまとめておくので、参考にしてください。

プロパティ別データ型の例

色のデータ型
色別の濃さを、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
1 2 3 4