範囲内なのですが例外が発生します 要素数を10に指定しているので範囲内だと思います。
ご教授お願い致します。
C#
1 2 public string[] UserNames = new string[10]; 3 4 public void UpdateMemberList()//一度だけ呼び出す 5 { 6 foreach (var p in PhotonNetwork.playerList) 7 { 8 UserMgr($"User{Count}", p.NickName);//アイコンを表示する 9 MyNumber = PhotonNetwork.playerName == p.NickName ? Count : MyNumber;//自分の背番号を取得する 10 Debug.Log($"{Count}"+ p.NickName); 11 UserNames[8] = p.NickName ?? "UserName";//配列に代入 ←8以上の数字だと例外が発生するので明示的に8と指定しました 12 ++Count; 13 } 14 } 15 16IndexOutOfRangeException: Index was outside the bounds of the array. 17(wrapper stelemref) System.Object.virt_stelemref_sealed_class(intptr,object) 18PhotonMgr.UpdateMemberList () (at Assets/Script/PhotonMgr.cs:96) 19PhotonMgr.OnJoinedRoom () (at Assets/Script/PhotonMgr.cs:83) 20UnityEngine.GameObject:SendMessage(String, Object, SendMessageOptions) 21NetworkingPeer:SendMonoMessage(PhotonNetworkingMessage, Object[]) (at Assets/Photon Unity Networking/Plugins/PhotonNetwork/NetworkingPeer.cs:2856) 22NetworkingPeer:OnEvent(EventData) (at Assets/Photon Unity Networking/Plugins/PhotonNetwork/NetworkingPeer.cs:2564) 23ExitGames.Client.Photon.PeerBase:DeserializeMessageAndCallback(StreamBuffer) 24ExitGames.Client.Photon.EnetPeer:DispatchIncomingCommands() 25ExitGames.Client.Photon.PhotonPeer:DispatchIncomingCommands() 26PhotonHandler:Update() (at Assets/Photon Unity Networking/Plugins/PhotonNetwork/PhotonHandler.cs:161) 27 28 29日本語訳:インデックスは配列の境界外でした。
エラー・メッセージは勝手な省略、翻訳せず、出てきたそのままコピペで提示してください
エラーメッセージを追加しました、回答よろしくお願いいたします
「8以上の数字だと例外が発生するので明示的に8と指定しました 」
8と指定した状態でエラーが発生するのでしょうか?
8と指定した状態で実行するとエラーが発生します
代入する前あたりに
Debug.WriteLine(UserNames.Length);
などと入れてみてUserNamesの長さが変わっていないかチェックしてみてはどうでしょう
確認してみます
> 8と指定した状態で実行するとエラーが発生します
8と指定した状態でキチンとビルドされてますか?
Debug.Log($"配列要素数チェック{UserNames.Length}");で実行してみました 出力は8でした
new string[10];としたのですが出力が8でした .Netフレームワーク側のバクでしょうか?
これunityですよね。詳しくないんですが、UpdateのほかStartなど呼び出しがかかりますよね。そこのコードで何かしてるほうを疑ってください。
C#の配列が10で宣言したら8になるというバグがあったら他の人が気づいてます。010は8進数の8なのでワンチャン
確かに原因がC#ではなくUnity側の可能性も考えられるので、Unityタグをつけた方が良いと思います。
アクセスレベルをpriveteに落としたら動きました。
恐らくUnityエディター等から値を操作されていたようです 不用意にpublicで宣言してはいけないことを学びました
回答者の方々ありがとうございました。
回答1件
あなたの回答
tips
プレビュー