プレイヤーが近づくと反発するパーツです。ここでは1つのパーツではなく、複数のパーツに対応したものをプログラムしてみました。たくさんの方法がありますのであくまでも一例となります。
- Workspace に フォルダを作成し、名前を Escape とします。
- 反発させたいパーツをこのフォルダ内に入れます。
- Workspace に Script を追加し、以下のプログラムを入力します。
local escape = script.Parent.Escape
local zoneSize = Vector3.new(15,15,15) -- パーツが反応する範囲
local power = 30 -- 反発力
local parts = escape:GetChildren()
for _,p in pairs(parts) do
local zone = Instance.new("Part",p)
zone.Name = "Zone"
zone.Shape = Enum.PartType.Ball
zone.Transparency = 1
zone.CanCollide = false
zone.Position = p.Position
zone.Size = zoneSize
local weld = Instance.new("WeldConstraint",zone)
weld.Part0 = zone
weld.Part1 = p
zone.Touched:Connect(function(hit)
local character = hit.Parent
if character:FindFirstChild("Humanoid") then
if not p:FindFirstChild("LinearVelocity") then
local direction = (p.Position - character.PrimaryPart.Position).unit
local attachment = Instance.new("Attachment", p)
local linearVelocity = Instance.new("LinearVelocity", p)
linearVelocity.Attachment0 = attachment
linearVelocity.MaxForce = 1000000
linearVelocity.VectorVelocity = direction * power
wait(0.5)
linearVelocity:Destroy()
attachment:Destroy()
end
end
end)
end
まず、反発させるパーツの外側に球体のゾーンを作成します。それに触れたらパーツを移動させせるようにしています。ゾーンに触れたら、LinearVelocity を使いパーツに力を加えています。
ServerStorageの中のパーツをプレイヤーから離れて行くようにするにはどうしたらいいですか?
ServerStorage から Clone して、Workspace に配置すればOKです。
local part = game.ServerStorage.Part:Clone()
part.Parent = game.Workspace