如何使 Workspace 中的零件可见并开始移动?

Posted

技术标签:

【中文标题】如何使 Workspace 中的零件可见并开始移动?【英文标题】:How do I make a part, which is in Workspace, visible and start moving? 【发布时间】:2021-12-20 19:08:56 【问题描述】:

我正在尝试使用的按钮位于 StarterGUI 中。不知道有没有帮助。脚本编写相当新,但是看到另一篇类似的帖子并使用了该代码。这是我在 LocalScript 中的代码:

local MarketplaceService = game:GetService("MarketplaceService")
local player = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PurchaseEvent = ReplicatedStorage.PurchaseEvent
local productID = 1218445531

  
script.Parent.MouseButton1Click:Connect(function()
    
    PurchaseEvent:FireServer(productID)
end)

if MarketplaceService:PlayerOwnsAsset(1218445531) then
    --Here is where the thing is supposed to happen
end

【问题讨论】:

【参考方案1】:

首先,您需要获得对零件的引用,一种方法是使用 local part = workspace:WaitForChild("PartName") 之类的东西

为了使其可见,您需要将透明度设置为 0。如果您不希望玩家穿过该部分,您可能还需要使用 CanColide 打开碰撞。还建议锚定部件以防止其掉落。

part.Transparency = 0; -- makes it visible
part.CanColide = true; -- makes sure other objects cant go through this
part.Anchored = true; -- prevents the object from falling

有很多方法可以使零件移动。如果部件应该从一个地方到另一个地方,并且只有一个目的地,则 Tween 可能会很有用(请参阅TweenService)。

另一种方法是使用 Heartbeat 循环来更改每帧的位置(请参阅RunService.Heartbeat)。例如,

local keepMoving = true; -- change this to false to stop moving
local RunService = game:GetService("RunService");
local direction = Vector3.new(0, 1, 0); -- change this to anything you want
while (keepMoving) do
    local timePassed = RunService.Heartbeat:Wait(); -- wait one frame, roughly 0.016 of a second.
    part.Position += direction * timePassed; -- move the part in the direction 
end

这将使part 每秒向上移动 1 个螺柱。

【讨论】:

将方向更改为 Vector3.new(0, 0, 5) 将使其每秒 5 个螺柱,并且应该与每秒向 Z 轴添加 5 个相同。答案中的示例与每秒向 Y 轴加 1 相同,这会将其向上移动。 现在可以了!这对我很有帮助! 既然它有效,你能把它标记为接受的答案吗?

以上是关于如何使 Workspace 中的零件可见并开始移动?的主要内容,如果未能解决你的问题,请参考以下文章

将插入符号移动到文本输入字段的末尾并使结尾可见

9.0异常处理

如何使谷歌字体在移动设备上可见?

我如何 CFrame 零件?

如何使具有唯一 ID 的 URL 美观并提高搜索结果的可见性

如何使对象在特定关键帧处不可见而不在 Blender (2.59) 中移动它?