Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
12 / 11 / 8
Регистрация: 04.12.2013
Сообщений: 323
1

Ники в лобби

06.09.2017, 23:21. Просмотров 1219. Ответов 4
Метки нет (Все метки)

Как можно вывести ники в лобби, пытался сделать через OnSerializeNetworkView но узнал что оно не синхронизирует тип String... отстой. Как быть?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2017, 23:21
Ответы с готовыми решениями:

Dota GC создание лобби
Здравствуйте! Документации по этой библиотеке я не нашел, может здесь есть те кто сталкивался с ней...

Delphi - Socket (Лобби)
Здравствуйте! Такая ситуация, мне нужно всех пользователей распихать в беседу по три человека....

bat-ники
Как запустить обновление в формате exe, который нужно запускать через FAR или Norton нажав...

Крутые ники
Вот меня раздражают всякие люди, которые берут себе ники типа богтьмы, или супер-чета-там... и так...

4
12 / 11 / 8
Регистрация: 04.12.2013
Сообщений: 323
08.09.2017, 14:45  [ТС] 2
Начал делать через RPC сообщения но есть проблемка:

Когда чел присоединяется он отправляет серверу RPC свой ник, и сервер приписывает его ник к своему листу игроков:
C#
1
2
3
4
5
6
7
8
void OnConnectedToServer() {
    NetView.RPC("GiveNick", RPCMode.Server, Nick.text);
}
 
[RPC]
void GiveNick(string nick) {
    s_PlayersList.text += "\n" + nick;
}
А когда к серверу присоединяется кто-то, то сервер отправляет всем игрокам RPC - свой лист игроков:
C#
1
2
3
4
5
6
7
void OnPlayerConnected() {
    NetView.RPC("GivePlayersList", RPCMode.All, s_PlayersList.text);
}
[RPC]
void GivePlayersList(string PlayersList) {
    j_PlayersList.text = PlayersList;
}
так вот, когда игрок присоединяется, то сперва выполняется Серверная часть OnPlayerConnected а потом клиентская OnConnectedToServer... Как можно изменить приоритет или изменить логику? Хочется без куратин

ПОМОГИТЕ! ПОЖАЛУЙСТА! БУДУ ООООЧЕНЬ БЛАГОДАРЕН
0
0 / 0 / 2
Регистрация: 07.12.2012
Сообщений: 130
08.12.2017, 14:59 3
Привет, ты как-то решил эту проблему?
0
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 555
08.12.2017, 20:37 4
Лучший ответ Сообщение было отмечено Staz Lincord как решение

Решение

в OnPlayerConnected ничего не делать.в OnConnectedToServer - отправлять ник. сервер в ответ рассылает всем список ников.
0
12 / 11 / 8
Регистрация: 04.12.2013
Сообщений: 323
03.03.2018, 13:04  [ТС] 5
Давно не заходил на форум, извиняюсь за поздний ответ.
Если кому нужно решение этой задачи то вот:

В этом скрипте есть список не только nick игроков, Но и их id подключения.
И ещё в этом скрипте сервер выступает в качестве игрока.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Лист <Ключ: ID подключения игроков, Значение: Никнейм игроков> PlayersList
public Dictionary<int, string> PlayersList = new Dictionary<int, string>();
 
void OnServerInitialized() {// При запуске сервера добавляем себя же в список
    MyIdConnection = Convert.ToInt32(Network.player.ToString());// Узнаем свой id
    SendAndRequestData(MyIdConnection, MyNick);// Отправляет серверу свой ID и NICK
}
 
void OnConnectedToServer() {// При подключении отправляем id и nick серверу
    MyIdConnection = Convert.ToInt32(Network.player.ToString());// Узнаем свой id
    NetView.RPC("SendAndRequestData", RPCMode.Server, MyIdConnection, MyNick);// Отправляет серверу свой ID и NICK
}
 
void OnPlayerDisconnected(NetworkPlayer pl) {// Это выполняется на сервере. При отключении игрока удаляем его из списка (параметр NetworkPlayer pl содержит id отключившегося игрока, вроде только отсюда можно взять id)
    NetView.RPC("RemovePlayer", RPCMode.All, Convert.ToInt32(pl.ToString()));// Отправляет всем приказ :) удалить игрока из своего списка
    Network.RemoveRPCs(pl);// Удаляем RPC сообщения(честно говоря хз что это :D почитайте)
}
 
public void BackMainMenu_Disconnect() {// Это выполняется на игроке. Игрок сам добровольно отключился
    Network.Disconnect();
    PlayerData.instance.PlayersList.Clear();// Удаляем список, иначе при следующем создании/подключении к другому серву, у вас будут игроки призраки :)
}
 
void OnDisconnectedFromServer() {// Это выполняется на игроке. Выполняется когда сервер отключил вас/сеть рухнула/серв умер
    PlayersList.Clear();// Удаляем список, иначе при следующем создании/подключении к другому серву, у вас будут игроки призраки :)
}
 
[RPC]
    void SendAndRequestData(int id, string nick) {// Выполняется только на СЕРВЕРЕ: Добавляем присланный id и nick и отправляет циклом весь список всем игрокам
    PlayersList.Add(id, nick);// Добавляем в список
    foreach (KeyValuePair<int, string> PlayerNick in PlayersList) {// Проходится по каждому игроку в списке (это для того что бы отправить всем)
        NetView.RPC("SendPlayerData", RPCMode.All, PlayerNick.Key, PlayerNick.Value);// Отправляем id и nick всем
    }
    EchoNicks();// Вывожу ники. Вы можете выводить когда угодно
}
 
[RPC]
void SendPlayerData(int id, string nick) {// Добавляет id подключения и nick в список
    if (!PlayersList.ContainsKey(id)) {// Проверяем присланные данные и сверяем со своим списком, если нету то добавляем. Дабы избежать дублирования
        PlayersList.Add(id, nick);
    }
    EchoNicks();// Вывожу ники. Вы можете выводить когда угодно
}
 
[RPC]
void RemovePlayer(int id) {// Если игрок отключился. Удаляет ник из списка по ID и выводит список игроков.
    PlayersList.Remove(id);
    EchoNicks();// Вывожу ники. Вы можете выводить когда угодно
}
Вроде всё... Возможны ошибки Т.к. щас пишу не в ide. Если есть замечание или где то можно сократить/убрать/добавить прошу скажите плиз

Ах да, советую Список игроков PlayersList и свой id и nick вынести в синглтон(singleton, почитайте) если хотите грузиться между сценами.
У меня выглядит так:
Создайте пустой префаб и киньте на него этот скрипт

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class PlayerData : MonoBehaviour {
    public static PlayerData instance;// Делаем скрипт статичным
    [Header("ID Подключение")]
    public int id;
    [Header("Ник")]
    public string nick;
    //Можно ещё какие нибудь параметры, типа хп/мп/опыт и тд
 
    // Лист <Ключ: ID подключения игроков, Значение: Никнейм игроков> PlayersList
    public Dictionary<int, string> PlayersList = new Dictionary<int, string>();
 
    void Awake () {
        if (instance) {// Проверяем. Если уже есть то удаляем. Дабы избежать дублирования
            Destroy(instance.transform.gameObject);// Уничтожаем этот объект
        }
        instance = this;// Создаем
        DontDestroyOnLoad(transform.gameObject);// Делаем не уничтожаемым при загрузках новых сцен
    }
}
Теперь мы можем получать наши данные в других объектах/скриптах и в сценах:
C#
1
2
3
PlayersList.Add(id);// Раньше мы так обращались к списку и добавляли
//...
PlayerData.instance.PlayersList.Add(id);// Теперь так обращаемся к списку и добавляем
Я не гуру C# программист, так что может я как-то не так объясняю... лучше уточняйте инфу
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2018, 13:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

запрещенные ники
Всем доброго дня. Парни помогите не могу разобраться. Какой нужен код для того, что бы на сайте....

Ники пользователей запарился!
У меня вопрос вот есть к примеру сайт,я на нём авторизируюсь $url = &quot;locked&quot;; $urlTo = 'locked';...

А как в Белоруссии живут 1С-ники?
А как в Белоруссии 1с-ники живут, как зарабатывают в среднем, распостранена ли платформа?

Пишите ники в WOT, сыграем!
Воббщем извините,если повторяюсь.Пишите ники,потренимся вместе. Я nanshakov.Желательно написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.