【发布时间】:2018-12-16 14:23:00
【问题描述】:
我正在尝试让 NPC 看起来像标题屏幕的玩家。
我不需要关于如何制作 NPC 的教程;我知道如何让 NPC 看起来像某人。相反,我需要知道如何在脚本中克隆玩家的确切外观。我该怎么做?
【问题讨论】:
我正在尝试让 NPC 看起来像标题屏幕的玩家。
我不需要关于如何制作 NPC 的教程;我知道如何让 NPC 看起来像某人。相反,我需要知道如何在脚本中克隆玩家的确切外观。我该怎么做?
【问题讨论】:
首先,给定玩家的角色模型可以在Player 的.Character 属性中找到。 .Character 属性是Model,它与游戏中的大多数其他类型的对象一样,具有:Clone() 函数。您可以使用此功能制作玩家角色模型的完整副本。例如:
player = path.to.player.here
copy = player.Character:Clone()
copy.Parent = game.Workspace --put the clone into the physical environment
但是,如果您将其用于标题屏幕,就像您所说的那样:当玩家加入游戏时,他们的角色不会立即加载;相反,它需要几秒钟。如果您尝试玩游戏,然后注意实际放置到您的角色中需要多长时间,您可能会亲眼看到这一点。因此,如果您尝试在有人加入您的游戏时使用 .Character,您的代码将会中断。为了解决这个问题,您可以使用 ROBLOX 的一个特殊功能,称为 Events。
ROBLOX 具有称为Events 的特殊对象。 Events 有一个特殊的 :connect() 函数,它允许您将函数连接到这些事件。当您将函数连接到Event 时,该函数将在Event 发生时执行。
在你的情况下,你需要 两个 Events:
Player 加入游戏时使用.Character model 实际加载时首先,让我们谈谈Player 何时加入游戏。首先,我们需要获取Players 对象——一个跟踪所有玩家信息的对象。我们将使用game 的一个特殊函数,称为:GetService():
players = game:GetService("Players")
现在,我们将在Players 中使用一个特殊的Event,称为.PlayerAdded:
players = game:GetService("Players")
players.PlayerAdded:connect(function(player)
end)
请注意,实际添加的Player 将作为参数传递给参数player。现在,我们将使用Players 中的一个特殊的Event,称为CharacterAdded:
players = game:GetService("Players")
players.PlayerAdded:connect(function(player)
player.CharacterAdded:connect(function(character)
end
end)
注意Player 的Character 将作为参数方便地传递给参数character,因此我们甚至不需要使用Player.Character。现在,我们可以将之前的克隆代码放入到这段代码中:
players = game:GetService("Players")
players.PlayerAdded:connect(function(player)
player.CharacterAdded:connect(function(character)
local copy = character:Clone()
copy.Parent = game.Workspace --put the clone into the physical environment
--your code here
end
end)
就是这样!现在您可以将处理克隆的所有代码替换为--your code here。
最后一点是,这需要在常规 Script 中完成,不是 LocalScript。 Scripts 由 ROBLOX 服务器处理,而LocalScripts 由玩家电脑自己处理。由于服务器会处理添加到游戏中的玩家,因此您必须使用 Script。
希望这会有所帮助!
【讨论】:
我会假设你想让一个 NPC 看起来像一个玩家?这可能需要一些工作,但您必须在game.Workspace 中找到您希望 NPC 看起来像的播放器,然后您可以克隆播放器并将 npc 的部分插入其中,或者您可以只插入将玩家克隆到 npc 中。
据我所知,没有在脚本中执行此操作的方法。
【讨论】: