Phần Hoạt Hình

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Người chơi có thể nhận được phản hồi về việc liệu hành động của họ có đang làm bất cứ điều gì với hoạt họa không hay không. Đây có thể là một cây rung chói khi được đánh hoặc một pet vui vẻ nhảy khi được cho ăn. Trong trường hợp này, chúng tôi sẽ cho bạn thấ

Lập mô hình với hoạt họa

Một cách khác để hoạt họa đối tượng là sử dụng tweens. Một tween , ngắn cho in-between, là quá trình thay đổi giá trị xuất phát thành giá trị kết thúc trong một khoảng thời gian nhất định. Tweens có thể được sử dụng để thay đổi các thuộc tính như vị trí, màu hoặc chuy

Cài đặt dự án

Đối với dự án này, một tween sẽ di chuyển một đối tượng từ vị trí xuất phát đến vị trí mục tiêu.

  1. Xác định phần nào bạn sẽ hoạt họa. Trong ví dụ dưới đây, 1 là nút và 2 là bức tường.

  2. Trong phần di chuyển, hãy thêm một ClickDetector và một script tên là TweenMove. Đừng đổi tên ClickDetector.

  3. Mở script TweenMove. Sau đó, sao chép và dán script dưới đây.


    -- Dịch chuyển một phần quay qua lại nhờ trục chọn
    -- Nút có một trạng thái bật/tắt di chuyển bộ phận đó về phía trước hoặc phía sau
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Định hướng chuột; -1 có nghĩa là nó sẽ nhấn vào, 1 có nghĩa là nó sẽ nhô ra
    local inTween = false
    -- Biến tùy chỉnh
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- Biến tùy chỉnh
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Thời gian
    Enum.EasingStyle.Quad, -- Kiểu dễ dàng
    Enum.EasingDirection.Out -- Hướng dẫn chỉ định
    )
    local function buttonPress()
    -- Nếu nút đang tween, hãy ngăn nó không được sử dụng nữa
    if inTween == true then
    return
    end
    -- Tính toán CFrame mới cho vị trí nút
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Tạo một tween và chơi nó
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Khi hoàn thành tween, make button usable again
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Đổi trạng thái nút
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Chơi thử và nhấp vào đối tượng. Khi chơi thử, bạn có thể nhận thấy đối tượng di chuyển hướng hoặc khoảng cách sai. Điều này có thể được tùy chỉnh trong phần tiếp theo.

Hướng sai; cần phải điều chỉnh
Di chuyển một cách chính xác; không cần thiết chỉnh sửa

Điều chỉnh di chuyển tween

Với script đã được thêm, bạn có thể tùy chỉnh nó để phù hợp với nhu cầu của trò chơi của bạn. Người dùng có thể dịch chuyển trên các hướng như tiến và quay lại, hoặc lên và xuống.

Đổi vị trí

Nhớ, tweens chuyển từ giá trị khởi đầu đến giá trị mục tiêu. This script uses CFrames to move the button in a direction relative to its current position. That direction is controlled in Dòng 28 of the script.

Trên dòng đó, một CFrame mới được tạo bằng X, Y và Z. Trong ví dụ này, nút di chuyển so với trục Y của nó.


-- Tính toán CFrame mới cho vị trí nút
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Để có nút di chuyển trong một hướng khác chỉ cần thay thế một trong nhữngCoordinates mong muốn với dòng: TWEEN_MOVE_DISTANCE * buttonState . Đặt tất cả cácCoordinates khác để 0.

Ví dụ, dòng này sẽ di chuyển nó so với trục X của nó thay vào đó.


-- Tính toán CFrame mới cho vị trí nút
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Thời gian và khoảng cách tăng trưởng

Script bao gồm các biến đổi sau đây ảnh hưởng đến chuyển động của tween. Các tên thành thủy như TWEEN_TIME được viết riêng cho script này để được chỉnh sửa.

Cố gắng thay đổi giá trị của một biến dưới đây:

  • Dòng 11 - TWEEN_TIME : Thời gian trong giây mà một tween xảy ra.
  • Hàng 12 - TWEEN_MOVE_DISTANCE : Khoảng cách mà nút di chuyển trong studs.

Tweening các thuộc tính khác

Hầu hết các thuộc tính với một loại dữ liệu số có thể được tùy chỉnh. Bộ phận này bao gồm một số thuộc tính phổ biến, như quay, để có thể được sử dụng để mang lại nhiều phản hồi của người chơi hơn vào trò chơi của bạn. Hãy nhớ rằng, bạn cũng có thể tùy chỉnh nhiều thuộc

Để có một danh sách đầy đủ các thuộc tính, xem trang TweenService API.

Xoay

Đối với rotation, kết hợp tweening và CFrames thay vì chỉ sử dụng Vector3. Rotation tweens có thể được sử dụng để làm cho những sinh vật nhảy khi pet, hoặc Coin nhảy khi nó được nhặt lên.

Trong ví dụ script tiếp theo, vị trí và hướng quay của sinh vật đều bị tween khi nhấp để cho thấy nó hạnh phúc như thế nào khi được nuôi.

Mã bên dưới sẽ quay một đối tượng dựa trên số độ trong TWEEN_ROT_ANGLES .


-- Sử dụng tween để làm cho đối tượng quay lên và bật lên
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Biến tùy chỉnh
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Biến tùy chỉnh
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Thời gian
Enum.EasingStyle.Quad, -- Kiểu dễ dàng
Enum.EasingDirection.Out, -- Hướng dẫn chỉ định
1, -- RepeatCount (khi dưới 0, tween sẽ lặp vô tận)
true -- Reverse (tween sẽ ngược lại một lần sau khi đạt được mục tiêu của nó)
)
local function activateAction()
-- Nếu đối tượng đang dịch chuyển, ngăn chặn nó khỏi việc dịch chuyển nữa
if inTween == true then
return
end
-- Tính toán CFrame mới cho vị trí và chuyển động của đối tượng
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE, 0)
local rotatedCFrame = CFrame.Angles(math.rad(TWEEN_ROT_ANGLES), 0, 0)
offsetCFrame = offsetCFrame:ToWorldSpace(rotatedCFrame)
local newCFrame = partToTween.CFrame:ToWorldSpace(offsetCFrame)
-- Tạo một tween và chơi nó
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Khi hoàn thành tween, make object clickable again
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Thước đo

Thay đổi kích thước của đối tượng trong trò chơi cũng có thể hiển thị rằng một người chơi đã tương tác với chúng. Ví ví dụ / trường hợp, những món đồ như sức khỏe cầu và đá quý có thể thu nhỏ khi chạm. Để thay đổi các kích thước, hãy thay đổi mục tiêu tween thành một Vector3 mới của


-- Tăng kích thước của một bộ phận khi nó được chạm, sau đó tiêu diệt nó
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Biến tùy chỉnh
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Biến tùy chỉnh
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Thời gian
Enum.EasingStyle.Exponential, -- Kiểu dễ dàng
Enum.EasingDirection.Out -- Hướng dẫn chỉ định
)
local function onPartTouch(otherPart)
-- Nếu đối tượng đang dịch chuyển, ngăn chặn nó khỏi việc dịch chuyển nữa
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Ngăn chặn các va chạm tiếp theo trên đối tượng khi nó đã được nhặt lên
partToScale.CanCollide = false
-- Tạo một tween và chơi nó
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Khi hoàn thành tween, xóa mục
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Thay đổi màu

Các bộ phận có thể chuyển màu bằng cách tween với giá trị Màu3. Ví ví dụ / trường hợp, kẻ thù hoặc các đối tượng có thể flash màu để cho phản hồi rằng họ đã bị đánh hoặc nhấp vào.


-- Đổi màu của một đối tượng khi nhấp chuột và tiêu diệt nó sau 3 nhấp chuột
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Biến tùy chỉnh
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Biến tùy chỉnh
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Thời gian
Enum.EasingStyle.Exponential, -- Kiểu dễ dàng
Enum.EasingDirection.InOut, -- Hướng dẫn chỉ định
0, -- RepeatCount (khi dưới 0, tween sẽ lặp vô tận)
true -- Reverse (tween sẽ ngược lại một lần sau khi đạt được mục tiêu của nó)
)
local function activateAction()
-- Nếu đối tượng đang dịch chuyển, ngăn chặn nó khỏi việc dịch chuyển nữa
if inTween == true then
return
end
-- Tạo một tween và chơi nó
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Khi hoàn thành tween, make object clickable again
tweenObject.Completed:Connect(function()
inTween = false
-- Tăng số lần đánh
hitCount += 1
-- Sau 3 lần đánh, hủy diệt vật thể
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

Mặc dù nó sử dụng một bộ phận thông thường để thay đổi màu, nó cũng có thể được sử dụng trên MeshParts với một bản vẽ được áp dụng. MeshParts thường được nhập 3D mô hình, thay vì xây dựng trực tiếp trên Roblox Studio.

Nếu bạn đang làm việc với một MeshPart hoàn toàn có chất liệu, chúng tôi khuyến nghị những gì theo dõi:

  1. Sử dụng một SpecialMesh thay vì một MeshPart. Điều này là do một MeshPart's texture không hợp nhất màu được nhuộm bởi script.

  2. Đổi script để điều chỉnh màu VertexColor của SpecialMesh thay vì màu thuộc tính.

Dự án Mẫu

Xem tất cả các ví dụ script ở địa điểmnày không bị bảo vệ bản quyền. Lấy tất cả các script để điều chỉnh cũng.

Bao gồm các tập lệnh cho việc quay, thay đổi kích thước và thay đổi màu sắc của thiếu niên.

>