関数の練習として、炎をゲーム内のパーツに設定し、ゲームスタート時に炎を破壊し、スパークルに置き換える関数を作成してみましょう。
パーツとスクリプトを設定する
新しいパーツを作成する
- 新しい Part(パーツ)を作成し、名前を変更します。このレッスンでは、FirePart という名前にします。
- FirePartを右クリックし、Insert Object から、Effects(エフェクト)下の Fire(炎)を選択します。
新しいスクリプトを作成する
- Explorer(エクスプローラー)で、FirePart に新しいスクリプトを追加します。
- スクリプトの名前を変更します。このレッスンでは、StopFire という名称にします。
- Hello Worldを削除し、スクリプトの目的を説明するコメントを追加します。
- firePart という名前の新しい変数を作成します。これは、スクリプトの親を示すものとなります。
-- firePartからFireを取り除く
-- 変数の設定
local firePart = script.Parent
炎を破壊する
ロブロックスには炎をスパークルに置き換える関数がないので自分で作成します。名前は stopFire() とします。関数の名前は任意ですが、ここでは stopFire() にします。他の名前にする場合は、機能が分かるようなものにしましょう。
新しい関数を作成する
- コメントの下に local function stopFire() と入力します。
- [Enter]を押します。(endはオートコンプリートで現れます)
コードは次のようになっているはずです。
-- firePartからFireを取り除く
local firePart = script.Parent
-- Fireを消す関数
local function stopFire()
end
Destroyを使用して炎を停止させる
関数を作成したので、次に stopFire() と end の間に命令文を追加します。Destroy()という既成の関数を使用して、firePart の親である Fire を取り除きます。
- stopFire() と end の間に firePart.Fire:Destroy() と入力します。
- end の下で、stopFire() を呼び出します。
コードをテストします。炎は消えるはずです。実行中にExplorerを確認してみると Fire がなくなっているのが確認できると思います。テストプレイを終了するとまた現れます。
新しいインスタンスを作成する
パーツやスクリプトなど、ゲームに追加されるものはすべてオブジェクトと呼ばれます。特定のタイプのオブジェクトの各コピーはインスタンスと呼ばれます。Fire(炎)はインスタンスの一種です。炎のインスタンスをスパークルに置き換えるには、ParticleEmitter のインスタンスを使用します。これは、スパークル、煙といった特殊効果を作成するのに使用されます。
ParticleEmitterインスタンスを作成する
- firePart.Fire:Destroy() の下に次を入力します。
local spark = Instance.new(“ParticleEmitter”)
- 次の行で下記のように入力し、firePart に ParticleEmitter を追加します。
spark.Parent = firePart
インスタンスを FirePart の親(Parent)にすることで、Fire とまったく同じ位置に配置することができます。
スクリプトをテストする
- ゲームを実行し、炎が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関数を入れておけば、コードの他の部分が期待通りに動かなくても、関数が呼び出されているのかを確認することができます。
- 関数の中に print関数を追加して、関数が呼び出されていることを確認します。
local function stopFire()
print("Starting stopFire function")
-- Fireを消す
firePart.Fire:Destroy()
-- パーティクルを作成する
local spark = Instance.new("ParticleEmitter")
spark.Parent = firePart
end
stopFire()
[ 【1】関数 ]
3 thoughts on “【2】インスタンスとパーティクル”
コメントを残す コメントをキャンセル
コメントを投稿するにはログインしてください。
質問失礼します。
このようなパーティクルの出現方法ではないんですが、
・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)
すみません、昨日から調べに調べ回ってたんですけど、RemoteEventで解決しました。
そうですね。
LocalScriptで実行したものは、他のプレイヤーからは見えません。
そのため、RemoteEvent を使って、サーバーで実行するようにするわけです。