Â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.
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" |
volume | 0 tới 1 |
looped | Phát lặp lại |
playing | Có đ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
.wavcủ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.
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
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 | |
|---|---|
clockTime | Giờ, 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, fogEnd | Sương mù, tính bằng unit từ camera |
globalShadows | Bật/tắt bóng đổ |
exposureCompensation | Sáng hơn hay tối hơn nói chung |
geographicLatitude | Mặ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.
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ạtMộ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
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 unitHighlight
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":
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
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, 0Ai 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:
-- Script
net.sendAll("lights", false)
-- ClientScript
net.on("lights", function(on)
for _, lamp in tags.get("StreetLamp") do lamp.Light.enabled = on end
end)