Skip to content

Chạm, Prompt và Zone ​

Cách người chơi tương tác với world: chạm vào part, bấm vào chúng, bấm phím khi đứng gần, đi vào một vùng. Phần lớn không cần code.

Gameplay không cần code ​

Đặt một trong các đối tượng này vào trong part (Insert Object > Gameplay (no script needed)), chỉnh một hai con số trong Inspector, và bấm Play. Cả bộ đồ nghề của một obby chỉ là vài lần chèn.

Đối tượngKhi người chơi chạm vào partCài đặt
TeleporterHọ xuất hiện đứng trên một part khácdestination (một part). Hai Teleporter trỏ vào nhau thành cổng hai chiều
HazardTrừ máu ngay, và trừ tiếp mỗi giây họ còn đứng đódamage (100, cả thanh máu: chết ngay; số âm thì hồi máu)
CheckpointTừ giờ chết sẽ hồi sinh ở đây-
PickupCộng vào chỉ số của họ và part biến mất một lúcstat ("Coins"), amount (1), respawnTime (10 giây; 0 = không quay lại)
BoostTăng tốc độ đi và lực nhảy trong một lúcwalkSpeed, jumpPower, duration (giây)

Và bốn đối tượng không cần người chơi chạm:

Đối tượngLàm gìCài đặt
MotionPart (và các part bên trong) tự di chuyển và xoay: bệ di động, thang máy, lưỡi dao quay, búa lắcmove (một vec3 tính bằng unit), turn (độ), pivot, time (mỗi chiều), pause (ở mỗi đầu), delay, reverses, looped, smooth, relative
SpawnerCứ vài giây tạo một bản sao của một part hay Model tại vị trí part của nó: quặng của máy thả, đá rơitemplate, interval, limit (tối đa cùng lúc), lifetime, velocity, relative
SeatNgười chơi chạm vào là ngồi xuống; nhảy để đứng lênoccupant, sat, left, sit(player), stand()
VehicleSeatGhế lái: phím của người ngồi điều khiển các Hinge có motor trong Model của nó. Insert > Vehicle (car) tạo sẵn một chiếc xe chạy đượcmaxSpeed, torque, turnSpeed; đọc throttle, steer

Server làm tất cả, nên người chơi không thể gian lận để nhặt xu hay vượt dung nham.

Thêm vào bằng script ​

Mỗi đối tượng chạy triggered(player) khi nó hoạt động, và một event có tên rõ nghĩa hơn: Teleporter teleported, Hazard hurt, Checkpoint reached, Pickup collected, Boost boosted. Script thêm hành vi mà không thay thế nó:

lua
world.Coin.Pickup.collected:connect(function(player)
    print(player.name .. " có " .. player.stats.Coins .. " xu")
end)

world.Finish.Checkpoint.reached:connect(function(player)
    chat.send(player.displayName .. " đã về đích!")
end)

local lava = new("Hazard", world.Floor)   -- và tạo chúng như mọi thứ khác
lava.damage = 25

Đối tượng nào cũng có enabled.

Chạm ​

touched chạy khi có gì chạm vào part - nhân vật người chơi hoặc part khác. touchEnded khi thôi chạm.

lua
local pad = world.SpeedPad
pad.touched:connect(function(hit)
    local player = players.fromPart(hit)
    if player then
        player.walkSpeed = 40
    end
end)

touched chạy nhiều lần khi có người đứng trên part. Muốn làm một lần, hãy nhớ ai đang đứng đó:

lua
local onPad = {}
pad.touched:connect(function(hit)
    local player = players.fromPart(hit)
    if not player or onPad[player.name] then return end
    onPad[player.name] = true
    player:damage(10)          -- một lần, không phải mỗi khung hình họ đứng đó
    task.wait(1)
    onPad[player.name] = nil
end)

Bấm chuột: Clickable ​

Đặt một Clickable vào part là người chơi bấm (hoặc chạm trên điện thoại) vào được:

lua
local button = world.Button
local clicker = new("Clickable", button)
clicker.maxDistance = 20   -- unit

clicker.clicked:connect(function(player)
    print(player.name .. " đã bấm nút")
end)

Bấm phím: Prompt ​

Prompt trong một part hiện một bảng nhỏ - "[E] Mở" - cho người chơi đứng gần. Bấm phím đó, hoặc bấm/chạm vào bảng, sẽ chạy triggered trên server:

lua
local door = world.Door
local prompt = new("Prompt", door)
prompt.text = "Mở"
prompt.key = "E"
prompt.maxDistance = 8

prompt.triggered:connect(function(player)
    door.canCollide = false
    door.transparency = 0.7
    task.wait(3)
    door.canCollide = true
    door.transparency = 0
end)

Chỉ Prompt gần nhất trong tầm mới hiện, và server kiểm tra lại người chơi có thật sự ở trong tầm.

Chữ trên part: Billboard ​

lua
local sign = new("Billboard", world.Shop)
sign.text = "CỬA HÀNG"
sign.offset = 2            -- số unit phía trên mặt trên của part
sign.textSize = 24
sign.maxDistance = 80

Nó luôn quay về phía camera, giữ nguyên cỡ trên màn hình, và mờ đi khi có vật chắn giữa nó và camera. Để viết chữ lên một mặt của part, dùng Sign (text, face, textColor, fit).

Vùng: Zone ​

Zone biến part thành một vùng báo ai đi vào, ai đi ra - cửa hàng, vùng an toàn, vạch đích. KHIM Engine làm part trong suốt, neo và đi xuyên được khi bạn thêm Zone.

lua
local zone = world.ShopArea.Zone

zone.entered:connect(function(player)
    net.send(player, "openShop")
end)

zone.left:connect(function(player)
    net.send(player, "closeShop")
end)

print(#zone:players() .. " người trong cửa hàng")
Thành viênLà gì
entered, leftMột người chơi vào / ra
partEntered, partLeftMột part không neo vào / ra
players(), parts()Ai và cái gì đang ở trong
contains(position or player or part)Có ở trong không
enabledBật hay tắt

Người chơi ở trong khi đường thẳng xuyên người họ, từ chân tới đầu, đi qua part - nên một tấm phẳng trên sàn cũng hoạt động như một khối cao.

Hẹn giờ: Timer ​

Timer chạy sau một khoảng thời gian, một lần hoặc lặp lại - đồng hồ của một vòng chơi, ngòi bom, một đợt quái:

lua
local timer = new("Timer", world)
timer.interval = 30
timer.repeats = true
timer.fired:connect(function()
    chat.send("Một đợt mới đang tới!")
end)
timer:start()
-- timer.timeLeft, timer.running, timer:stop()