Part và đối tượng
Thuộc tính của part
| Thành viên | Kiểu | Là gì |
|---|---|---|
position | vec3 | Vị trí tâm |
rotation | vec3 | Góc xoay theo độ (X, Y, Z) |
transform | transform | Vị trí và góc xoay cùng lúc |
size | vec3 | Số unit theo trục X, Y, Z của chính nó |
color | màu | rgb(...) hoặc hsv(...) |
transparency | số | 0 đặc tới 1 vô hình |
anchored | boolean | Đứng yên; part không neo thì rơi và bị đẩy được |
canCollide | boolean | Tắt: nhân vật và part đi xuyên qua |
shape | chuỗi | "Block", "Ball", "Cylinder", "Wedge" |
material | chuỗi | "Plastic", "Smooth", "Neon", "Glass", "Metal", "Wood", "Grass", "Brick", "Concrete", "Sand", "Rock", "Water", "Leaves"... |
velocity | vec3 | Unit mỗi giây |
group | chuỗi | Nhóm va chạm ("Default") - xem Vật lý và khớp nối |
mesh | chuỗi | Model mà MeshPart hiển thị |
touched, touchEnded | event | Có gì bắt đầu / thôi chạm vào |
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.3Vậ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ên | Làm gì |
|---|---|
name, className, parent | Tê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.
for _, child in world.Coins:children() do
if child:isA("Part") then child.color = rgb(255, 215, 0) end
endTạo và xoá
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
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 xongThứ 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:
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ượng | Thêm gì |
|---|---|
Clickable | Người chơi bấm vào part được |
Prompt | "[E] Mở" khi đứng gần part |
Billboard | Chữ lơ lửng trên part |
Sign | Chữ viết trên một mặt của part |
Sound | Âm thanh nghe quanh part |
Light | Part phát sáng |
ParticleEmitter | Tia lửa, khói, lửa... |
Decal, Texture | Hình trên một mặt |
Highlight | Viền sáng, kể cả xuyên tường |
Trail, Beam | Vệt phía sau, dải nối sang part khác |
Zone | Part thành một vùng biết ai đang ở trong |
Hinge, Slider, BallJoint, Spring, Rope | Nối nó với part khác |
Mover, Spinner, Thruster | Đẩy một part không neo |
Teleporter, Hazard, Checkpoint, Pickup, Boost, Motion, Spawner, Seat | Gameplay 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:
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:
-- 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)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.