Почему я получаю разные значения при попытке получить BrickColor.Name части из разных скриптов в roblox - PullRequest
0 голосов
/ 26 мая 2020

Я пишу простую игру в Roblox.

Один скрипт в плеере меняет цвет всех серых блоков, которых он касается. Другой скрипт в части заставляет мигать. Эта часть должна перестать мигать, когда к ней прикасаются, а затем ее цвет меняется.

Когда я касаюсь блока, меняются визуализированный цвет и имя цвета в скрипте проигрывателя, но не имя цвета в скрипте части. Я добавил несколько распечаток, чтобы понять, что происходит. Я знаю, что это можно решить с помощью события. Но почему разные значения?

Этот сценарий находится в объекте StarterCharacterScripts:

print(":)")

local originalColor = BrickColor.new(0.639216, 0.635294, 0.647059)

local player = game.Players.LocalPlayer

local human = player.Character.Humanoid

print("Player logged:  " .. human.DisplayName)

human.Touched:Connect(function(hit,limb)
    if hit.BrickColor.Name == originalColor.Name then
        hit.Color = player.TeamColor.Color
    end
end)

while true do
        print("From human: " .. workspace.Test.BrickColor.Name)
        wait(3)
end

Этот другой сценарий находится в объекте:

local greyPart=script.Parent
local myColor = greyPart.Color




print(greyPart.Name)
print(script.Parent.Name)

while myColor == script.Parent.Color do
    greyPart.Transparency = 1
    wait(1)
    greyPart.Transparency = 0
    wait(1)

    print("From part: " .. workspace.Test.BrickColor.Name)
end

Результат, который я получаю до касания примерно так:

From human: Medium stone grey
From part: Medium stone grey (x2)

А после касания примерно так:

  From human: Really red
  From part: Medium stone grey (x2)

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Я знаю, что это можно решить с помощью события. Но почему разные значения?

Использование RemoteEvent является решением этой проблемы, поскольку вы пытаетесь выполнить изменение на стороне сервера с помощью клиента. В модели клиент-сервер Roblox сервер является авторитетным и является единственным сервером, который может вносить изменения в объекты в игровом мире. Когда клиент вносит изменения в способ, которым вы выполняете свой сценарий, это изменение видно с точки зрения локального клиента; однако изменение не копируется на других игроков. Это объясняет вывод ваших скриптов: на вашем экране BrickColor блока изменился, но с точки зрения другого игрока он все равно будет серым.

A RemoteEvent, а также RemoteFunction, может отправлять сигналы от клиента, которые затем принимаются сервером; эти сигналы могут указывать серверу на необходимость изменения игрового мира, который будут видеть все клиенты. В вашем случае ваш клиентский скрипт, который определяет, к каким серым частям прикасается игрок, отправит эту информацию на сервер через RemoteEvent и скажет ему изменить BrickColor.

Roblox справочная страница для класса RemoteEvent говорит следующее:

A RemoteEvent предназначен для одностороннего сообщения между сервером и клиентами, позволяя Scripts вызывать код в LocalScripts и наоборот. Это сообщение может быть направлено от одного клиента к серверу, с сервера конкретному клиенту или с сервера всем клиентам.

В вашем случае вы будете направлять сообщение от одного клиента на сервер, вызывая функцию, содержащуюся в Script на стороне сервера, из LocalScript.

См. справочную страницу RemoteEvent здесь для примеров и более подробной информации.

0 голосов
/ 26 мая 2020

Из соображений безопасности внесение изменений в рабочую область с помощью LocalScripts применяет эти изменения только к проигрывателю, которому принадлежит LocalScript.

Вы можете увидеть это в действии, если сыграете в игру на вкладке «Тест» в Studio и запустите ее с 3 игроками и сервером. Я сделал простой LocalScript в StarterCharacterScripts, который меняет цвет кирпича на случайный. Вот как это выглядит на всех разных клиентах и ​​на сервере:

Сервер:

Server side view of grey brick and 3 players standing around it.

Игрок 1:

View from Player 1's perspective. The brick is red.

Игрок 2:

View from Player 2's perspective. The brick is white

Игрок 3:

View from Player 3's perspective. The brick is blue

Если вы хотите, чтобы изменение было воспроизведено для всех игроков , это должно происходить в скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...