動畫零件

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

玩家可以獲得是否或否是否與動畫執行任何操作的意見。這可以是樹樹搖動,或是寵物歡呼,或是給寵物餵食時,它們會跳躍開心。在這個情況下,我們會顯示扮演按鈕,當玩家點擊它時會移動。

使用動畫暢定

一種使用對象的動畫方式是使用 tweens。 一個 tween ,簡稱在-之間,是過一定時間變更起始值和結束值的過程。 暢和可以使用位置、顏色或旋轉等屬性的改變。

項目設定

對於此項目,擬人將一個物件從起始位置移動到目標位置。

  1. 確定你要動畫的零件。在下面的範例中,1 是按鈕,2 是牆。

  2. 在移動工具動的零件中,添加一個名為 TweenMove 的指令碼。 不要重命名 ClickDetector 。

  3. 開啟 TweenMove 指指令碼。然後,複製並貼入下面的指令。


    -- 以選定的軸回來和去來調整零件的方向
    -- 按鈕有開/關狀態,可以將零件移動為前方或後方
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- 決定按鈕方向;-1表示它會向內壓,1表示它會向外彈出
    local inTween = false
    -- 可自訂變數
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- 變更控制
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- 時間
    Enum.EasingStyle.Quad, -- 減輕風格
    Enum.EasingDirection.Out -- 方向
    )
    local function buttonPress()
    -- 如果按鈕是擺動的,請防止它再次使用
    if inTween == true then
    return
    end
    -- 計算新按鈕位置的 CFrame
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- 創建一個擂臉並播放它
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- 在兩次完成時,按鈕可再次使用
    tweenButton.Completed:Connect(function()
    inTween = false
    -- 反轉按鈕狀態
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. 播放測試並單擊對物件。在測試期間,您可能會發現對象移動方向或距離錯誤。您可以在下一個部分中自訂。

方向錯誤;需要調整
正確移動;不需要調整

調整移動擺動

添加了腳本後,您可以根據您的遊戲需要自訂它。按鈕可以擺動來在前方和返回方,或上下移動。

變更位置

記住,青少年從開始值變成目標值。此腳本使用 CFrames 來移動按鈕在其當前位置相對於其位置。該方向是由 第28 行 的腳指令碼控制。

在那條線上,使用 X、Y 和 Z 坐標來建立新的 CFrame。在這個範例中,按鈕移動相對於其 Y 軸。


-- 計算新按鈕位置的 CFrame
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

要將按鈕移動在 不同 的方向,請將其中一個願望的坐標與線: TWEEN_MOVE_DISTANCE * buttonState 設置所有其他坐標為 0。

舉例來說,這條線將相對於其 X 軸移動。


-- 計算新按鈕位置的 CFrame
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

調整時間和距離

腳本包含影響動補間動畫移動的以下變數。以下以名稱為 TWEEN_TIME 的資產名稱來說明此腳本的修改。

試著變更下面的一個變數的值:

  • 線 11 - TWEEN_TIME : 暫時的時間。
  • 線 12 - TWEEN_MOVE_DISTANCE : 按鈕移動的距離。

擷取其他屬性

大多數具有數量資料類型的屬性都可以調整。這個部分包括一些常見屬性,例如旋轉,可以用來帶來更多玩遊戲回饋。請注意,您也可以調整多個屬性一次。

有關完整列表的屬性,請參閱 TweenService API 頁面。

旋轉

對於旋轉,請結合使用 Vector3 和 CFrames 而不是只是使用它們來製作動物。旋轉擺動可以讓動物隨著時間的推移而搖動,而 CFrames 可以讓金幣在撿起時轉動。

下一個腳本範例中,創造物的位置和旋轉都會在點擊時滾動,以顯示寵物時的幸福度。

下面的代碼會依據 TWEEN_ROT_ANGLES 中的度數來旋轉對象。


-- 使用減速器使對象旋轉上升並彈出
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- 可自訂變數
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- 變更控制
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- 時間
Enum.EasingStyle.Quad, -- 減輕風格
Enum.EasingDirection.Out, -- 方向
1, -- RepeatCount (當零小於零時,會在definitely 重複)
true -- 反轉 (擺動將會在達到目標時反轉)
)
local function activateAction()
-- 如果對象正在擺動,請防止它再次擺動
if inTween == true then
return
end
-- 計算新 CFrame 位置和旋轉
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)
-- 創建一個擂臉並播放它
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- 在兩次完成後,再讓對象再次可以點擊
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

縮放

也可以顯示玩家與對象交互的大小。例個體、實例,像生命包或寶石等的撿起可以縮小,當碰到時。要將零件放大或縮小,您可以將減速目標變更為您想要的任何矢量3。


-- 在零件被觸摸時擴大或縮小它,然後摧毀它
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- 可自訂變數
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- 變更控制
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- 時間
Enum.EasingStyle.Exponential, -- 減輕風格
Enum.EasingDirection.Out -- 方向
)
local function onPartTouch(otherPart)
-- 如果對象正在擺動,請防止它再次擺動
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- 防止物體在被撿起後再次碰撞
partToScale.CanCollide = false
-- 創建一個擂臉並播放它
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- 在擬合完成時,摧毀對物件
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

顏色變更

零件可以透過減速與 Color3 值減速,以便與敵人或毀滅物體交換顏色,以取得他們被擊中或點擊的意見。


-- 在點擊時擷取對物件的顏色,並在 3 次點擊後毀滅它
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- 可自訂變數
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- 變更控制
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- 時間
Enum.EasingStyle.Exponential, -- 減輕風格
Enum.EasingDirection.InOut, -- 方向
0, -- RepeatCount (當零小於零時,會在definitely 重複)
true -- 反轉 (擺動將會在達到目標時反轉)
)
local function activateAction()
-- 如果對象正在擺動,請防止它再次擺動
if inTween == true then
return
end
-- 創建一個擂臉並播放它
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- 在兩次完成後,再讓對象再次可以點擊
tweenObject.Completed:Connect(function()
inTween = false
-- 增量擊中次數
hitCount += 1
-- 3 次擊中後,摧毀對物件
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

雖然此腳本使用了一個普通的零件來變更顏色,但也可以用於使用已應用的材質在 MeshPart 上變更顏色。 MeshPart 通常會從 Roblox Studio 直接匯入 3D 模型,而不是零件。

如果您使用完全紋理的網格零件,我們建議追蹤中:

  1. 使用特殊網格而不是 MeshPart。這是因為 MeshPart 的網格結構會覆蓋顏色被漆色的指指令碼。

  2. 將腳本變更,以修改特殊網格的顏色而不是顏色屬性。

項目範例

查看此非複製位空間的所有腳本範例。取得所有腳本的修改範例。

包括旋轉、縮放和變更顏色的螢幕。

>