Как сделать элемент экрана Gui видимым для всех игроков при каждом событии? - PullRequest
0 голосов
/ 31 марта 2020

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

Один из зомби в каждой группе имеет скрипт, который запускает событие, которое помещается (клонируется само) в ReplicatedStorage, а затем событие удаляется через 3 секунды, чтобы избежать дублирования.

У меня всплывает Gui, когда он обнаруживает присутствие события в ReplicatedStorage всякий раз, когда в рабочей области появляется новая группа зомби. Я делаю это, помещая локальный скрипт и Gui в Starter Gui. Это простой Gui с кадром, который не установлен видимым при запуске игры, потому что я хочу, чтобы игроки видели Gui только там, где появляется новая волна.

Пока все хорошо, все работает как шарм (появляется первая группа, запускает событие, а затем появляется всплывающее сообщение, а затем исчезает через 3 секунды) .. да. Все хорошо ... за исключением одного ... Gui появится только один раз. Мне нужно, чтобы Gui появилось для всех игроков, и каждый раз, когда новая волна появляется и затем удаляется через 3 секунды.

Надеюсь, я правильно объяснила, что мне нужно. Итак, вот код локального сценария, который я поместил в Starter Gui. Я потратил несколько дней, пытаясь решить эту проблему.

local Event = game.ReplicatedStorage:WaitForChild("ZombieEvent")

--

player = game.Players.LocalPlayer

player.PlayerGui.ZombieGui.Frame.Visible = true
wait(3)
player.PlayerGui.ZombieGui.Frame.Visible = false


--

while Event do
    wait(.05)   
end

спасибо!

1 Ответ

0 голосов
/ 31 марта 2020

Так работает ваш код прямо сейчас:

  1. Дождитесь существования объекта в ReplicatedStorage с именем ZombieEvent. (Ваш сценарий zomb ie клонируется в объекте)
  2. Показать зомба ieGui в течение 3 секунд, а затем скрыть его снова
  3. Пока ZombieEvent продолжает существовать, подождите. (Этот l oop в конечном итоге нарушается другими сценариями, удаляющими ZombieEvent)

Затем сценарий заканчивается, и на этом его конец, нет ничего, что могло бы сказать коду, чтобы он начинался заново с начало или l oop назад как-то.

Если вы хотите, чтобы это работало для вашего раундового геймплея, есть несколько способов, которыми вы можете это исправить, но вот что я бы порекомендовал:

  1. Храните RemoteEvent в ReplicatedStorage с именем ZombieEvent, не беспокойтесь о его клонировании или удалении каждый раунд.
  2. Подключите функцию к сигналу OnClientEvent RemoteEvent в вашем LocalScript.
  3. Пусть специальный зомб ie запустит сигнал с помощью функции FireAllClients .

Вот как это будет выглядеть:

-- Local Script
player = game.Players.LocalPlayer

local Event = game.ReplicatedStorage:FindFirstChild("ZombieEvent")
Event.OnClientEvent:Connect(function()
    player.PlayerGui.ZombieGui.Frame.Visible = true
    wait(3)
    player.PlayerGui.ZombieGui.Frame.Visible = false
end)

Затем в вашем скрипте Zomb ie вы бы сработали так:

-- tell everyone to show the screen
local Event = game.ReplicatedStorage:FindFirstChild("ZombieEvent")
Event:FireAllClients()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...