0 今日の目標

アイテムを無限にクローンし続け、そのアイテムをひろうたびにカウントを進めてゲームを進行できるようにします!

1 授業準備

目安時間: 5分
1-1

Roblox Studioを開いてログイン

まずは Roblox Studio を開いて、自分のアカウントでログインしておきましょう。
Roblox Studio起動 ログイン画面
1-2

実験用ステージを開く

前回保存していた「実験用ステージ」を開いておきましょう。
※使いづらかったり、すでになければ新しく Baseplate を作ってもかまいません。
実験用ステージを開く
実験用ステージを開くことができましたか?

2 コインとValue変数を作ってみよう

目安時間: 15分
プレイヤーが触れたらカウントを1ずつ増やすコインを作ってみます。
2人以上でプレイする時も、みんなで共通して1つのカウントを増やします。
動画で確認しよう(コインカウントの見本)
2-1

ひろえるコインを作っておこう

まずは円柱ブロックを作って、角度や大きさを変えたり、素材や色を好きに変えてみましょう。
固定はしなくてもかまいません。
コイン作成
※見本では素材を「 Metal 」、色を「 黄色(New Yellow)」、大きさを「 X1 Y3 Z3 」にしています。
2-2

どこからでも使える変数を作ってみよう

まずは変数のおさらいです。
もし Scratch で、変数「 myHP 」を作って 100 にして表示するなら、このようになります。
Scratch変数
これをテキスト型プログラミングの Lua言語 で再現するとこのようになります。
Lua変数
1行目: local で myHP という変数を作り、100を入れる。
3行目: myHP の中身を表示する。
ここでの大きな違いとして、Scratch の変数は他のスプライトからも使えますが、こちらでは通常Script内でしか使えません。
たとえば、Script1 で作った myHP という変数は、Script2 から見ようとすると「 nil 」(ニル・何もない)と出てしまいます。
変数の範囲
どうやら Script 同士は、変数をプライベートな情報だと思っているようです。
プライベート変数
ポイント
これは Scratch の「 このスクリプトのみ 」で作っていたローカル変数と同じものです。
Scratch では普通に変数を作ったらどこからでも使えていましたが、あれは特別なことだったのです。
Scratchのローカル変数
それならば、Script の外に変数の代わりを作ります。
「 ReplicatedStorage 」(レプリケイテッドストレージ)に、value で検索して、「 IntValue 」(イントバリュー)を入れてみます。
IntValue追加
IntValue は、整数1つを覚えてくれる「 変数 」の役割を持っています。
今回はひろったコインを数えるので、名前は「 コインカウント 」に変えておきましょう。
コインカウント
これなら、どのScriptからもその中身を見に行くことができます。
IntValue説明
ReplicatedStorage とは?
これまで使っていた Workspace は、なんでも置くことができますが、あくまでステージ上に存在するブロックやモデルのための表舞台です。
それに対して、ReplicatedStorage は舞台裏の倉庫です。変数やクローンの元などを置いておくのに役立ちます。
ReplicatedStorage
2-3

カウントScriptを入れてみよう

コインの中に Script を入れて、プレイヤーが触れたらコインカウントを +1 ずつ変えて、コインを破壊するようにします。
ブロックの名前を「 コイン 」にし、その中にScriptを入れて名前を「 カウントScript 」にしましょう。
カウントScript追加
カウントScript の中身は以下の通りです。
余裕があれば自力で打っても良いですし、コピーして貼り付けてもかまいません。
1
Ctrl A で全選択
2
Ctrl C でコピー
3
Scriptを開いて元あるコードを消す
4
Ctrl V で貼り付け
カウントScript
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
プレイする前に、「 出力 」が出ていなかったら、「 ウィンドウ 出力 」で出力画面を出しておきましょう。
出力画面
また、コインを複製して、2つ以上にしておきましょう。
※右クリック 複製 か、選択 「 Ctrl D 」で複製できます。
コイン複製
プレイしてコインに触れてみると、コインが消えて、出力画面にコインカウントと値が表示されれば成功です。
動作確認
この値は、プレイ中に「 コインカウント 」のプロパティからも確認することができます。
プロパティ確認
Scriptの説明
カウントScript は、Scratch で再現すると以下のようなことをしていました。
Scratch版
対応させてみると以下のようになります。
対応表
まずは1~2行目です。
「 local count 」で変数を作り、その中に、ReplicatedStorage にある「 コインカウント 」を入れています。
1-2行目説明
WaitForChild("コインカウント")で、「 コインカウント 」という名前の子が見つかるまで待つ。という意味になります。
1~2行目は名前の指定以外は毎回この形で使うので、コピーして使いまわせると良いですね。
WaitForChild説明
次は以前も学習した「 プレイヤーに触れたら 」です。
こちらもこのまま変更するところがないので、他の Script などからコピーして作れると早いですね。
Touched説明
プレイヤーに触れたら、以下3つを実行します。
内容は右側コメントアウトの通りですが、文法や仕組みを説明します。
3つの処理
コインカウントの数値が入っている場所は、あくまでコインカウントの中の「 Value 」でした。
Value説明
そのため、「 count += 1 」ではなく、以下のような形にしなければなりません。
count.Value += 1
なお、Scratch では「 変数を-1ずつ変える 」で変数を減らすことができましたが、Roblox では以下のようにします。
減算
ポイント
count の中身を 0 以外で初期化したい時も、count = 10 ではなく以下のようにします。
初期化
次に出力画面に名前と値を出す方法です。
出力画面確認
print( )を使うと、その中にある値を出力画面に出してくれます。
ここで、「 .. 」を使うことで、文字や値をつなげることができます。「 りんご と バナナ 」ブロックと同じですね。
文字列連結
この1行で、コインカウントこと count のプロパティから、名前(Name)と値(Value)を指定しています。
NameとValue
3つ目は「 Scriptの親ブロックが破壊をする 」、つまり自身を削除するというコードです。
これからコインはクローンして無限に増やせるようにするので、透明度を変えるのではなく削除します。
Destroy
改めて全体を見てみます。
これらのコードは、自分で0から何も見ず打つというより、まずは以下2点が大事です。
1
コピーして組み合わせればこの形にできるかどうか
2
見たら理解できて、数値や名前のアレンジができるかどうか
コード全体
たとえば、「 ごみカウント 」を 10 からスタートして 1 ずつ減らすなら、どうなるか考えてみましょう。
応用問題
正解は以下の通りです。
ゲーム・アプリ制作においては、0 から暗記して打てるかどうかより、このようなアレンジを時間をかけずできるようにしていくことが重要です。
1
コインカウント ごみカウント
2
count.Value = 10 を追加して10からスタート
3
+= 1 -+ 1 にして1ずつ減らす
答え
コインとValue変数を作ることができましたか?

3 クローンエリアを作ってみよう

目安時間: 10分
ゲーム上で同じアイテムを何度も出したい時は、いくつも作らず「 クローン 」という名の分身で作ります。
ここでは、クローンのためのエリアを作って、この範囲の中から設定した数だけアイテムがクローンされるようにします。
動画で確認しよう(クローンエリアの動作)
3-1

コインを舞台裏に隠しておこう

1つのコインを元にしたクローンをいろんな場所に出すとしたら、クローン元のコインは隠しておかねばなりません。
必ずプレイを停止してからコインの1つを、中の Script ごと ReplicatedStorage に移動しておきましょう。
ReplicatedStorageに移動
ReplicatedStorage に入ったものは、ステージ上で見えなくなります。
残り2つのコインは削除しておきましょう。
残りのコイン削除
Scratch でもクローンの元は隠して、クローンされたものだけを表示していましたね。
Scratchクローン比較
3-2

クローンエリアの元を作ってみよう

Scratch では XY座標 を決めたり「 どこかの場所 」にしていたところですが、Roblox は 3D なので、広すぎて指定が難しいですね。
そこでここでは、クローンエリアというカーペットのようなものを作り、この範囲からコインがクローンされるようにします。
完成見本
クローンエリア完成見本
まずはブロックを作り、好きなサイズに薄く平らに広げて、必ず「 固定 」しておきましょう。
ブロック作成1 ブロック作成2
※見本では「 X35 Y1 Z25 」で作っています。
3-3

クローンエリアScriptを入れてみよう

ブロックの名前を「 クローンエリア 」にし、その中にScriptを入れて名前を「 クローンエリアScript 」にしておきましょう。
クローンエリアScript構造
クローンエリアScript の中身は以下の通りです。
こちらは非常に長いので、コピーして貼り付けましょう。
1
Ctrl A で全選択
2
Ctrl C でコピー
3
Scriptを開いて元あるコードを消す
4
Ctrl V で貼り付け
クローンエリアScript
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
貼り付けできたら、プレイしてコインが数秒ごとにクローンされるか試してみましょう。
クローン動作確認
Scriptの説明
この Script は、大枠と大事なところだけ説明していきます。
まずこのコードを見た時に、「 while true do 」(ずっと)があることに注目します。
while true do
これより上は、最初の1回のみ実行される「 初期設定 」であり、これより下は何度も繰り返す「 ループ 」になっています。
これがわかるだけでも、プログラムの流れを理解しやすくなります。
初期設定とループ
まずは初期設定の中から、アレンジできそうなものを説明します。
2行目では、クローンしたいものを「 コイン 」以外にするときは修正が必要です。
ここでも『 ReplicatedStorageにある「コイン」 』を指定していますね。
template設定
次に、どのようにクローンするかの設定です。
spawnInterval 変数では、何秒に1度出現するのかを決められます。
maxSpawn 変数では、いくつまで同時に出すかを決められます。
spawnInterval/maxSpawn
たとえば、spawnInterval を 0.01 にし、maxSpawn を 300 にすると、すごい速さで300枚のコインが出てきます。
※PCによっては増やしすぎると重くなるので注意してください。
大量クローン
次はループの中ですが、アレンジするようなところは特にありません。
まず、全体の流れは以下の通りです。
ループの流れ
④のクローン作成については、以下のようにコードだけでクローンを作り、名前を決め、場所を決めています。
クローン作成コード
プレイしてみると、クローンされたコインと中のScriptは、「 クローン 」という名前で Workspace に入っていきます。
「 TouchInterest 」は自動で入る内部処理なので気にしないでください。
Workspace確認
ポイント
クローンエリアを使えば、ユニオンふくめいろんなブロックをクローンできるようになりますが、Model(モデル)には対応していません。
ツールボックスの素材から Model を入手してもクローンできないので気をつけましょう。
クローンエリアを作ることができましたか?

4 集めたコイン数でステージを変化させよう

目安時間: 15分
コインのクローンを取った数で、ゲートを消せるようにします。
また、あとどれくらい集めたらカベが破壊できるのかも見えるようにGUIを作ります。
動画で確認しよう(カウントゲートの動作)
4-1

カウントゲートとScriptを作ってみよう

まずはゲート(行く手をはばむ門)となるブロックを用意します。
必ずプレイを停止してから、好きな色や素材で出入口におさまるようにブロックを作って、「 固定 」しておきましょう。
ゲート作成1 ゲート作成2
ブロックの名前を「 カウントゲート 」にし、その中にScriptを入れて名前を「 カウントゲートScript 」にしておきましょう。
カウントゲートScript構造
カウントゲートScriptの中身は以下の通りです。
余裕があれば自力で打っても良いですし、コピーして貼り付けてもかまいません。
1
Ctrl A で全選択
2
Ctrl C でコピー
3
Scriptを開いて元あるコードを消す
4
Ctrl V で貼り付け
カウントゲートScript
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
プレイして、コインを3つひろったらカウントゲートが消えるか確認してみましょう。
動作確認
Scriptの説明
まず2行目までは、カウントScript と同じく、ReplicatedStorage にある「 コインカウント 」を見つけて count変数 に入れていますね。
2行目説明
5行目は「 countの中身が変わったら 」この中にあるコードを実行する、というものです。
Scratch には無かったしくみですね。
Changed説明
カウントが変わるたび、6-10行目が実行されます。
ここでは、もし「 カウントの値が 3 以上 」なら、透明にしぶつからないようにする、つまり隠しています。
6-10行目説明
Scratch で表すとこのようになりますが、条件式に少し違いがありますね。
Scratch版比較
テキスト型プログラミングでは、以下のように条件式を書くことになります。
「 >= 」のようにイコールがついていたら、その数もふくむということですね。
また、「 全く同じなら 」を指定したい時は、「 == 」のように2つ打つ必要があります。
比較演算子
それでは問題です。
最初は隠して触れないようにしておいて、もし5より大きくなったら表示され触れるブロックになるようアレンジしたいなら、どうすればよいでしょうか?
問題
書き換えるところは3つでした。このようなアレンジが作れると、はしごや橋などを作ることもできますね。
1
「 >= 3 」 (3以上) ➡ 「 > 5 」(5より大きい)
2
「 1 」(透明度100%) ➡「 0 」(透明度0%)
3
「 false 」(ぶつからない) ➡「 true 」(ぶつかる)
答え
4-2

カウントを表示するホログラムとScriptを作ってみよう

第11回で自由課題になっていたホログラムを活かして、カウントを表示する SurfaceGui を作ります。
ホログラム
今回は素材を用意してあるので、リンクからダウンロードするか、教室素材フォルダから以下の流れで呼び出します。
必ずプレイを停止してから「 ファイル 」 「 Robloxモデルをインポート 」 「 ホログラム.rbxm 」 を探し選択 「 開く 」
パソコンでウィンドウを大きく表示(全画面など)すると、ここに「ダウンロード」ボタンが出てきます。
「ホログラム.rbxm」をダウンロード 
インポート方法
※すでに Roblox に保存していた人は、そちらを使ってかまいません。
このホログラムでは、背景を透明にするため TextLabel のプロパティから「 BackgroundTransparency 」を 1 にしてあります。
また、Textは「 0/3 」にしてあります。上限値を変えたい時は、ここを書き換えておきましょう。
TextLabel設定
ホログラムが用意できたら、カウントゲートにくっつけましょう。
ホログラム配置
カウントを進めるたびに、TextLabel の左側の数が変わるようにするため、今回は TextLabel の中に Script を作ります。
名前は「 カウント更新Script 」にしておきましょう。
カウント更新Script構造
※1階層でもずれたところに作るとうまく動かないので気を付けましょう。
カウント更新Script の中身は以下の通りです。
余裕があれば自力で打っても良いですし、コピーして貼り付けてもかまいません。
1
Ctrl A で全選択
2
Ctrl C でコピー
3
Scriptを開いて元あるコードを消す
4
Ctrl V で貼り付け
カウント更新Script
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
貼り付けたらプレイして、コインを取るたびに左側のカウントが増えていくか確認してみましょう。
動作確認
Scriptの説明
今回のコードはほぼ復習かつコメント通りなので、6行目だけ説明します。
6行目説明
カウントが変わるたびに、6行目のコードで左側の数だけ更新してくれるようになります。
カウント更新説明
ポイント
テキスト型プログラミングでは、変数や数値ではない「 文字 」は " " をつけてしっかり分けなければなりません。
文字のクォート
もし最大値を変えたい時は、以下の赤枠2カ所を修正します。
また、9行目の条件式の数値も変える必要があります。
最大値変更
チャレンジ問題
2つも変えるのは面倒…まちがいが起きそう…と思ったら、プログラムを改良するチャンスです。
新しく変数を作って、値1つを変えるだけで済むようにするとしたら、どうアレンジすれば良いでしょうか?
チャレンジ問題
1つの追加と、2つの修正でアレンジができます。変数名はお好みでかまいません。
1
変数「 max 」を追加して数値を入れておく
2
/ の右側にあった「 3 」を「 max 」にする
3
「 >= 3 」 を 「 >= max 」にする
答え
4-3

おさらい + 新しく作るには?

今回は4つのブロックと Script を使いました。
プログラムの流れは以下の通りです。
プログラムの流れ
もしカウントゲートとホログラムのセットを増やしたいなら、この2つをまとめて複製するとスムーズです。
条件を変えるなら、TextLabel の数値と、Script の数値をアレンジすれば完成です。
複製
ただし、別なアイテムを追加したい時は、4ブロック全ての複製や修正が必要です。
ここからは、自分の作品で必要になった時に試してみてください。
動画で確認しよう(木材を増やす見本)
1
新アイテムを作ってから、ReplicatedStorage に移し、カウントScriptを入れる。
新アイテム❶
2
ReplicatedStorage に「 IntValue 」を新しく追加して、名前をつける。
IntValue追加❷
3
クローンエリア・カウントゲート・ホログラムを複製する。
※名前や色を変えるとわかりやすくなります。
複製❸
4
全ての Script を1行ずつ修正する
クローンエリアScript
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
カウントScript ・ カウントゲートScript ・ カウント更新Script
※コード部分をクリックして、背景が黄色くなったら「 Ctrl + A 」でコード部分のみが選択できます。
カウントゲートとホログラムを作ることができましたか?

5 チェック問題

目安時間: 5~10分
今回学んだことの理解度をクイズで確認しましょう。

学習者情報の入力

6 企画・制作の続き

目安時間: 残り時間
作品完成に向けてがんばりましょう!
制作イメージ
作品制作を進めることができましたか?

7 さいごに

目安時間: 5分
7-1

保存方法

発表に向けた作品制作を始めているなら、「名前を付けてRobloxに保存 or 公開」をしておきましょう。
1
ファイル
2
名前を付けてRobloxに保存
3
新しいゲームを制作...
4
名前を付ける
5
作成 自動的に再起動されます
保存方法
7-2

ログアウト

終わるときには、右上の自分のIDから、ログアウトします。
ログアウト1 ログアウト2