Выбор модельки для игрока (Unity Network)

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Выбор модельки для игрока (Unity Network)

Сообщение AppingC# 20 ноя 2018, 16:04

Доброго времени суток ! Хотел бы задать вопрос , вообщем , хочу сделать чтобы до того как появится сам игрок появлялась панель , в которой игрок сможет выбрать себе модельку персонажа, тоже самое чтобы было в клиента , в кратком хочу сделать возможность игрок выбрать себе модельку , пробовал делать по этой статье :

https://docs.unity3d.com/Manual/UNetPlayersCustom.html
Сделал вот это :
1.Создал скрипт (Network Manager) , в нём вот это :
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.Networking;
public class NetworkManagerr : NetworkManager
{
    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
    {
    int RandoM = Random.Range(0,3);
        GameObject player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
        if(RandoM == 1){
    player.GetComponent<ChangePlayer>().Ch_1();
    }
        if(RandoM == 2){
    player.GetComponent<ChangePlayer>().Ch_2();
    }
        if(RandoM == 3){
    player.GetComponent<ChangePlayer>().Ch_3();
    }
   
}
}


2.Создал ещё один скрипт и повесил на префаб игрока :

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class ChangePlayer : NetworkBehaviour {
public Mesh[] meshes;
public void Ch_1(){
    gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[0];
    gameObject.GetComponent<ChangePlayer>().enabled = false;
}
public void Ch_2(){
    gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[1];
        gameObject.GetComponent<ChangePlayer>().enabled = false;
}
public void Ch_3(){
    gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[2];
        gameObject.GetComponent<ChangePlayer>().enabled = false;
}
}


Оно работает , но вообще не так как нужно , вообщем когда запускаю Host моделька меняется , но когда присоединяется клиент то Host видит себя например как мужчину , а клиент видит его как женщину (другую модель) , вот в чём проблема.
AppingC#
UNец
 
Сообщения: 17
Зарегистрирован: 08 ноя 2018, 18:45
Skype: andr31193

Re: Выбор модельки для игрока (Unity Network)

Сообщение DimaJoke 20 ноя 2018, 18:58

А если сделать int переменную типо modelID на хосте, а потом в клиенте получать это значение и ставить нужную модель
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Выбор модельки для игрока (Unity Network)

Сообщение AppingC# 21 ноя 2018, 01:22

Можно по подробнее ?
AppingC#
UNец
 
Сообщения: 17
Зарегистрирован: 08 ноя 2018, 18:45
Skype: andr31193

Re: Выбор модельки для игрока (Unity Network)

Сообщение DimaJoke 21 ноя 2018, 07:20

Ну допустим у тебя 2 модельки мужчина и женщина
На сервере на каждого игрока есть int переменная ID допустим мужчина-1 АйДи женщина 2 АйДи и при выборе перса мы её меняем и сохраняем
Во время игры, когда игрок видит другого игрока он получает этот ID с сервера и его клиент ставит нужную модель
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Выбор модельки для игрока (Unity Network)

Сообщение AppingC# 21 ноя 2018, 16:20

Спасибо , сделаю и сразу отпишусь !
AppingC#
UNец
 
Сообщения: 17
Зарегистрирован: 08 ноя 2018, 18:45
Skype: andr31193

Re: Выбор модельки для игрока (Unity Network)

Сообщение AppingC# 21 ноя 2018, 17:07

Изменил в своём Network Manger :

Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.Networking;
public class NetworkManagerr : NetworkManager
{
    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
    {
        int RandoM = Random.Range(0,3);
        GameObject player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
        if(RandoM == 1){
player.GetComponent<ChangePlayer>().ModelID = 1;
    }
        if(RandoM == 2){
player.GetComponent<ChangePlayer>().ModelID = 2;
    }
        if(RandoM == 3){
player.GetComponent<ChangePlayer>().ModelID = 3;
    }
    }
}
 


На игроке :

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class ChangePlayer : NetworkBehaviour {
public int ModelID;
public Mesh[] meshes;

void Update(){
        if(ModelID == 1){
        gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[0];
        }
        if(ModelID == 2){
        gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[1];
        }
        if(ModelID == 3){
        gameObject.GetComponent<MeshFilter>().sharedMesh = meshes[2];
        }
}
}
AppingC#
UNец
 
Сообщения: 17
Зарегистрирован: 08 ноя 2018, 18:45
Skype: andr31193

Re: Выбор модельки для игрока (Unity Network)

Сообщение KanycTa 21 ноя 2018, 18:03

AppingC# писал(а):Доброго времени суток ! Хотел бы задать вопрос , вообщем , хочу сделать чтобы до того как появится сам игрок появлялась панель , в которой игрок сможет выбрать себе модельку персонажа, тоже самое чтобы было в клиента , в кратком хочу сделать возможность игрок выбрать себе модельку , пробовал делать по этой статье https://docs.unity3d.com/Manual/UNetPlayersCustom.html

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


Используй низкоуровневые сообщения (LLAPI)

на клиенте регистрируй сообщение

Клиентская сторона:
Синтаксис:
Используется csharp
client.RegisterHandler(0xCC0, event_SelectModel);

private void event_SelectModel(NetworkMessage msg)
{
print("Сервер просит выбрать модельку");
}
 


Серверная сторона:
Синтаксис:
Используется csharp
NetworkServer.RegisterHandler(0xCC1, event_ClientSelectedModel);

private void event_ClientSelectedModel(NetworkMessage msg)
{
var message = msg.ReadMessage<Class>();
print("клиент выбрал модельку "+message.id);
}
 



При старте клиента будет обработчик который будет реагировать на принятые сетевые сообщения с ID: 0xCC3 (это как пример)

С сервера нужно отправлять клиенту(ам) сообщение что нужно выбрать модельку

После выбора модельки на клиенте отправляем серверу сообщение что мы выбрали модельку
Аватара пользователя
KanycTa
UNIт
 
Сообщения: 107
Зарегистрирован: 25 июл 2018, 18:41
Откуда: г. Ульяновск
  • Сайт

Re: Выбор модельки для игрока (Unity Network)

Сообщение AppingC# 21 ноя 2018, 23:57

Можешь дать свой скайп или дискорд ?
AppingC#
UNец
 
Сообщения: 17
Зарегистрирован: 08 ноя 2018, 18:45
Skype: andr31193


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 22