跳至正文
版本:最新版 - a1.169.2 ⚖️

烟花

如何使用我们志愿库中的烟花粒子效果资产包创建烟花发射器武器!

提示

我们现在在资源库中提供了一个 Fireworks Tools 包可供下载,其功能与本代码片段完全相同!

首先,你需要从我们的资源库中下载资产包 Fireworks Particle Effects!

配置资产包​

在此之后,你需要在包的 Package.toml 中,将此资产包和 default-weapons 包(我们将使用它来生成武器)添加为需求项:

Packages/my-firework-package/Package.toml
[meta]
title = "My Awesome Firework Package"
author = "Me"
version = "1.0.0"

[script]
# ... 保留由 CLI 生成的其他设置 ...
# 包需求项
packages_requirements = [
"default-weapons",
]
# 资产包依赖项
assets_requirements = [
"ts-fireworks",
]

依赖项会在你的包之前加载,因此它们定义的所有内容(例如 Glock 类)在你的脚本运行时都已准备就绪。如果尚未安装它们,可以通过 CLI 从资源库中进行安装:

Terminal
./NanosWorldServer.exe --cli install package default-weapons
./NanosWorldServer.exe --cli install assets ts-fireworks

代码片段​

Server/Index.lua
-- 让我们从默认武器包中生成一把 Glock,并将其设置为不造成伤害,这也会避免它生成拖尾粒子
local weapon = Glock()
weapon:SetDamage(0)

-- 让我们订阅这把武器的 'Fire' 事件,每次射击时都会触发
weapon:Subscribe("Fire", function(weap, shooter)
-- 获取武器前方的位置
local control_rotation = shooter:GetControlRotation()
local forward_vector = control_rotation:GetForwardVector()
local spawn_location = shooter:GetLocation() + Vector(0, 0, 40) + forward_vector * Vector(400)

-- 我们将生成一个空/不可见的 Prop 作为我们的抛射物 - 使用我们的不可见网格体 'SM_None'
local prop = Prop(spawn_location, control_rotation, "nanos-world::SM_None")

-- 生成拖尾/弹壳粒子,此粒子不会自动销毁,因为它应该跟随抛射物,
-- 因此我们最终必须手动销毁它
-- 我们用来获取粒子的资产包包含两个弹壳:'PS_TS_FireworksShell' 和 'PS_TS_FireworksShell_Palm'
-- 你可以使用另一个来获得更酷的效果!
local particle = Particle(Vector(), Rotator(), "ts-fireworks::PS_TS_FireworksShell", false, true)

-- 将粒子附加到抛射物 Prop 上
particle:AttachTo(prop)

-- 给抛射物施加向前的冲量
prop:AddImpulse(forward_vector * Vector(50000), true)

-- 将射击者设置为该抛射物的网络主控
-- 这样只有射击者负责处理此对象的物理
prop:SetNetworkAuthority(shooter:GetPlayer())

-- 调用客户端生成 'Launch' 音效
Events.BroadcastRemote("SpawnFireworkSound", Reliability.Reliable, particle)

-- 500 毫秒后,引爆烟花
Timer.SetTimeout(function()
-- 调用客户端在抛射物位置生成 'Explosion' 音效
Events.BroadcastRemote("ExplodeFireworkSound", Reliability.Reliable, prop:GetLocation())

-- 生成粒子爆炸效果。
-- 此资产包还包含以下粒子,欢迎尝试!
-- 'PS_TS_Fireworks_Burst_Chrys', 'PS_TS_Fireworks_Burst_Circle', 'PS_TS_Fireworks_Burst_Palm',
-- 'PS_TS_Fireworks_Burst_Shaped' 和 'PS_TS_Fireworks_Burst_ShellsWithinShells'
local particle_burst = Particle(prop:GetLocation(), Rotator(), "ts-fireworks::PS_TS_Fireworks_Burst_Palm", true, true)

-- 这些粒子允许调整它们的一些属性,让我们将 BlastColor 设置为红色
particle_burst:SetParameterColor("BlastColor", Color(1, 0, 0))

-- 这些粒子暴露以下参数:
-- 颜色:'BlastColor'、'BurstColor'、'SparkleColor'、'FlareColor'、'TailColor'
-- 布尔:'BlastSmoke'、'TailSmoke'
-- 浮点:'BurstMulti'、'SparkleMulti'
end, 500)

-- 1 秒后,销毁粒子和抛射物
prop:SetLifeSpan(1)
particle:SetLifeSpan(1)
end)
Client/Index.lua
-- 订阅以生成并附加烟花发射音效
Events.SubscribeRemote("SpawnFireworkSound", function(firework)
local sound = Sound(Vector(), "ts-fireworks::A_Firework_Launch", false, true, SoundType.SFX, 1, 1, 400, 100000)
sound:AttachTo(firework)
end)

-- 订阅以生成烟花爆炸音效
Events.SubscribeRemote("ExplodeFireworkSound", function(location)
Sound(location, "ts-fireworks::A_Firework_Explosion_Fizz_Cue", false, true, SoundType.SFX, 3, 1, 400, 100000)
end)