玩家可以獲得是否或否是否與動畫執行任何操作的意見。這可以是樹樹搖動,或是寵物歡呼,或是給寵物餵食時,它們會跳躍開心。在這個情況下,我們會顯示扮演按鈕,當玩家點擊它時會移動。
使用動畫暢定
一種使用對象的動畫方式是使用 tweens。 一個 tween ,簡稱在-之間,是過一定時間變更起始值和結束值的過程。 暢和可以使用位置、顏色或旋轉等屬性的改變。
項目設定
對於此項目,擬人將一個物件從起始位置移動到目標位置。
確定你要動畫的零件。在下面的範例中,1 是按鈕,2 是牆。
在移動工具動的零件中,添加一個名為 TweenMove 的指令碼。 不要重命名 ClickDetector 。
開啟 TweenMove 指指令碼。然後,複製並貼入下面的指令。
-- 以選定的軸回來和去來調整零件的方向-- 按鈕有開/關狀態,可以將零件移動為前方或後方local TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- 決定按鈕方向;-1表示它會向內壓,1表示它會向外彈出local inTween = false-- 可自訂變數local TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- 變更控制local buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- 時間Enum.EasingStyle.Quad, -- 減輕風格Enum.EasingDirection.Out -- 方向)local function buttonPress()-- 如果按鈕是擺動的,請防止它再次使用if inTween == true thenreturnend-- 計算新按鈕位置的 CFramelocal 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 *= -1end)endclickDetector.MouseClick:Connect(buttonPress)播放測試並單擊對物件。在測試期間,您可能會發現對象移動方向或距離錯誤。您可以在下一個部分中自訂。
調整移動擺動
添加了腳本後,您可以根據您的遊戲需要自訂它。按鈕可以擺動來在前方和返回方,或上下移動。
變更位置
記住,青少年從開始值變成目標值。此腳本使用 CFrames 來移動按鈕在其當前位置相對於其位置。該方向是由 第28 行 的腳指令碼控制。
在那條線上,使用 X、Y 和 Z 坐標來建立新的 CFrame。在這個範例中,按鈕移動相對於其 Y 軸。
-- 計算新按鈕位置的 CFramelocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
要將按鈕移動在 不同 的方向,請將其中一個願望的坐標與線: TWEEN_MOVE_DISTANCE * buttonState 設置所有其他坐標為 0。
舉例來說,這條線將相對於其 X 軸移動。
-- 計算新按鈕位置的 CFramelocal 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 模型,而不是零件。
如果您使用完全紋理的網格零件,我們建議追蹤中:
使用特殊網格而不是 MeshPart。這是因為 MeshPart 的網格結構會覆蓋顏色被漆色的指指令碼。
將腳本變更,以修改特殊網格的顏色而不是顏色屬性。
項目範例
查看此非複製位空間的所有腳本範例。取得所有腳本的修改範例。
包括旋轉、縮放和變更顏色的螢幕。 > |