Skip to content

Âm thanh, ánh sáng và hiệu ứng ​

Âm thanh ​

Sound bên trong một part thì nghe quanh part đó; trong một Tool thì quanh người cầm nó; ở chỗ khác thì nghe ở mọi nơi.

lua
local sound = new("Sound", world.Coin)
sound.soundId = "coin"   -- âm thanh có sẵn, hoặc "asset:123" cho âm thanh bạn tải lên
sound.volume = 0.8
sound:play()
Thành viên
soundId"coin", "click", "swing", "hit", "win", "music", hoặc "asset:123"
volume0 tới 1
loopedPhát lặp lại
playingCó đang phát không
play(), stop()
  • Âm thanh của Script phát cho mọi người chơi (âm thanh lặp còn phát cho cả người vào sau). Của ClientScript chỉ phát cho người chơi đó.
  • Trong KHIM Engine, Play at start của Sound phát nó cho mọi người khi game bắt đầu - nhạc nền thì bật thêm Looped.
  • Tải âm thanh .wav của bạn lên ở bảng Assets (Model, hình ảnh và âm thanh).

Ánh sáng ​

Light bên trong một part làm part phát sáng: đèn, đuốc, biển neon chiếu sáng thật lên tường, đèn pha.

lua
local lamp = new("Light", world.Lamp)
lamp.color = rgb(255, 200, 140)
lamp.brightness = 2      -- 0 tới 10
lamp.range = 20          -- unit, tối đa 60
lamp.angle = 360         -- toả mọi hướng; nhỏ hơn là hình nón (đèn rọi)
lamp.direction = vec3(0, -1, 0)  -- hướng của hình nón, theo hướng riêng của part
lamp.innerAngle = 30     -- phần giữa hình nón sáng hết cỡ

Đèn đẹp nhất về đêm hoặc trong nhà. Ở mức đồ hoạ cao nhất vẽ tối đa 16 đèn một lúc (thiết bị yếu ít hơn) - những đèn gần camera nhất. Đèn không đổ bóng.

Giờ trong ngày: lighting ​

lua
lighting.clockTime = 18.5                    -- 6 giờ 30 chiều
lighting:tween({clockTime = 20}, 60)          -- hoàng hôn trong một phút
lighting.brightness = 2
lighting.fogColor = rgb(200, 210, 230)
lighting.fogStart, lighting.fogEnd = 50, 400
lighting.globalShadows = true
print(lighting.timeOfDay)                     -- "18:30:00"
Thành viên
clockTimeGiờ, 0 tới 24 (hoặc timeOfDay dạng "hh:mm:ss")
brightnessĐộ mạnh của mặt trời
ambient, outdoorAmbientÁnh sáng từ mọi phía, trong nhà và ngoài trời
fogColor, fogStart, fogEndSương mù, tính bằng unit từ camera
globalShadowsBật/tắt bóng đổ
exposureCompensationSáng hơn hay tối hơn nói chung
geographicLatitudeMặt trời lên cao tới đâu
getSunDirection()Mặt trời đang ở đâu

Bầu trời, mặt trời, mặt trăng, sao và mây tự theo clockTime. Script đổi thì tới mọi người chơi; ClientScript đổi thì chỉ người chơi đó.

Hạt (particle) ​

ParticleEmitter (Particles trong menu KHIM Engine) phun lửa, khói, tia lửa, phép thuật, mưa... Chèn một cái vào part, rồi chọn Start from trong Inspector để lấy một trong 17 hiệu ứng có sẵn - Fire, Smoke, Sparks, Sparkles, Magic aura, Embers, Shockwave, Explosion, Electric, Heal, Portal, Rune circle, Rain, Snow, Leaves, Dust, Bubbles - rồi chỉnh số nào cũng được.

lua
local fx = new("ParticleEmitter", world.Sword.Blade)
fx.texture = "Sparkle"
fx.rate = 30                   -- mỗi giây
fx.lifetime = vec3(0.5, 1, 0)  -- từ 0,5 tới 1 giây
fx.speed = vec3(2, 4, 0)
fx.color = rgb(140, 90, 255)
fx.lightEmission = 1           -- sáng lên ở chỗ chúng chồng nhau
fx.lockedToPart = true         -- di chuyển theo part
fx:emit(20)                    -- phun ngay 20 hạt

Một vài thứ nó làm được: hình và flipbook, kích thước, màu và độ trong suốt thay đổi theo vòng đời mỗi hạt (NumberSequence, ColorSequence), hình dạng vùng phun (hộp, cầu, trụ, đĩa, nón), phun từng đợt theo lịch, lực cản, nhiễu loạn, va chạm, vệt, và emitter con. ParticleForce trên một part hút, xoáy hay thổi mọi hạt gần nó. Effect phát mọi hạt trên part của nó và bên trong như một: play(), stop(), clear().

Hạt do thiết bị mỗi người chơi vẽ: emitter của ClientScript chỉ người chơi đó thấy.

Hình trên part: Decal và Texture ​

lua
local poster = new("Decal", world.Wall)
poster.image = "star"       -- hoặc "asset:123"
poster.face = "Front"       -- "Front", "Back", "Left", "Right", "Top", "Bottom"

local tiles = new("Texture", world.Floor)
tiles.image = "asset:456"
tiles.face = "Top"
tiles.tileSize = vec2(4, 4)   -- lặp lại mỗi 4 unit

Highlight ​

Viền quanh part (và mọi thứ bên trong) và phủ màu lên - xuyên tường trừ khi depthMode = "Occluded":

lua
local glow = new("Highlight", world.Treasure)
glow.fillColor = rgb(255, 220, 0)
glow.fillTransparency = 0.6
glow.outlineColor = rgb(255, 255, 255)

Beam và Trail ​

lua
local laser = new("Beam", world.Turret)       -- một dải nối từ part này sang part khác
laser.part1 = world.Target
laser.color = rgb(255, 40, 40)
laser.width0, laser.width1 = 0.3, 0.3

local trail = new("Trail", world.Ball)        -- vệt mà một part đang di chuyển để lại
trail.lifetime = 0.5
trail.width0, trail.width1 = 1, 0

Ai thấy thay đổi của hiệu ứng ​

Decal, Texture, Highlight, Beam, Trail, Light và hạt được lưu cùng world sẽ tới mọi người chơi. Sau đó thiết bị mỗi người chơi giữ bản riêng: Script trên server đổi chúng thì người chơi không thấy (trừ cài đặt và emit của ParticleEmitter). Muốn bật tắt đèn hay đổi decal cho người chơi, làm từ ClientScript - server có thể bảo client làm bằng net.sendAll:

lua
-- Script
net.sendAll("lights", false)

-- ClientScript
net.on("lights", function(on)
    for _, lamp in tags.get("StreetLamp") do lamp.Light.enabled = on end
end)

Nổ và phá huỷ ​

Xem Xây dựng, phá huỷ, thành tựu.