玩家可以获得是否与动画有关的反馈。这可以是树摇动时发生的树摇晃动,或者玩家喂食时宠物欢喜地弹出。在这种情况下,我们会显示玩家如何在玩家点击时移动按钮。
与动画渐变
对对象的动画有两种方法:使用 tweens 。一个 tween ,也就是在-之间,是过一定时间变更起始值到最终值的过程。渐变可以用来改变位置、颜色或旋转等属性。
项目设置
对于此项目,调整因子将一个对象从起始位置移动到目标位置。
确定您要动画的部分。在下面的例子中,1 是按钮,2 是墙。
在移动工具动的部分中,添加一个名为 ClickDetector 的点击检测器和一个名为 TweenMove 的脚本。 不要重命名 ClickDetector。
打开 TweenMove 脚本。然后,复制并粘贴以下脚本。
-- 根据选定的轴对零件进行 T 形逆时针旋转-- 按钮有一个开/关状态,可以将零件向前或向后移动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-- 在 tween 完成后,按钮再次可用tweenButton.Completed:Connect(function()inTween = false-- 反向按钮状态buttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)播放测试并单击对象。 在测试时,您可能会注意到对象移动错误的方向或距离。 您可以在下一节中自定义。
调整移动�ween
添加了脚本后,您可以根据您的游戏需要自定义它。 按钮可以调整为前进、向后退出、向返回或向下移动。
改变位置
记住,青少年从起始值变为目标值。此脚本使用 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 补间动画动的以下变量。大写名称如 TWEEN_TIME 用于指定此脚本的特定修改。
尝试改变以下变量的值:
- 行 11 - TWEEN_TIME : 渐变时间(秒)。
- 行 12 - TWEEN_MOVE_DISTANCE : 按钮移动的距离。
调整其他属性
大多数具有数字数据类型的属性都可以调整。这部分包括一些常见属性,例如旋转,可以用于让更多玩家回馈您的游戏。请注意,您也可以调整多个属性。
了解有关完整列表的属性,请参阅TweenService API 页面。
旋转
对于旋转,请结合使用 Vector3 和 CFrames 而不是只使用它们。 旋转 tweens 可以让创建物体时,宠物或硬币扭动,当它们被捡起时。
在下一个脚本示例中,该生物的位置和旋转都是随机设置,当单击时显示它是多么开心。
下面的代码将根据在 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, -- 重复计数 (当零小于零时,叠加会在无限循环)
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)
缩放
改变游戏中的对象大小也可以显示玩家与其交互。 例实例,捕捉生命包或宝石等拾取物品时,可以缩小。 要将零件缩放,请将目标调整为您所需的大小的新 Vector3 。
-- 当零件触摸时,调整其尺寸,然后摧毁它
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, -- 重复计数 (当零小于零时,叠加会在无限循环)
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)
虽然此脚本使用一个普通的零件来改变颜色,但也可以用于在 MeshParts 上使用已应用的材质。 MeshParts 通常导入 3D 模型,而不是零件直接在 Roblox Studio 中建造。
如果您使用完全纹理的 MeshPart 工作,我们建议关注中/正在关注:
使用 SpecialMesh 而不是 MeshPart 。这是因为 MeshPart 的材质会覆盖脚本所涂色的颜色。
将脚本更改为修改特殊网格的颜色而不是颜色属性。
项目示例
查看此非复制锁定场景中的所有脚本示例。获得所有脚本的修改权限。
包括用于旋转、缩放和颜色变更的脚本。 > |