Roblox 中的本地脚本无法找到零件

问题描述 投票:0回答:1

我有一个

Tween
服务,可以在两个部分之间移动相机。然而,使用诸如
game.Workspace.cameras.spawnselection.default_camera
之类的直接调用来获取零件会失败。

这是我的代码:

--Local Script
local TweenService=game:GetService("TweenService")
local camera=game.Workspace.Camera
local cameras=game.Workspace:WaitForChild("cameras")
local play=script.Parent["main menu"]["main frame"].PlayButton


--Camera Locations
local starting_camera=cameras:WaitForChild("spawnselection"):WaitForChild("default camera")
local hillcrest_camera=cameras.spawnselection:WaitForChild(""):WaitForChild("Hillcrest")



local function createtween(end_:CFrame,time_:number)
    local cutscene=TweenService:Create(camera,TweenInfo.new(time_),{CFrame=end_})
    return cutscene
end

play.Activated:Connect(function()
    camera.CameraType=Enum.CameraType.Scriptable
    local selection
    local canswitch=true
    local cutscene=createtween(hillcrest_camera.CFrame,10)
    
    
    if canswitch then
        camera.CFrame=starting_camera.CFrame
        cutscene:Play()
        canswitch=false 
    end
    
    cutscene.Completed:Connect(function()
        canswitch=true
    end)
    
    
    
end)

我尝试使用“:WaitForChild”方法,但这显然不起作用,因为警告:

Infinite yield possible on 'Workspace.cameras.spawnselection:WaitForChild("default camera")
。我原以为这会在第一次尝试时起作用。然后,我运行一个服务器脚本来获取零件的
Parents
,这返回了正确的值,并且本地脚本运行了一次。然而,仅改变部件的透明度就破坏了
LocalScript
。这些对象在运行时显示在资源管理器中,我确信我正在访问正确的对象,因为我可以通过服务器脚本查看它们。本地脚本无法访问其自己的工作区副本吗?编辑:这是我的 地点。有问题的文件位于
StarterGUI
中,
LocalScripts
' 名称为
SpawnSelection.

lua scripting roblox
1个回答
0
投票

无限
spawnselection
产量

Workspace.cameras.spawnselection
工作区中不存在,脚本也不会创建它,因此屈服于它总是会导致无限的屈服,从而产生错误。

我删除了所有对

Workspace.cameras.spawnselection
的引用,并将其替换为
Workspace.cameras
,这是一个有效的位置。我选择这个是因为有些情况下
:WaitForChild()

更正后的版本是这样的,但仍然有错误:

local starting_camera=cameras:WaitForChild("default camera")
local hillcrest_camera=cameras:WaitForChild("Hillcrest")

无限
default camera
产量

下一个错误是

default camera
。工作区中没有名为
default camera
default_camera
的实例,也没有脚本创建它,因此,像以前一样,屈服于它会导致无限的屈服错误。

我注意到

start_camera
中有一个名为
Workspace.cameras
的部分,根据变量名称,这可能就是您想要使用的部分。

local starting_camera=cameras:WaitForChild("start_camera")

实例流式传输

我注意到 Instance Streaming 的另一个问题导致脚本使用的部分被流出来。它们是对此的两个修复。

  1. 将脚本添加到请求区域流以获取零件
  2. 确保玩家生成时距离部件足够近,位于
    StreamingMinRadius
    内,以便它们始终处于加载状态
  3. 通过将
    Workspace.StreamingEnabled
    设置为
    false
  4. 来禁用实例流

结论

您的脚本指定了不正确的零件位置,并且零件正在流出。这些导致了您将遇到的错误。

您最终的固定脚本将是这样的:

--Local Script
local TweenService=game:GetService("TweenService")
local camera=game.Workspace.Camera
local cameras=game.Workspace:WaitForChild("cameras")
local play=script.Parent["main menu"]["main frame"].PlayButton


--Camera Locations
local starting_camera=cameras:WaitForChild("start_camera")
local hillcrest_camera=cameras:WaitForChild("Hillcrest")



local function createtween(end_:CFrame,time_:number)
    local cutscene=TweenService:Create(camera,TweenInfo.new(time_),{CFrame=end_})
    return cutscene
end

play.Activated:Connect(function()
    camera.CameraType=Enum.CameraType.Scriptable
    local selection
    local canswitch=true
    local cutscene=createtween(hillcrest_camera.CFrame,10)
    
    
    if canswitch then
        camera.CFrame=starting_camera.CFrame
        cutscene:Play()
        canswitch=false 
    end
    
    cutscene.Completed:Connect(function()
        canswitch=true
    end)
    
    
    
end)

如果您仍然遇到问题,请务必参阅实例流部分,以确保您的部件已正确加载。

© www.soinside.com 2019 - 2024. All rights reserved.