先ほど作成したプログラムは、同じ名前のパーツが複数あると実行されません。つまり、複数のパーツの色を変えたい場合、新しいパーツを作成して、それぞれに新しいスクリプトを作る必要があります。これでは大変時間がかかります。
今回は、パーツにプログラムを組み込んで、パーツをコピー&ペーストしただけで、同様の動作をする方法を学びます。ToolBoxに多数ある動くモデルは、すべてこの方法で作成されています。
新しいスクリプトとパーツを作成する
今回は、ServerScriptService内にスクリプトを作成しません。その代わりに、パーツに付属する新しいスクリプトを作成します。
- 新しいパーツを作成して名前を付けます。このレッスンではColorPartにします。
- ServerScriptServiceではなく、このパーツを右クリックし、Insert Object(オブジェクトの挿入) > Script(スクリプト)を選択します。ColorPartにScriptが追加されます。
- このスクリプトに名前を付けます。ここではColorChangeScriptにします。
- 次に、LoopingScriptを表示し、全コードを選択し、[Ctrl]+[C]でコピーします。
- ColorChangeScriptに切り替え、print(“Hello world!”)を削除します。
- [Ctrl]+[V]で、先ほどコピーしたコードを貼り付けます。
スクリプトを変えて再利用可能にする
上記のプログラムでは、LoopingPartというひとつのパーツのみ色を変えることができます。すべてのパーツで使用できるようにするためにプログラムを変更します。
変更されるパーツはLoopingPartだけではなくなるので、コメントも変更しておきましょう。
script.Parent とは?
ColorChangeScriptのプロパティを見てみましょう。Parent(親)という項目があり、その値がColorPartになっていますね。ColorPartが親で、ColorChangeScriptが子ということになります。
つまり、親が誰なのかは、script.Parent を参照すれば分かるということです。パーツの名称を変更すると、自動的に子のParentも変わります。
ちなみに、game.Wordspace.~という記述を絶対参照、script.Parent.~という記述を相対参照と言います。モデル(パーツ)の下に置くスクリプトは後のアップデートなどを踏まえ、相対参照で記述するように心がけましょう。
wait関数は重要
今回は、「数秒待つ」という目的でwait関数を使用しましたが、実はこのwait関数、とても重要な働きをするのです。「ロブロックスのシステムに制御を戻す」という役割も備えています。各パーツのスクリプトで、「while true do ~ end」と無限ループを描いていたにも関わらず、コピーしたパーツも同じように色が変わるのは、ロブロックスのシステムに制御を戻しているからなのです。もし無限ループ内に、wait関数を1つも入れないと、フリーズしてしまうかもしれません。(実際にはフリーズまではしないようですが動作不良となります)
無限ループだけでなく、処理に時間がかかりそうな場合は、「wait()」(パラメータなしもあり)と入れた方がベストです。そうしないと、その処理に時間がかかり「ゲームが重い」という感じになってしまいます。
パーツをコピーする
スクリプトが完成したところで、このパーツ(ColorPart)をコピーしましょう。
- 画面上のパーツ(ColorPart)で選択します。
- [Ctrl]+[D]でこのパーツを複製します。「Collisions」がオフになっている場合は、同じ場所に複製されますが、Explorerウィンドウで確認することで、複製されたことが分かると思います。
- Moveツールで好きな場所に移動しましょう。
- テスト実行してみましょう。
いかがですか?すべてのパーツの色が切り替わりましたか?
最後に
プログラミングというものを少しかじってみましたが、いかがだったでしょうか?
ここまで実際にやってみて、面白かったと感じたあなたはゲームクリエーターの素質があります。さらに、ロブロックスのゲームを色々やって「こんなゲームを作ってみたい」と感じたあなたは、次のステップに向かう準備ができています。日本では、ロブロックス関係の資料があまりありませんが、まったくない分けではありません。サイトが英語になっていても自動翻訳できますので、海外のサイトでも情報源の1つになると思います。道のりは長いですが、面白さが続けば何とかなるものです。
3 thoughts on “【10】コードの再利用”
コメントを残す
コメントを投稿するにはログインしてください。
スクリプトごとパーツをコピー(または複製)する方法はありますでしょうか?
複製すると毎回 hello world に戻ってしまいます。
スクリプトを追加したパーツをコピーすると、その子供であるスクリプトもコピーされます。
ありがとうございます