如果玩家 startergui 中的值为真,我想在玩家触摸时打开一扇门

Posted

技术标签:

【中文标题】如果玩家 startergui 中的值为真,我想在玩家触摸时打开一扇门【英文标题】:coI want to open a door on player touch if a Value in the players startergui is true 【发布时间】:2020-11-27 08:35:08 【问题描述】:

当玩家触摸门前或门后的一个块时,我希望它检查玩家启动器 gui 中的值是否为真,如果它打开门,我可以在单击一个块时执行此操作,但不是当我尝试时它触及的一部分。 所以我尝试使用我将用于可点击的砖块并将其更改为触摸功能,但这不起作用。 代码:

local db= false
local open = script.Parent.Open
local ind = script.Parent.Door1

script.Parent.Trigger.Touched:connect(function(player)
    if db == false then
        db = true
    if player:WaitForChild("PlayerGui").keyCard.Key.Value == true then
        if open.Value == false then
            script.Parent.Sound:Play()
            local f = script.Parent.Door1.PrimaryPart.CFrame*CFrame.Angles(0,math.rad(90),0)
            local f2 = script.Parent.Door2.PrimaryPart.CFrame*CFrame.Angles(0,-math.rad(90),0)
            for i = 0,1,0.1 do
                local cfm = script.Parent.Door1.PrimaryPart.CFrame:lerp(f,i)
                local cfm2 = script.Parent.Door2.PrimaryPart.CFrame:lerp(f2,i)
                script.Parent.Door1:SetPrimaryPartCFrame(cfm)
                script.Parent.Door2:SetPrimaryPartCFrame(cfm2)
                wait()
            end
            open.Value = true
            wait(1) -- how long the door will stay open
            local f3 = script.Parent.Door1.PrimaryPart.CFrame*CFrame.Angles(0,-math.rad(90),0)
            local f4 = script.Parent.Door2.PrimaryPart.CFrame*CFrame.Angles(0,math.rad(90),0)
            for i = 0,1,0.1 do
                local cfm = script.Parent.Door1.PrimaryPart.CFrame:lerp(f3,i)
                local cfm2 = script.Parent.Door2.PrimaryPart.CFrame:lerp(f4,i)
                script.Parent.Door1:SetPrimaryPartCFrame(cfm)
                script.Parent.Door2:SetPrimaryPartCFrame(cfm2)
                wait()
            end
            open.Value = false
        end
    else
        print("Negative")
    end
    db=false
    end

结束)

script.Parent.Trigger2.Touched:connect(function(player)
    if db == false then
    db = true
if player:WaitForChild("PlayerGui").keyCard.Key.Value == true then
        if open.Value == false then
            script.Parent.Sound:Play()
            local f = script.Parent.Door1.PrimaryPart.CFrame*CFrame.Angles(0,-math.rad(90),0)
            local f2 = script.Parent.Door2.PrimaryPart.CFrame*CFrame.Angles(0,math.rad(90),0)
            for i = 0,1,0.1 do
                local cfm = script.Parent.Door1.PrimaryPart.CFrame:lerp(f,i)
                local cfm2 = script.Parent.Door2.PrimaryPart.CFrame:lerp(f2,i)
                script.Parent.Door1:SetPrimaryPartCFrame(cfm)
                script.Parent.Door2:SetPrimaryPartCFrame(cfm2)
                wait()
            end
            open.Value = true
            wait(1) -- how long the door will stay open
            local f3 = script.Parent.Door1.PrimaryPart.CFrame*CFrame.Angles(0,math.rad(90),0)
            local f4 = script.Parent.Door2.PrimaryPart.CFrame*CFrame.Angles(0,-math.rad(90),0)
            for i = 0,1,0.1 do
                local cfm = script.Parent.Door1.PrimaryPart.CFrame:lerp(f3,i)
                local cfm2 = script.Parent.Door2.PrimaryPart.CFrame:lerp(f4,i)
                script.Parent.Door1:SetPrimaryPartCFrame(cfm)
                script.Parent.Door2:SetPrimaryPartCFrame(cfm2)
                wait()
            end
            open.Value = false
        end
    else
        print("Negative")
    end
    db=false
end
end)

【问题讨论】:

【参考方案1】:

触摸不会给你播放器。更确切地说是什么触及了障碍物,如果是玩家,则指触碰该部分的玩家的部分。

建议您检查是否是玩家触摸:

touchedPart.Parent:FindFirstChild("Humanoid")

然后就可以使用播放器服务找到播放器了:

玩家:GetPlayerFromCharacter(touchedPart.Parent)

【讨论】:

以上是关于如果玩家 startergui 中的值为真,我想在玩家触摸时打开一扇门的主要内容,如果未能解决你的问题,请参考以下文章

如何查找自多少天以来列的值为True?

如果文本框的值为 0,则 jQuery Checkbox 为真,但如果文本框为空白,则为假 [重复]

如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查

求解析呀!python中,表达式1,2,3<3,4,5的值为

and or

条件分支和循环