3D ワールドがあることにより、このチュートリアルのこのセクションでは、最初のスクリプトを追加してコイン収集メカニズムを定義する方法を教えます。このメカニズムにより、プレイヤーはコインを収集でき、最近収集されたコインの収集を無効にできます。
コインを作成する
何かをスクリプトする前に、世界にコインとして使用するプレースホルダーオブジェクトが必要です。前のセクションで作成した海のスタックプラットフォームと同様、コインは単純な Part オブジェクトになる可能性があります。
コインを作成するには:
エクスプローラー ウィンドウで、新しいフォルダを ワールド フォルダに追加し、名前を コイン に変更します。
挿入 シリンダー パーツを コイン フォルダに挿入し、パーツの名前を コイン に変更します。
パーツを選択し、 プロパティ ウィンドウで、
- ブリックカラー を ゴールド に設定。
- マテリアル を メタル に設定。
- Set サイズ を 0.6, 8, 4 に設定します。
- 無効にする CanCollide 。これは、エンジンに他の部分がコインを通過できると伝え、つまりプレイヤーがコインを集めるためにコインを通り抜けることができるという意味です。
- 有効化 アンカー済み 。これにより、エンジンは物理関連のシミュレーションによってコインの位置を変更しないように指示し、プレイヤーはコインの位置に影響を与えずにタッチできます。
いくつかのコインを複製し、テスト目的でマップの周りに配置します。
シリンダーパーツは今コインのように見え、物理シミュレーションを防いでいますが、プレイヤーがそれらを集めることができるように、コインにロジックを追加する必要があります。
スクリプトを作成
コインを収集可能にするには、プレイヤーが触ったときに反応したいと思います。Roblox エンジンは、何かがコインに触れたときに通知できますが、スクリプトでそれを宣言する必要があります。スクリプトを作成するには:
エクスプローラー ウィンドウ で ServerScriptService をホバーし、 ⊕ ボタンをクリックします。コンテキストメニューが表示されます。
コンテキストメニューから、 スクリプト を選択します。新しいスクリプトは、 ServerScriptService の下に表示され、エンジンにサーバー上でスクリプトを実行するように指示し、クライアントがコードにアクセスするのを防ぎます。
スクリプトを CoinService に名前変更します。
デフォルトコードを次のコードで置き換えます:
-- サービスと変数の初期化local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- イベントハンドラを定義するlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーがコインに触れたcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- イベント受信機を設定するfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end今、プレイヤーがコインに触れるたびに、コインは 10秒間消え、出力ログは Player collected coin を印刷します。
コード説明次のセクションでは、スクリプトの機能がより詳細に説明されています。
サービスと変数を初期化する
他の言語で書いたコードの多くと同様、後でスクリプトの上部で必要な変数を定義します。私たちのコードは以フォロー中を行います:
すべてのコインに対する参照を取得する - スクリプトは、GetChildren() メソッドで、すべてのコインオブジェクトに対する参照を 3D ワークスペースにクエリします。このメソッドは、関連するオブジェクトに属するすべてを含む配列を返し、この場合は以前に作成した Workspace.World.Coins フォルダです。
グローバル変数を定義する - COOLDOWN 変数は後で使用されて、コインが収集された後に無効にする期間を定義するために使用されます。
サービスと変数の初期化local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
イベントハンドラーを定義する
Roblox エンジンは物理的に 3D 世界をシミュレートし、レンダリング、物理、ネットワーキングに関連するイベントを処理するための多くのロジックを処理します。これらのイベントの一部で自分のロジックをスクリプトすることに興味があるとき、エンジンが残りを処理する間、それらを聞き取って処理できます。この場合、タッチされたコインに関連するイベントを聞き取り、処理します。スクリプトは、フォロー中の操作を行う onCoinTouched() メソッドで、このイベントの処理ロジックを定義します:
コインが有効になっているかどうかを検出する - すべての Instance には、オブジェクトが 3D ワールドに存在するかどうかを定義する Enabled ブールアトリビュートがあります。インスタンス属性を GetAttribute() メソッドで取得できます。
プレイヤーがコインに触れたかどうかを検出する - コインが有効になっている場合、メソッドはプレイヤーサービスを使用して、コインに触れたオブジェクトが本当にプレイヤーであるかどうかをチェックします。タッチイベントが発生すると、Roblox エンジンはコインに触れたオブジェクトを otherPart パラメータとしてパスします。スクリプトは、otherPart の親がプレイヤーに属しているかどうかをチェックします。
プレイヤーがコインに触れた場合、コインを無効にし、10秒後に再び有効にする - 最後に、プレイヤーがコインに触れた場合、メソッドはコインを無効にし、10秒待ってからコインを収コレクションするために再び有効にする。task.wait() は、コードの実行を完全に停止せず、他のスレッドのタスクを同時に実行できるようにするため、wait() の代わりに使用されます。
イベントハンドラーの定義local function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーがコインに触れたcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
イベントハンドラーを接続する
すべてのシミュレーションされた 3D オブジェクトは、BasePart から継承しており、それゆえ、Touched() イベントがあります。次のループは、次の操作を行って、すべてのコインのタッチイベントに onTouchedEvent() ハンドラーを接続します:
すべてのコインをループする - 一般的な反復を使用して、コインのそれぞれをループします。
ハンドラーをイベントに接続する - ループの各回転では、デフォルトでコインが有効になるため、エクスペリエンスの初期起動中に 3D ワールドで表示されます。onCoinTouched() ハンドラーメソッドも、コインの Touched イベントに接続されており、イベントが発生するたびに実行されます。エンジンがタッチを検出すると、タッチしたオブジェクトもパスします、otherPart 。
イベントハンドラを接続するfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
メカニックをプレイテストする
コインコレクションメカニズムが意図通りに機能しているかを確認する時が来ました。エクスペリエンスをプレイテストするには:
ツールバーで プレイ ボタンをクリックします。Studio がプレイテストモードに入ります。
キャラクターを動かしてコインに触れます。スクリプトが正しく機能している場合、 出力 ウィンドウが Player collected coin 表示され、コインは再出現する前に 10 秒間消えます。