Unityのエディタやビルドしたクライアントアプリから、ホストサーバーで実行中のサーバーアプリに接続しようとした際、予期せぬ例外エラーが発生して通信が上手くいかないことがあります。
本記事では、特定の環境下で発生する同期ミスのような挙動と、その解決に至った経緯を覚書としてまとめました。
同じエラーでお悩みの方の参考になれば幸いです。
サーバー接続時に発生するIndexOutOfRangeException
クライアントからサーバーへ接続を試みると、以下のようなエラーログを吐き出し、同期ミスのような挙動を引き起こしました。
IndexOutOfRangeException: NetworkReader:ReadBytes out of range: (*****) NetBuf sz:** pos:**
screenコマンド実行での頻発
「uMMORPG」のアセットを使用して検証していた際、Linuxのscreenコマンドを使ってバックグラウンド実行をすると、上記のエラーが頻発するようになりました。
サーバーやアプリを単純に再起動してもダメで、根本的な原因が掴めない状態でした。
効果のあった解決策:Unityバージョンの更新
結論から言うと、Unityのバージョンを更新して再ビルドすることで動作するようになりました。
具体的には、Unity 5.5を新たにインストールしてビルドし直し、サーバーを再起動したところ、正常に通信が行えることを確認しました。
なぜこれで直ったのか詳細な原因は謎のままですが、同様のエラーで再起動でも直らない場合は、一度ビルド環境のバージョンを見直すことをおすすめします。
開発環境・参考リンク
今回の検証を行った環境と、参考にした公式のIssue等は以下の通りです。
検証環境
- Windows 7
- Unity v5.5b
- uMMORPG v1.44
参考リンク
Issue Tracker [UNET] NetworkWriter.Write causing ReadString/ReadBytes out of range errors in clientshttps://issuetracker.unity3d.com/issues/unet-networkwriter-dot-write-causing-readstring-slash-readbytes-out-of-range-errors-in-clients?page=1#comments
Bug: ReadString() too long: please show the variable that caused ithttps://forum.unity3d.com/threads/bug-readstring-too-long-please-show-the-variable-that-caused-it.395692/
Unityに関する記事一覧
記事が見つかりませんでした。

