/// <summary> /// データを受け取った時の挙動です。 /// </summary> /// <param name="conn"></param> /// <param name="receivedData"></param> private void ReceivedInfo(NetworkConnection conn, MinimalSendData receivedData) { if (showDebugLog) { Debug.Log(JsonUtility.ToJson(receivedData)); } //ここでActionを生やしています。 //メインスレッドから発火されます。IPで区別したかったり、コネクションIDで区別したかったり、区別したくなかったりするので //困ったらこういう感じに幾つかの型を定義しておくと、ライブラリを使う側にとって親切だと思います。 OnReceivedSensorDataWithClientIpAddress?.Invoke(conn.address, receivedData); OnReceivedSensorDataWithClientConnectionID?.Invoke(conn.connectionId, receivedData); OnReceivedSensorData?.Invoke(receivedData); }
void Update() { //ここで、センサーデータの取得をする //今回はゲームコントローラの左スティックの値を直接使うのでInput.GetAxisだけする _inputAxisData.x = Input.GetAxis("Horizontal"); _inputAxisData.y = Input.GetAxis("Vertical"); if (_isSensorValueShowLabelNotNull) { _sensorValueShowLabel.text = _inputAxisData.ToString(); } //非接続時はセンサーデータを送らない if (NetworkClient.isConnected) { //本当はここで、変化が無ければ通信をしない、などの間引き処理や、タイマーによって送信頻度を変えると良い //今回はニュートラルだったら値を送らない、としています。これによって複数台の動作テストで //サーバ側が複数台のクライアント受信を見分けられることを確認しやすいかと思います。 if (_inputAxisData.magnitude < 0.01f) { return; } //ここで送るデータを作る、センサー情報を差し込む MinimalSendData minimalSendData = new MinimalSendData() { //名前欄、何も考えずにdeviceNameでいいや… name = SystemInfo.deviceName, //センサーデータは直近のデータをそのまま使う axisData = new Vector2(_inputAxisData.x, _inputAxisData.y) }; //NetworkIdentityとかは無視して、直接サーバに向かって送信する!!! NetworkClient.Send(minimalSendData); } }
/// <summary> /// ここで本来はキャラの動きを制御したりシーン内の何かの値を制御します! /// </summary> /// <param name="ipAddress"></param> /// <param name="data"></param> private void OnReceivedSensorDataWithClientIpAddress(string ipAddress, MinimalSendData data) { ipAddressLabel.text = ipAddress; receivedSensorDataLabel.text = data.name + " vec:" + data.axisData; }