【2】インスタンスとパーティクル

関数の練習として、炎をゲーム内のパーツに設定し、ゲームスタート時に炎を破壊し、スパークルに置き換える関数を作成してみましょう。

パーツとスクリプトを設定する

新しいパーツを作成する

  1. 新しい Part(パーツ)を作成し、名前を変更します。このレッスンでは、FirePart という名前にします。
  2. FirePartを右クリックし、Insert Object から、Effects(エフェクト)下の Fire(炎)を選択します。

新しいスクリプトを作成する

  1. Explorer(エクスプローラー)で、FirePart に新しいスクリプトを追加します。
  2. スクリプトの名前を変更します。このレッスンでは、StopFire という名称にします。
  3. Hello Worldを削除し、スクリプトの目的を説明するコメントを追加します。
  4. firePart という名前の新しい変数を作成します。これは、スクリプトの親を示すものとなります。
-- firePartからFireを取り除く
-- 変数の設定
local firePart = script.Parent

炎を破壊する

ロブロックスには炎をスパークルに置き換える関数がないので自分で作成します。名前は stopFire() とします。関数の名前は任意ですが、ここでは stopFire() にします。他の名前にする場合は、機能が分かるようなものにしましょう。

新しい関数を作成する

  1. コメントの下に local function stopFire() と入力します。
  2. [Enter]を押します。(endはオートコンプリートで現れます)

コードは次のようになっているはずです。

-- firePartからFireを取り除く
local firePart = script.Parent
 
-- Fireを消す関数
local function stopFire()
 
end

Destroyを使用して炎を停止させる

関数を作成したので、次に stopFire()end の間に命令文を追加します。Destroy()という既成の関数を使用して、firePart の親である Fire を取り除きます。

  1. stopFire() end の間に firePart.Fire:Destroy() と入力します。
  1. end の下で、stopFire() を呼び出します。

コードをテストします。炎は消えるはずです。実行中にExplorerを確認してみると Fire がなくなっているのが確認できると思います。テストプレイを終了するとまた現れます。

新しいインスタンスを作成する

パーツやスクリプトなど、ゲームに追加されるものはすべてオブジェクトと呼ばれます。特定のタイプのオブジェクトの各コピーはインスタンスと呼ばれます。Fire(炎)はインスタンスの一種です。炎のインスタンスをスパークルに置き換えるには、ParticleEmitter のインスタンスを使用します。これは、スパークル、煙といった特殊効果を作成するのに使用されます。

ParticleEmitterインスタンスを作成する

  1. firePart.Fire:Destroy() の下に次を入力します。
    local spark = Instance.new(“ParticleEmitter”)
  1. 次の行で下記のように入力し、firePartParticleEmitter を追加します。
    spark.Parent = firePart

インスタンスを FirePart の親(Parent)にすることで、Fire とまったく同じ位置に配置することができます。

スクリプトをテストする

  1. ゲームを実行し、炎がParticleEmitterに置き換えられることを確認します!

トラブルシューティングのヒント
“ParticleEmitter” のスペルが正しいことを確認します。またダブルクォーテーションと( )の間にあることを確認します。
stopFire()end の下に入力されていることを確認します。入力されていないと、関数を呼び出したり、命令を実行したりすることができません。

完成したコードの例:

-- Fireをパーティクルに置き換える
-- 変数の設定
local firePart = script.Parent
 
-- 関数の作成
local function stopFire()
    -- Fireを消す
    firePart.Fire:Destroy()
    -- パーティクルを作成する
    local spark = Instance.new("ParticleEmitter")
    spark.Parent = firePart
end
-- 関数を呼ぶ
stopFire()

print関数のトラブルシューティング

様々な場所に print関数を入れることで、エラーが見つけやすくなります。例えば、stopFire() 関数に print関数を入れておけば、コードの他の部分が期待通りに動かなくても、関数が呼び出されているのかを確認することができます。

  1. 関数の中に print関数を追加して、関数が呼び出されていることを確認します。
local function stopFire()
    print("Starting stopFire function")
    -- Fireを消す
    firePart.Fire:Destroy()
    -- パーティクルを作成する
    local spark = Instance.new("ParticleEmitter")
    spark.Parent = firePart
end
stopFire()
3 thoughts on “【2】インスタンスとパーティクル”
  1. 質問失礼します。
    このようなパーティクルの出現方法ではないんですが、
    ・ReplicatedStorageにパーティクルを置いて、
    ・ServerScriptServiceでプレイヤーの体に読み込んで、
    ・UIのLocalScriptで(パーティクルの)Enabledを変えてるんですけど、
    「他のプレイヤーに見えないバグ」
    があるんですが、どうすればいいのでしょうか。

    スクリプト
    ServerScriptService:

    local serverstorage = game:GetService(“ReplicatedStorage”)

    ———————————-

    — Particles

    local particle = serverstorage.ParticleEmitters:WaitForChild(“ParticleEmitter”)

    ———————————-

    game.Players.PlayerAdded:Connect(function(plr)
    plr.CharacterAdded:Connect(function(char)

    — Particle
    local HeadPart = char:FindFirstChild(“Head”)
    local particleclone = particle:Clone()
    particleclone.Parent = HeadPart
    end)
    end)

    LocalScript:
    script.Parent.MouseButton1Click:Connect(function()
    if game.Players.LocalPlayer.Character.Head.ParticleEmitter.Enabled == true then
    game.Players.LocalPlayer.Character.Head.ParticleEmitter.Enabled = false
    else
    game.Players.LocalPlayer.Character.Head.ParticleEmitter.Enabled = true
    end
    end)

コメントを残す