Skip to content

Part và đối tượng ​

Thuộc tính của part ​

Thành viênKiểuLà gì
positionvec3Vị trí tâm
rotationvec3Góc xoay theo độ (X, Y, Z)
transformtransformVị trí và góc xoay cùng lúc
sizevec3Số unit theo trục X, Y, Z của chính nó
colormàurgb(...) hoặc hsv(...)
transparencysố0 đặc tới 1 vô hình
anchoredbooleanĐứng yên; part không neo thì rơi và bị đẩy được
canCollidebooleanTắt: nhân vật và part đi xuyên qua
shapechuỗi"Block", "Ball", "Cylinder", "Wedge"
materialchuỗi"Plastic", "Smooth", "Neon", "Glass", "Metal", "Wood", "Grass", "Brick", "Concrete", "Sand", "Rock", "Water", "Leaves"...
velocityvec3Unit mỗi giây
groupchuỗiNhóm va chạm ("Default") - xem Vật lý và khớp nối
meshchuỗiModel mà MeshPart hiển thị
touched, touchEndedeventCó gì bắt đầu / thôi chạm vào
lua
local part = world.Platform
part.position = vec3(0, 10, 0)
part.rotation = vec3(0, 45, 0)
part.color = rgb(80, 160, 255)
part.material = "Neon"
part.transparency = 0.3

Vật liệu đổi cả khối lượng, độ bám và độ nảy của part, không chỉ vẻ ngoài: Metal nặng, Wood nhẹ, Smooth trơn.

Mọi đối tượng ​

Part, Model, Folder, đối tượng trên part, UI - tất cả đều có:

Thành viênLàm gì
name, className, parentTên, loại, thứ chứa nó
find(name)Một con theo tên, hoặc nil
waitFor(name, timeout?)Một con theo tên, chờ tới khi có (nil sau timeout)
findByClass(className)Con đầu tiên thuộc loại đó
children()Danh sách các con
isA(className)Có thuộc loại đó không
clone()Một bản sao, cùng mọi thứ bên trong (script bên trong không được chép)
destroy(), destroyAfter(seconds)Xoá nó và mọi thứ bên trong
tween(goals, time or options)Đổi thuộc tính một cách mượt mà

Và các con theo tên, như thành viên: world.House.Door.

lua
for _, child in world.Coins:children() do
    if child:isA("Part") then child.color = rgb(255, 215, 0) end
end

Tạo và xoá ​

lua
local crate = new("Part", world)       -- cha là đối số thứ hai
crate.name = "Crate"
crate.size = vec3(3, 3, 3)
crate.material = "Wood"
crate.anchored = false
crate.position = vec3(0, 30, 0)

local tree = shared.Tree:clone()       -- bản sao của một Model để trong ReplicationService
tree.parent = world

crate:destroyAfter(10)

Model gom các part di chuyển và sao chép cùng nhau. new("Model") tạo một Model; đặt part vào bằng part.parent = model.

Để mẫu ngoài world

Model bạn hay clone - quái, xu, đạn - nên để trong ReplicationService (shared) hoặc StorageService (chỉ server), để chúng chưa có trong world cho tới khi bạn clone.

Thay đổi từ server và từ client ​

Script trên server đổi một part thì mọi người chơi đều thấy. ClientScript đổi thì chỉ người chơi đó thấy. Mở cửa từ ClientScript là mở cho một người - và server, nơi nắm va chạm, vẫn coi cửa đóng. Xem Server và client.

Tween ​

lua
local lift = world.Lift
local bottom = lift.position

local tween = lift:tween({position = bottom + vec3(0, 20, 0)}, {
    time = 3,
    style = "Sine",
    direction = "InOut",
    repeats = -1,     -- mãi mãi
    reverses = true,  -- đi rồi về
})
-- tween:cancel() để dừng; tween.completed chạy khi xong

Thứ gì là số hoặc kiểu giá trị đều tween được: position, size, color, transparency, rotation, transform...

Raycast ​

world:raycast(origin, direction) tìm part đầu tiên dọc một đường thẳng:

lua
local hit = world:raycast(vec3(0, 50, 0), vec3(0, -100, 0))   -- thẳng xuống, 100 unit
if hit then
    print(hit.part.name, hit.position, hit.normal, hit.distance)
end

Đối tượng trên part ​

Nhiều đối tượng hoạt động khi được đặt bên trong một part:

Đối tượngThêm gì
ClickableNgười chơi bấm vào part được
Prompt"[E] Mở" khi đứng gần part
BillboardChữ lơ lửng trên part
SignChữ viết trên một mặt của part
SoundÂm thanh nghe quanh part
LightPart phát sáng
ParticleEmitterTia lửa, khói, lửa...
Decal, TextureHình trên một mặt
HighlightViền sáng, kể cả xuyên tường
Trail, BeamVệt phía sau, dải nối sang part khác
ZonePart thành một vùng biết ai đang ở trong
Hinge, Slider, BallJoint, Spring, RopeNối nó với part khác
Mover, Spinner, ThrusterĐẩy một part không neo
Teleporter, Hazard, Checkpoint, Pickup, Boost, Motion, Spawner, SeatGameplay không cần code

Chèn chúng trong KHIM Engine, hoặc từ script: new("Light", part). Script gọi tới bằng tên: script.parent.Light.brightness = 3.

Xem Chạm, Prompt và Zone, Âm thanh, ánh sáng và hiệu ứng và Các lớp đối tượng.

Value ​

IntValue, NumberValue, StringValue, BoolValue, ObjectValue, Vector3Value, Color3Value giữ một giá trị cho script đọc - giá một món hàng, tốc độ một cánh cửa - đặt trong Inspector:

lua
local price = script.parent.Price.value
script.parent.Price.changed:connect(function(new) print("giờ là", new) end)

Attribute làm cùng việc mà không cần thêm đối tượng.

Giữa các script cùng phía ​

BindableEvent để các script báo cho nhau một việc vừa xảy ra; BindableFunction để script này hỏi script kia:

lua
-- một Script
local roundOver = shared.RoundOver   -- một BindableEvent
roundOver:fire("Red")

-- Script khác
shared.RoundOver.event:connect(function(winner) print(winner .. " thắng") end)
lua
local getScore = shared.GetScore     -- một BindableFunction
getScore.onInvoke = function(player) return player.stats.Coins end
print(getScore:invoke(somePlayer))

Để đi giữa server và người chơi, dùng net.