Спавн гранаты и других проджектайлов на сервере, 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 |
|
| |