Понедельник, 11 Ноября 2024, 03:10

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Спавн гранаты и других проджектайлов на сервере, UNET
mildgravy0Дата: Вторник, 08 Октября 2019, 13:58 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте!
У меня есть проблема,я делаю фпс на UNET, на HLAPI, в какой-то момент я столкнулся с тем,что мне нужно добавить в игру гранату. Сейчас я спавню гранату через [Command] NetworServer.Spawn(). Однако здесь спавн гранаты зависит от времени доставки команды спавна до сервера, и выглядит это просто жутко.Вылет гранаты осуществляется с небольшой,но очень неприятной задержкой.
Я зашел на англоязычный форум,где увидел следующую последовательность действий:
https://forum.unity.com/threads/spaw...hority.445654/
Я просто не понимаю как это должно выглядеть в коде. Есть ли у кого нибудь представления как это должно выглядеть?
InsaneSystemsДата: Вторник, 08 Октября 2019, 17:05 | Сообщение # 2
участник
Сейчас нет на сайте
mildgravy0, ссылка не работает. Можете попробовать сделать пул гранат, который создаётся заранее, переписать логику поведения гранаты под новые условия и вместо Spawn просто активировать уже существующий сетевой объект. Возможно, это сократит задержки.
mildgravy0Дата: Вторник, 08 Октября 2019, 20:38 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата InsaneSystems ()
ссылка не работает.
https://forum.unity.com/threads.....445654
Я вот только что сделал пул. Но это так же имеет ряд ошибок. К примеру задержки все равно есть,чуть меньше,но есть. На мой взгляд,та последовательность действий,что я скинул в ссылке, является наиболее приемлемым для меня вариантом.Просто мне бы хоть пример такого кода.

Добавлено (09 Октября 2019, 03:18)
---------------------------------------------
Вообщем-то,я решил свою проблему. Я сделал через пул.
Вот что я сделал:
1. Воспользовался этой ссылкой,там все подробно описано для того,чтобы сделать пулhttps://docs.huihoo.com/unity....g.html
2. Изменил в исходном коде NetworkServer.Spawn(); на NetworkServer.SpawnWithClientAuthority()
3. Вот мой код,кому нужно

Код
[Client]
    public void Throw()
    {
        if (!was)
        {
            CmdThrow();
            was = true;
        }
    }
    [Command]
    public void CmdThrow()
    {
        var grenade = spawnManager.GetFromPool(throwpoint.transform.position + throwpoint.transform.forward);
        NetworkServer.SpawnWithClientAuthority(grenade, spawnManager.assetId,connectionToClient);
        grenade.GetComponent<GrenadeTimer>().Rpc_AddForce(throwpoint.transform.forward);
        StartCoroutine(Destroy(grenade, 3.8f));
    }

4.Заметьте,что силу гранате я даю через [Command]/[ClientRpc] и обязательно эта строчка после строчки
Код
NetworkServer.SpawnWithClientAuthority(grenade, spawnManager.assetId,connectionToClient);
я не знаю почему сила гранате не дается иначе,честно не знаю
5. Не забудьте добавить Network Transform на префаб, и добавить его в Registered Spawnable Prefabs в вашем Network manager'е
Надеюсь,кому-то,кто столкнулся с такой же проблемой,найдет решение здесь,удачи!
InsaneSystemsДата: Среда, 09 Октября 2019, 12:11 | Сообщение # 4
участник
Сейчас нет на сайте
mildgravy0, в примере кода не совсем тот пул, который я имел в виду. Я имел в виду, что все объекты на момент старта игры уже должны быть заспавнены как сетевые объекты, а в нужный момент лишь включаться в нужной точке с нужными параметрами. В текущем коде всё равно присутствует NetworkServer.Spawn (только в другом виде), что всё равно так же замедляет появление сетевого объекта, хотя является ли это основной проблемой, сказать не смогу.
mildgravy0Дата: Среда, 09 Октября 2019, 22:02 | Сообщение # 5
был не раз
Сейчас нет на сайте
InsaneSystems,обязательно попробую так,как вы указали. Спасибо!

Сообщение отредактировал mildgravy0 - Среда, 09 Октября 2019, 22:03
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг