こんにちは、ロブスタのハルです!
前回の講座ではイベントとそれを使った関数の起動方法について説明しました。
今回はこれまでの復習としてイベントを使ったプログラムが書けるようになるための演習をします。
前回の講座を見ていない方はこちらからご覧ください。
概要
今回作りたいプログラムは次のようなものです。
- ボタンを押すと橋が出現する
- ボタンに触れるとボタンの色が赤から緑に変わる
- ボタンに触れなければ橋からすり抜ける
- デフォルトで橋は半透明になっている
これを実装するにはTouchedイベントを使えばよさそうですね。また、橋オブジェクトの透明度と衝突判定を変える必要があります。さらにボタンの色を変える必要もありますね。
ボタンの色を変える方法は以前に解説しました。しかし、透明度と衝突判定についてはまだ解説していません。まずはこの2つについて理解しましょう。
透明度
透明度とはその名の通り透明な度合いのことです。Roblox Studioでは透明度を扱うためのプロパティが存在します。それはTransparencyプロパティです。Transparencyプロパティは0~1までの数値を設定できて、0が不透明、1が透明となります。
ちなみにtransparencyとは日本語で透明度のことです。
衝突判定
衝突判定とは当たったか当たっていないかの判断のことです。Roblox Studioでは衝突判定を扱うためのプロパティとしてCanCollideプロパティが存在します。CanCollideはboolean型なのでtrueかfalseつまり、当たったか当たっていないかの2つの状態しか存在しません。
canとは日本語でできるとか可能といった意味を持ちます。また、collideは日本語で衝突するという意味を持ちます。つまり、CanCollideは衝突するかとか衝突する可能性といった意味になるため、trueなら衝突する、falseなら衝突しない状態にすることができます。
実装
それではプログラムを書いていきましょう。まずは今回使用する橋とボタンのオブジェクトをそれぞれ作っていきます。
橋の作成
今回は練習編で完成させた自分のゲームファイルを使ってみます。

Roblox Studio上でブロックパーツを追加して移動ツール・拡大縮小ツール・回転ツールなどを使いながら好きなように配置していきましょう。ツールの使い方がわからない人は練習編を読んでみてください。
僕は少し長めに作ってみました。橋が置けたらpartの名前をBridgeに変更します。その後、Bridgeのプロパティウインドウから以下3つのプロパティを変更します。
- Anchoredプロパティをtrueにする
- Transparencyプロパティを0.5にする
- CanCollideプロパティをfalseにする

プロパティウインドウではチェックを入れるとtrue、外すとfalseとなります。
ここまでできたら一度テストしてみましょう。
ボタンの作成
続いてボタンを作成します。
こちらも新しくブロックパーツを追加し、好きなように配置します。今回、パーツの名前はButtonとしておきましょう。ついでに色も赤色に変え、Anchoredプロパティもtrueにしておいてください。

ポイントとなるのがボタンを少し宙に浮かせておくことです。前回出てきたTouchedイベントはオブジェクト同士が触れたことを判定するものでしたね。つまり、ボタンオブジェクトを地面(Terrainオブジェクト)にくっつけてしまうとそこでイベントが発生してしまいます。これはバグのもとになってしまうので画像のように浮かせておくのです。(今後地面に置いても正常に動作するようなプログラムについても勉強するので安心してください)
プログラムを書く
流れを考える
オブジェクトの準備ができたところでいよいよプログラムを書いていきます。
まずはButtonオブジェクトに新しいスクリプトを挿入します。どうやってやるんだっけ?という人はこちらの記事を参考にしてください。
ここで、今回の記事の最初に戻ってどんな流れでプログラムを書けばいいか少し考えてみてください。
…
…
…
考えてみましたか?
今回のプログラムの流れとしては次のようになりますね。
- BridgeオブジェクトとButtonオブジェクトをそれぞれ変数に代入しておく
- ボタンが触れたときに発生するリスナーを作る
- リスナー内部の処理に以下(4~6)を追加する
- ボタンの色を赤から緑に変える
- 橋の不透明度を0にする
- 衝突判定をtrueに変更する
- リスナーとTouchedイベントを繋ぐ
大体同じ流れになっていましたか?
プログラムを書く時のコツとしてまずはどんなことがしたいかを決め、それを細かい動作に分解していき、言葉で書きだすと良いです。とはいえ、そもそもどんなことができるのかがわからないと細かい動作に分解する作業は難しいですよね…これは正直慣れが必要な部分でもあるのでこれから少しずつこのサイトを参考にしながら勉強して慣れていってもらえるといいかなと思います。
コーディング
さて、話がそれてしまいましたね。次は書き出した手順を基にしてプログラムを書いてみましょう。
-- 橋を出現させるボタンのプログラム
local button = script.Parent
local bridge = game.Workspace.Bridge
local function pressButton()
button.Color = Color3.fromRGB(0, 210, 0)
bridge.Transparency = 0
bridge.CanCollide = true
end
button.Touched:Connect(pressButton)
順に解説していきますね。
まず2行目ですがこれは何度も出てきているので大丈夫だと思います。このスクリプトから見た親つまりButtonオブジェクトをbuttonという名前の変数に入れています。
3行目は絶対参照を使ってgameオブジェクトの中のWorkspaceの中にあるBridgeオブジェクトをbridgeという名前の変数に入れています。
5~9行目はリスナーとなる関数pressButtonです。
6行目では変数buttonのColorプロパティにColor3という方法で色を指定しています。こうすることでボタンの色を赤から緑に変えています。
7行目では変数bridgeのTransparencyプロパティに0を代入しています。これにより橋を不透明に変えています。
8行目では変数bridgeのCanCollideプロパティをtrueにしています。これによって衝突判定が生じることになり、橋の上に乗れるようになります。
11行目では変数buttonにTouchedイベントを追加し、ConnectメソッドによってpressButtonリスナーを接続しています。
プログラム全体を見ると何書いてあるのかわからないと思った人もいるかもしれません。しかし、1つずつ見ていくとどれもこれまでに学んできたことに気づいたはずです。
テスト
それではテストプレイしてみましょう。
ボタンを押すと橋を渡れるようになっていれば成功です!
上手くいかないという人は英語の綴りを間違えていないか、エクスプローラーの階層が間違っていないかなどもう一度確認してみてください。もし、どうしてもわからないという人は下のコメント欄に書いてもらえれば僕も一緒に考えます。
まとめ
- プログラムを書くコツは処理をなるべく細かく分解すること
- Transparencyプロパティでは透明度を変更できる
- CanCollideプロパティでは衝突判定を変更できる
お疲れ様でした。今回はこれまで学んだプログラムがたくさん出てきましたね。忘れていたという人はもう一度復習しておきましょう!次回はInstance.new()というメソッドと複数の引数がある関数を使った演習をしてみます。
コメント