#android #unity3d #multiplayer #mirror #vuzix
Вопрос:
Я пытаюсь создать приложение, в котором я отправляю ввод с моего устройства Android на сервер, т. Е. на свой компьютер, к которому подключен Arduino. Таким образом, ПК(сервер) отправляет входные данные в Arduino. Но, используя зеркало, у меня возникают небольшие трудности с синхронизацией данных. Я могу подключить как сервер, так и клиент, но я не могу отправлять данные с клиента на сервер или с сервера на клиент. Я тоже пробовал обучающие программы YouTube и [Команду], но мне кажется, что я что-то упускаю. Я просто хочу отправить команду с клиента на сервер, чтобы она отправилась в Arduino. Если кто-нибудь сможет помочь, это будет очень важно. Код для скрипта выглядит следующим образом
using System.Collections.Generic;
using UnityEngine;
using Mirror;
using TMPro;
public class syncData : NetworkBehaviour
{
public GameObject DFA;
public TMP_Text data1;
public TMP_Text data2;
public TMP_Text data3;
[SyncVar]
string receivedString;
public delegate void StringChangedDelegate(string receivedString);
/*[SyncEvent]*/
public event StringChangedDelegate EventStringChanged;
private void SetString(string receivedString)
{
receivedString = DFA.GetComponent<Comunicacion>().receivedstring;
}
public override void OnStartServer()
{
SetString(receivedString);
}
// Start is called before the first frame update
void Start()
{
// DFA = GameObject.FindWithTag("dfa"); // tag, not name
}
/* [Command]
private void changeString() => SetString(receivedString);
*/
// Update is called once per frame
// [ClientCallBack]
void Update()
{
// Debug.Log("Client is sending information.");
// receivedString = DFA.GetComponent<Comunicacion>().receivedstring;
refresh(receivedString);
}
[Server]
void FunctionServer()
{
Debug.Log("Running the program in Server mode.");
}
[ClientRpc]
void refresh(string receivedString)
{
// receivedString = DFA.GetComponent<Comunicacion>().receivedstring;
if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.B))
{
Debug.Log(" Right Arrow Button was pressed on Vuzix");
}
else if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.X))
{
Debug.Log(" Left Arrow Button was pressed on Vuzix");
}
refresher();
// string[] datos = receivedString.Split(':'); //My arduino script returns a 3 part value (IE: 12,30,18)
//// data1.SetText(datos[0]);// Try to forcefully re-enter values from DFA
// data2.SetText(datos[1]);
// data3.SetText(datos[2]);
}
[Command]
void refresher()
{
// receivedString = DFA.GetComponent<Comunicacion>().receivedstring;
refresh(receivedString);
Debug.Log("A command has been sent");
// gm.Update()
}
}
Комментарии:
1. зачем вам отправлять RPC каждый кадр ? Кроме того, если это работает на клиенте, это не сработает …
[ClientRpc]
может быть вызван только сервером , а затем выполняется на всех клиентах … не могли бы вы немного убрать беспорядок прокомментированного кода и объяснить, чего именно вы пытаетесь достичь?2. я пытаюсь отправить команду B с клиента на сервер. но это никогда не проходит. когда я нажимаю b, он отправляет u на arduino, где arduino запускает сервопривод в соответствии с этой кнопкой. но это происходит только на сервере, для клиента я не могу ничего отправлять на сервер или с сервера на клиент.