【10】コードの再利用

先ほど作成したプログラムは、同じ名前のパーツが複数あると実行されません。つまり、複数のパーツの色を変えたい場合、新しいパーツを作成して、それぞれに新しいスクリプトを作る必要があります。これでは大変時間がかかります。

今回は、パーツにプログラムを組み込んで、パーツをコピー&ペーストしただけで、同様の動作をする方法を学びます。ToolBoxに多数ある動くモデルは、すべてこの方法で作成されています。

新しいスクリプトとパーツを作成する

今回は、ServerScriptService内にスクリプトを作成しません。その代わりに、パーツに付属する新しいスクリプトを作成します。

  1. 新しいパーツを作成して名前を付けます。このレッスンではColorPartにします。
  2. ServerScriptServiceではなく、このパーツを右クリックし、Insert Object(オブジェクトの挿入) > Script(スクリプト)を選択します。ColorPartScriptが追加されます。
  3. このスクリプトに名前を付けます。ここではColorChangeScriptにします。
  4. 次に、LoopingScriptを表示し、全コードを選択し、[Ctrl]+[C]でコピーします。
  1. ColorChangeScriptに切り替え、print(“Hello world!”)を削除します。
  2. [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)をコピーしましょう。

  1. 画面上のパーツ(ColorPart)で選択します。
  2. [Ctrl]+[D]でこのパーツを複製します。「Collisions」がオフになっている場合は、同じ場所に複製されますが、Explorerウィンドウで確認することで、複製されたことが分かると思います。
  3. Moveツールで好きな場所に移動しましょう。
  4. テスト実行してみましょう。

いかがですか?すべてのパーツの色が切り替わりましたか?

最後に

プログラミングというものを少しかじってみましたが、いかがだったでしょうか?
ここまで実際にやってみて、面白かったと感じたあなたはゲームクリエーターの素質があります。さらに、ロブロックスのゲームを色々やって「こんなゲームを作ってみたい」と感じたあなたは、次のステップに向かう準備ができています。日本では、ロブロックス関係の資料があまりありませんが、まったくない分けではありません。サイトが英語になっていても自動翻訳できますので、海外のサイトでも情報源の1つになると思います。道のりは長いですが、面白さが続けば何とかなるものです。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です