こんにちは、ロブスタのハルです!
前回の講座ではオブジェクトとプロパティについて説明し、パーツの色を変えるプログラムを作ってみました。
今回は何度も使えるようなコードを書くために必要な大切な親と子という考え方について説明したいと思います!
前回の講座を見ていない方はこちらからご覧ください。
前回の宿題
fromRGB()内のRGBの値を以下のように変えて実行してみてください。
- 0, 0, 0
- 255, 0, 0
- 0, 255, 0
- 0, 0, 255
- 255, 255, 255
また、fromRGB()ではなく、fromHSV()を使ってみてください。
https://roblox-starter.com/programing-lua/lua-lesson6-object-and-property/
前回の宿題はどうでしたか? まず、fromRGB()を使ったプログラムでは1.は黒色、2.は赤、3.は緑、4.は青、5.は白になったかと思います。
これはRGBがR(赤)、G(緑)、B(青)の組み合わせで色を作っているためです。前回の講座で軽く紹介したようにRGB値はそれぞれ0~255までとなっており、0が光らない/255が最大に光ることを表しています。そこで1.は全てが光っていない状態=真っ暗な状態なので黒となっています。同様に2.~4.は赤、緑、青のいずれかが最大に光っており、それ以外は光っていないためこのような解答になっています。また、5.はいずれも最大に光っているため白となっています。
色を指定するにはRGB以外にもHSVという方法があります。これはH(色相)、S(彩度)、V(明度)の組み合わせで色を作る方法です。RobloxではColor3クラスのfromHSV()を使うことで指定できます。色の指定方法はRGBだけじゃないんだなと思ってもらいたくて出題しました。
色を変えるプログラム2
今回はColorPartというパーツを作成し、その中にChangeColorScriptというスクリプトを作成してみてください。スクリプトはパーツの右側の+マークをクリックすることで追加できます。
![ChangeColorScript](https://roblox-starter.com/wp-content/uploads/2023/10/7_1.png)
そうしたら以下のコードをChangeColorScriptに書いてみてください。
--色を変えるプログラム2
local colorPart = game.Workspace.ColorPart
colorPart.Color = Color3.fromRGB(0, 85, 255)
実行してみるとパーツの色が変わっていることが確認できると思います。
コードを詳しく見てみましょう。
まず、2行目では変数ColorPartを宣言しており、その中身としてgame.Workspace.ColorPartを代入しています。これは前回の講座で学んだようにColorPartオブジェクトそのものを変数ColorPartとして扱っていることを示しています。
続いて3行目ではColorPartオブジェクトのColorプロパティにColor3クラスのfromRGB()を使ってRGB値を設定しています。
--色を変えるプログラム
game.Workspace.ColorPart.Color = Color3.fromRGB(0, 85, 255)
--色を変えるプログラム2
local colorPart = game.Workspace.ColorPart
colorPart.Color = Color3.fromRGB(0, 85, 255)
前回のコードと比較するとColorPartを変数として宣言することでどこがプロパティなのかがわかりやすくなったように思います。
親と子
親とはその下にスクリプトやパーツなどのオブジェクトを持つオブジェクトのことです。また、子とは親の下にあるオブジェクトのことです。
![親子関係の説明](https://roblox-starter.com/wp-content/uploads/2023/10/7_6.png)
例えば、上の画像でColorPartの子はChangeColorScriptとなっています。逆にChangeColorScriptの親はColorPartです。このように親子関係を考える際にはどっちの立場(視点)から考えるかが大切になってきます。
色を変えるプログラム3
続いて親子関係を使って色を変えるプログラムを作ってみます。
--色を変えるプログラム3
local colorPart = script.Parent
colorPart.Color = Color3.fromRGB(0, 85, 255)
2行目では変数colorPartの中身にscript.Parentを代入しています。scriptというのは自分自身のことを指しています。script.Parentと書くことで自分自身の親つまり、ChangeColorScriptの親であるColorPartを示していることになります。
ここで、エクスプローラ上でColorPartを右クリックして複製を選んでみましょう。(ColorPartを選択した状態でctrl+Dでも複製できます)
![複製後](https://roblox-starter.com/wp-content/uploads/2023/10/7_4.png)
![テストプレイ時](https://roblox-starter.com/wp-content/uploads/2023/10/7_3.png)
パーツを並べて、テストプレイを実行すると同じコードで3つとも色を変えることができました。
絶対参照と相対参照
game.Workspace.ColorPartのようにgameオブジェクトのどの位置(階層)に指定したいオブジェクトがあるかを自分で探して決める方法を絶対参照と言います。
一方でscript.Parentのように自分自身のスクリプトからオブジェクトがどの位置にあるのかをプログラム上で調べて指定する方法を相対参照と言います。
絶対参照はエクスプローラ上でパーツの位置(階層)や名前が少しでも変わってしまうとプログラムが動かなくなる可能性があります。相対参照であれば自分自身を基準にしてオブジェクトを探しているため変更について行けるというメリットがあります。
宿題
- 色を変えるプログラム2を子にもつパーツを複製してテストプレイをしてください。このとき、色を変えるプログラム3と比べて何が違うか考えてみましょう。
- 以下の画像を基に次の質問に答えてください。
![](https://roblox-starter.com/wp-content/uploads/2023/10/7_5.png)
- Workapaceの子がどれか答えてください。
- Decalの親を答えてください。
- TestPartの子を答えてください。
まとめ
- パーツは変数名の中にgame.Workspace.パーツ名を代入する方法がある(絶対参照)
- 親子関係を用いて変数名の中にscript.Parentのようにパーツを代入する方法がある(相対参照)
- 相対参照を使うと同じ変化をするパーツを手軽に増やすことができる
お疲れ様でした。第7回はここまでです。
次回はいよいよ関数について解説します。
親子関係は最初理解しづらいかと思いますのでエクスプローラ上でどれの親がどれで……どれの子がどれで……と考える練習をしてみるといいと思います。
コメント