【Lua言語講座】11.演習-イベント-

イベントの演習回 Lua言語講座

こんにちは、ロブスタのハルです!
前回の講座ではイベントとそれを使った関数の起動方法について説明しました。
今回はこれまでの復習としてイベントを使ったプログラムが書けるようになるための演習をします。
前回の講座を見ていない方はこちらからご覧ください。

概要

今回作りたいプログラムは次のようなものです。

  • ボタンを押すと橋が出現する
  • ボタンにれるとボタンの色が赤から緑に変わる
  • ボタンに触れなければ橋からすり抜ける
  • デフォルトで橋は半透明はんとうめいになっている

これを実装じっそうするにはTouchedイベントを使えばよさそうですね。また、橋オブジェクトの透明度とうめいど衝突判定しょうとつはんていを変える必要があります。さらにボタンの色を変える必要もありますね。

ボタンの色を変える方法は以前に解説しました。しかし、透明度と衝突判定についてはまだ解説していません。まずはこの2つについて理解しましょう。

透明度

透明度とはその名の通り透明な度合いのことです。Roblox Studioでは透明度をあつかうためのプロパティが存在します。それはTransparencyトランスパレンシープロパティです。Transparencyプロパティは0~1までの数値を設定できて、0が不透明、1が透明となります

ちなみにtransparencyとは日本語で透明度のことです。

衝突判定

衝突判定とは当たったか当たっていないかの判断のことです。Roblox Studioでは衝突判定を扱うためのプロパティとしてCanキャンCollideコライドプロパティが存在します。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オブジェクトに新しいスクリプトを挿入そうにゅうします。どうやってやるんだっけ?という人はこちらの記事を参考にしてください。

ここで、今回の記事の最初に戻ってどんな流れでプログラムを書けばいいか少し考えてみてください。

考えてみましたか?
今回のプログラムの流れとしては次のようになりますね。

  1. BridgeオブジェクトとButtonオブジェクトをそれぞれ変数に代入しておく
  2. ボタンがれたときに発生するリスナーを作る
  3. リスナー内部の処理に以下(4~6)を追加する
  4. ボタンの色を赤から緑に変える
  5. 橋の不透明度を0にする
  6. 衝突判定をtrueに変更する
  7. リスナーと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行目はリスナーとなる関数pressプレスButtonボタンです。

6行目では変数buttonのColorプロパティにColor3という方法で色を指定しています。こうすることでボタンの色を赤から緑に変えています。

7行目では変数bridgeのTransparencyプロパティに0を代入しています。これにより橋を不透明に変えています。

8行目では変数bridgeのCanCollideプロパティをtrueにしています。これによって衝突判定が生じることになり、橋の上に乗れるようになります。

11行目では変数buttonにTouchedイベントを追加し、ConnectコネクトメソッドによってpressButtonリスナーを接続しています。

プログラム全体を見ると何書いてあるのかわからないと思った人もいるかもしれません。しかし、1つずつ見ていくとどれもこれまでに学んできたことに気づいたはずです。

テスト

それではテストプレイしてみましょう。

ボタンを押すと橋を渡れるようになっていれば成功です!

上手くいかないという人は英語のつづりを間違えていないか、エクスプローラーの階層かいそうが間違っていないかなどもう一度確認してみてください。もし、どうしてもわからないという人は下のコメントらんに書いてもらえれば僕も一緒いっしょに考えます。

まとめ

  • プログラムを書くコツは処理をなるべく細かく分解すること
  • Transparencyプロパティでは透明度を変更できる
  • CanCollideプロパティでは衝突判定を変更できる

お疲れ様でした。今回はこれまで学んだプログラムがたくさん出てきましたね。忘れていたという人はもう一度復習しておきましょう!次回はInstance.new()というメソッドと複数の引数がある関数を使った演習をしてみます。

コメント

タイトルとURLをコピーしました