ボタンはプレイヤーが新しいエリアをアンロックしたり、ポイントを与えたり、宝物を明らかにしたりするために使用できます。プレイヤーがボタンに触れると、色を変えたり音を出したりして、インタラクションが行われていることを知らせるフィードバックを提供する必要があります。
この例では、ボタンを使用して橋をアクティブにします。ボタンが押されると、緑色に変わり、プレイヤーは橋を使用できるようになります。プレイヤーがボタンを押していない場合、橋の上を歩こうとすると落ちてしまいます。
橋を作る
まず、橋を設定します。
プレイヤーが橋を必要とするエリアを環境に作成します。
橋のためのパートを作成し、名前を「Bridge」に変更します。
橋を選択し、プロパティウィンドウで:
- Transparency を .5 に変更します。Transparency の 0 は可視、1 は不可視です。
- Anchor にチェックを入れます。
- CanCollide のチェックを外します。
ゲームをプレイテストすると、橋は霧のように見え、人々はまだ橋の上を歩けないはずです。

ボタンを作成する
橋が設定されたので、ボタンを作成します。
新しいパートを作成し、名前を「Button」にします。
ボタンの色を赤に変更します。
ボタンをAnchorします。
ボタンを少し浮かせて、何にも触れないように移動させます。これは、Touched イベントが誤って発火しないようにするためです。

ボタンをインタラクティブにする
今回は、Touched イベントを使用してトラップを作成するのではなく、橋を使用可能にするボタンを作成します。橋を衝突可能にするには、プレイヤーがボタンに触れたときに実行されるカスタム関数内で bridge.CanCollide = true のコードを使用します。他の必要なことはすべて知っているので、次のステップを完了してください。
コードソリューションを見る前に、自分で考えてみてください。
- ボタンに「ActivateBridge」という名前の新しいスクリプトを挿入します。
- Hello World を削除します。
- 橋とボタンのための変数を作成します。
- ボタンが触れられたときに以下のことを行うローカル関数を作成します:
- "button touched" を出力します。
- ボタンが触れられたときに、ボタンの色を赤から緑に変更します。
- 橋の透明度を 0 に変更して可視にします。
- bridge.CanCollide = true のコードを使用して橋を使用可能にします。
- 関数をボタンの Touched イベントに接続します。
- スクリプトをテストし、ボタンが触れられたときに橋が表示されることを確認します。
コードソリューション 以下は、1つの可能なコードソリューションです。
-- このスクリプトをボタンに挿入します
-- 何かがボタンに触れたときにボタンを緑にします。
local button = script.Parent
local bridge = workspace.Bridge
local function buttonPressed()
print("button touched")
button.Color = Color3.fromRGB(0, 170, 0)
bridge.Transparency = 0
bridge.CanCollide = true
end
button.Touched:Connect(buttonPressed)コードのトラブルシューティング
問題: ゲームが開始したときに橋がすでに固体です。 パーツがアンカーされていて、何にも触れていないことを確認してください。パーツが地形や別のパーツに触れていると、buttonPressed() 関数が誤って発火する可能性があります。
問題: 出力ウィンドウに「Bridge is not a valid member of Workspace」というエラーが表示されます。 以下を確認してください:
- 橋の名前。スクリプト内の橋は、エクスプローラー内の名前と正確に一致している必要があります。
- part.Touched:Connect(buttonPressed) が buttonPressed() 関数の外にあること。
オプションのコードチャレンジ
このレッスンのスクリプトは、特定のエリアからプレイヤーを締め出すドアを保持するためにも使用できます。コーディングスキルを練習し、以下を行ってください:
- ドアパートを作成します。
- ドアから離れた場所にボタンを作成します。
- このレッスンのスクリプトを変更して、ドアの透明度を変更し、プレイヤーが衝突できないようにします。
あなたのバージョンは次のようになるかもしれません:
local button = script.Parent
-- 注意: パートの名前 Gate をプロジェクト内のものに置き換えてください
local gate = workspace.Gate
local function buttonPressed()
print("button touched")
-- プレイヤーにフィードバックを与えるためにボタンを赤に変更
button.BrickColor = BrickColor.Red() -- ここを変更
-- ゲートを不可視にします
gate.Transparency = 1
-- プレイヤーがゲートを通り抜けられるようにします
gate.CanCollide = false
end
button.Touched:Connect(buttonPressed)