Animation và rig
Nhân vật phát các clip - vẫy tay, nhảy múa, vung kiếm, ngồi - đè lên chuyển động của chính nó. Rig là một model của riêng bạn - sinh vật, máy móc, cối xay gió - được ghép bằng Bone và chuyển động bằng chính các clip đó.
Phát clip trên nhân vật
Đối tượng Animation chứa một clip. Chèn một cái (Insert Object > Animation), chọn Start from trong Inspector để lấy một clip của KHIM, và chỉnh nó trong trình sửa animation. Rồi:
local track = player.character.body:loadAnimation(world.Wave)
track:play()
track.stopped:connect(function() print("đã vẫy") end)| Thành viên của track | |
|---|---|
play(fadeTime?, weight?, speed?) | Bắt đầu (lại từ đầu nếu đang phát) |
stop(fadeTime?) | Dừng |
adjustSpeed(speed), speed | 1 là như lúc làm, 0 giữ yên, tối đa 10 |
looped | Phát lặp |
playing, length, timePosition | Chỉ đọc |
stopped (cả ended) | Chạy khi dừng hoặc hết clip |
body:getPlayingAnimationTracks() liệt kê những gì đang phát. Load một Animation một lần rồi phát lại track của nó; đừng load mỗi lần.
Ai thấy: clip của Script phát cho mọi người chơi. Clip của ClientScript trên nhân vật của chính người chơi cũng được gửi tới mọi người; trên nhân vật người khác thì chỉ người chơi đó thấy.
Clip có sẵn của KHIM
animation.preset = "dance" (hoặc Start from trong Inspector) điền vào Animation một clip của KHIM: wave, dance, cheer, point, salute, laugh, shrug, sit, bow, clap - các emote người chơi gõ như /e dance - và idle, walk, jump, fall, climb, để bắt đầu làm chuyển động riêng.
Thay chuyển động của nhân vật
Nhân vật luôn đang làm một trong năm chuyển động - Idle, Walk, Jump, Fall, Climb - và mỗi cái là một clip. Thay bằng clip của bạn:
local body = player.character.body
body.walkAnimation = world.Moves.Run -- còn có idleAnimation, jumpAnimation, fallAnimation, climbAnimation
body.walkAnimation = nil -- trở lại của KHIMClip của bạn nắm các khớp nó có keyframe; clip của KHIM giữ phần còn lại (một kiểu chạy chỉ cử động tay thì chân vẫn đi như cũ). Clip đi bộ phát nhanh theo tốc độ nhân vật.
Trình sửa animation
View > Animation, hoặc Open the animation editor trong Inspector của một Animation.
- Hình nhân cho thấy nhân vật của bạn ở tư thế của clip tại đầu đọc. Kéo chấm của một khớp để xoay phần cơ thể đó - nó thành một keyframe tại đầu đọc. Hoặc dùng tay cầm Move và Rotate.
- Các con số ở góc trên phải: X, Y và Z của khớp đang chọn tại đầu đọc. Add a key, Remove the key, và cách nó chuyển sang key tiếp theo: Smooth, Linear, Constant, Ease in, Ease out, Bounce, Elastic.
- Dòng thời gian: mỗi khớp một hàng, mỗi key một dấu. Kéo key để dời; nhấp đúp một hàng để thêm key; chuột phải để chọn kiểu chuyển hoặc xoá.
- Play phát clip; Looped làm nó lặp.
- Copy pose, Paste pose và Mirror (đổi trái phải) làm việc với cả một tư thế.
Mỗi thay đổi là một bước Undo.
Clip là chữ
keyframes của Animation là văn bản thuần - mỗi dòng một key, hoặc ; giữa các key:
0 RightArm 0 0 0
0.3 RightArm -160 0 20 smooth
0.6 RightArm -120 0 40
0.9 RightArm -160 0 20
1.2 RightArm 0 0 0Mỗi key là giây khớp x y z [kiểu chuyển]. Các khớp của nhân vật là Root, Torso, Head, LeftArm, RightArm, LeftLeg, RightLeg; các số là độ quanh trục riêng của nhân vật (Root tính bằng unit: 0 Root 0 -1 0 là thấp xuống một bước). Khớp không có key thì để nhân vật tự lo, nên chân vẫn bước khi tay vẫy. Giới hạn: 512 key, 60 giây, 8.192 ký tự.
Rig và Bone
Bone giữ một part vào part khác - holder (part giữ) - và xoay nó quanh một điểm: chân sinh vật, cánh, tay con rối, cánh cối xay gió.
Làm trong KHIM Engine: chọn part giữ, Ctrl-bấm part chuyển động, rồi chèn Bone (Insert Object > Joints). Bone nằm trên part được chọn sau cùng.
| Thành viên của Bone | |
|---|---|
holder | Part mang nó |
anchor | Điểm nó xoay quanh, tính bằng unit từ tâm part, theo các hướng riêng của part |
angles | Góc xoay tại đó, theo độ |
offset | Dời part khỏi chỗ nó đứng |
enabled | Tắt: buông ra |
Di chuyển hay xoay part giữ - bằng script, Motion, Bone khác - thì part đi theo. Part nằm bên trong một part có Bone mà không có Bone riêng thì đi theo luôn (mũ bên trong đầu).
-- Script bên trong Model con rồng
local dragon = script.parent
dragon.Head.Bone.angles = vec3(0, 30, 0) -- xoay bằng tay: nó nhìn sang trái
dragon.Jaw.Bone.offset = vec3(0, -0.4, 0) -- hàm hạ xuống
local flap = dragon:loadAnimation(dragon.Flap)
flap:play()Clip của rig dùng tên các part của rig làm khớp - part tên "Left Wing" là LeftWing:
0 LeftWing 0 0 0
0.4 LeftWing 0 0 50
0.8 LeftWing 0 0 0Key dạng Piston:move dời part thay vì xoay (tính bằng unit). Giữ Animation của rig bên trong rig, và trình sửa animation sẽ chỉnh chúng ngay trên rig.
Cài đặt Spring (0 cứng tới 1 lỏng) trên một Bone làm part của nó lắc theo sau tư thế - đuôi, tai, áo choàng.
Cơ thể riêng cho người chơi
Đặt tên một rig là StarterCharacter, dựng nó nhìn về +Z, để trong ReplicationService, và thêm các Animation tên Idle, Walk, Jump, Fall, Climb: mọi người chơi sẽ được vẽ thành nó. Xem Người chơi và nhân vật.
Từ Blender
Insert > Rig from Blender (.glb) đưa vào cả một model chuyển động: mỗi mesh object thành một MeshPart, mỗi cái được một Bone giữ ở chỗ bone của nó, và mỗi action của Blender thành một Animation. Trong Blender, gắn mỗi phần vào bone (Ctrl+P > Bone) và xuất glTF Binary có tick Animation. Mesh có skinning được đưa vào ở tư thế nghỉ.