为什么我一直出现这个错误,当函数运行时我尝试让角色不可见?

local camera = workspace.CurrentCamera
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local startergui = game:GetService("StarterGui")
local char = Players.LocalPlayer.Character

local model = workspace.OceanVillagedr201["Wine Cellar"].WineDigitalkeypad
local screen = model.screen

local replicated_storage = game:GetService("ReplicatedStorage")
local CheckCode = Instance.new("RemoteEvent")
CheckCode.Name = "CheckWineCellarCodeEvent"
CheckCode.Parent = replicated_storage

local function Entercode(player)
    Players.LocalPlayer.Character.Humanoid.RootPart.Anchored = true
    for _,p in pairs(char:GetChildren()) do
         p.Transparency = 1
    end
    game.StarterGui = replicated_storage.EnterWineCellarCode
end
screen.ProximityPrompt.Triggered:Connect(function(player)
   Entercode()
end)

我尝试创建一个函数,在接近提示被触发时触发。其中这个 Entercode() 函数的一部分是将玩家模型的透明度从0变为1,并移除角色的移动能力。

    local function Entercode(player)
    print("went")
    Players.LocalPlayer.Character.Humanoid.RootPart.Anchored = true
    for _,p in pairs(char:GetChildren()) do
         p.Transparency = 1
    end

但我在这个部分遇到了困难。它一直告诉我" attempt to index nil",在任何与尝试引用角色模型相关的地方。(如 FFC(),GetChildren(),Player.LocalPlayer.Character 等)。我正在使用本地脚本,因为我计划创建一个远程函数,用于 EnterCode() 的结果。

原文链接 https://stackoverflow.com/questions/70060383

点赞
stackoverflow用户17060604
stackoverflow用户17060604

我认为你的问题在于,角色要么没有生成在制作char的时候,要么就是一个旧的角色(玩家重新生成并且新角色已经生成)。一个快速修复方法是在Entercode内部重新声明char

local function Entercode()
    char = player.Character
    char.Humanoid.RootPart.Anchored = true
    for _, p in pairs(char:GetChildren()) do
        if p:IsA("BasePart") then
            p.Transparency = 1
        end
    end
    replicated_storage.EnterWineCellarCode.Parent = player.PlayerGui
end

还有其他一些错误,我做了一些更改:

local function Entercode()

在原始代码中,**player是参数,但未作为参数发送**。很好,你在代码开头设置了玩家变量。

if p:IsA("BasePart") then
    p.Transparency = 1
end

在原始代码中,你没有检查p是否是一个部件。

replicated_storage.EnterWineCellarCode.Parent = player.PlayerGui

在原始代码中,你试图将StarterGui设置为EnterWineCellarCode我不知道你的意图是什么,但我假设你的意思是EnterWineCellarCode设为PlayerGui的子类。

最后,你可能想使用GetDescendants()而不是GetChildren()。为了更好地理解角色如何工作,我建议你阅读相关的维基条目

2021-11-22 04:50:59