【问题标题】:Lua Tween Part InfoLua Tween 部分信息
【发布时间】:2021-05-24 01:35:48
【问题描述】:

我正在制作一个使用 Humanoid.Seated 事件提供的数据的补间,我想让相机在坐下时到达终点,但是,在他们坐起后移回。我感觉问题出在零件信息上,但我可能是错的。

这是代码:

发送者/事件处理程序:

local camPart = script.Parent
local camEvent = game.ReplicatedStorage.CamEvent
local blueSeat = script.Parent.Parent.BlueSeat.Seat --the correct seat person should be in

local bluePlayerName = script.Parent.Parent.Buttons.BlueEnter.PlayerName --the supposed name of person

bluePlayerName:GetPropertyChangedSignal("Value"):Connect(function ()
    if (bluePlayerName ~= "") then
        
        local char = game.Workspace:FindFirstChild(bluePlayerName.Value, true)
        local player = game.Players:GetPlayerFromCharacter(char)
        
        char.Humanoid.Seated:Connect(function (isSeated, seat)
            
            if (seat.Name == blueSeat.Name) then
            
                camEvent:FireClient(player, camPart, isSeated) --go to tween handler
            end
        end)
    end
end)

接收器/补间处理程序:

local TweenService = game:GetService("TweenService")
local cam = game.Workspace.Camera
local partData
local tween
local length = 2

local tweenData = TweenInfo.new(
    length,
    Enum.EasingStyle.Sine,
    Enum.EasingDirection.Out,
    0,
    true,
    0
)

script.Parent.OnClientEvent:Connect(function (camPart, isSeated) --receiver
    
    partData = {
        CFrame = camPart.CFrame
    }
    
    tween = TweenService:Create(cam, tweenData, partData)
    
    if (isSeated == true) then
    
        cam.CameraType = Enum.CameraType.Scriptable --remove control
        tween:Play()
        
        wait(length / 2)
        tween:Pause() --stop at end point
        
    elseif (isSeated == false) then

        tween:Play() --go back/finish
        wait(length / 2)
        
        cam.CameraType = Enum.CameraType.Custom --give control back
    end
end)

【问题讨论】:

  • Heyo Killerderp7,你已经说了你想要做什么,但你还没有说什么是行不通的。它根本不是补间吗?补间到坐着的相机视图中是否正常工作,但完成后它不会返回?
  • 连接到补间脚本的事件没有被调用*

标签: if-statement events lua roblox tween


【解决方案1】:

RemoteEvent 根本没有触发的事实应该表明服务器脚本中没有连接到 Humanoid.Seated 事件。从您的代码示例中不清楚什么会首先触发代码,但看起来您只是在寻找玩家角色何时加载到工作区中。

我建议使用Player.CharacterAddedPlayer.CharacterAppearanceLoaded 事件作为访问玩家角色和类人机器人的方法。您仍然可以使用您的 UI 代码作为是否进行补间的触发器,但这可能更容易。

-- Server Script
local camPart = script.Parent
local camEvent = game.ReplicatedStorage.CamEvent
local thing = script.Parent.Parent
local blueSeat = thing.BlueSeat.Seat --the correct seat person should be in
local bluePlayerName = thing.Buttons.BlueEnter.PlayerName --the supposed name of person

-- listen for when a player sits in a seat
game.Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(character)
        character.Humanoid.Seated:Connect(function(isSeated, seat)
            print("Player is seated?", isSeated)
            if not isSeated then
               -- tell the client to zoom out
               camEvent:FireClient(player, camPart, isSeated)
            else

                -- decide whether to tween the camera
                local isApprovedSeat = seat.Name == blueSeat.Name
                local isNameSet = bluePlayerName.Value ~= ""
                local shouldTweenCamera = isApprovedSeat and isNameSet
                if shouldTweenCamera then
                    camEvent:FireClient(player, camPart, isSeated)
                else
                    local message = table.concat({
                        "Camera not tweening because: ",
                        "Player has claimed this seat? " .. tostring(hasClaimedSeat),
                        "This is the approved seat? " .. tostring(isApprovedSeat)
                    }, "\n")
                    warn(messsage)
                end
            end
        end)
    end)
end)

此外,侦听此 RemoteEvent 的 LocalScript 似乎位于 ReplicatedStorage。检查the documentation on LocalScripts,它们只在少数几个位置开火,不幸的是,ReplicatedStorage 不是其中之一。尝试将 LocalScript 移动到 StarterCharacterScripts 并更新 RemoteEvent 的路径。

local camEvent = game.ReplicatedStorage.CamEvent
camEvent.OnClientEvent:Connect(function (camPart, isSeated) --receiver

【讨论】:

  • 我查看了代码,我知道事件正在被传递(我在事件调用之后放置了一个打印语句并触发了它),我认为问题出在接收器中,但我不确定出了什么问题
  • 噢噢噢,我的错。我忽略了 LocalScript 的位置。我会更新我的答案。
  • 感谢您的帮助,但我在检查通知之前才发现这个问题
猜你喜欢
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2011-01-09
相关资源
最近更新 更多