ランキング実装中なのですが、ランキング用にinputFieldにusernameという変数を使用して保管しています | Unity Forum | Tech Stadium Forum

ランキング実装中なのですが、ランキング...
 
通知
すべてクリア

ランキング実装中なのですが、ランキング用にinputFieldにusernameという変数を使用して保管しています  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:47 pm  

ランキング実装中なのですが、ランキング用にinputFieldにusernameという変数を使用して保管しています。
それを通信して、ランキングのテーブルに追加しようとしているのですが、外部のスクリプトの変数の参照に失敗しているのか何も入ってないというエラーが出ます。
この方法ではできていないのでしょうか。


引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 10:47 pm  

どのシーンの話なのかが記述されていませんので憶測ですが、これは「gameClear」シーンでのエラーでしょうか?
だとしたら、Rankingmanage.csの24行目に記されている

script1 = gameObject.GetComponent<namehokan>();
の部分で問題が起こっていると思われます。

gameObject.GetComponent<namehokan>();\
は「このスクリプト(今回で言うRankingmanage)をアタッチしているオブジェクトにアタッチされている『namehokan』スクリプトを取得する」という意味です。

シーン内を確認してみたところ、Rankingmanage.csがアタッチされているオブジェクト(Rankingmanageオブジェクト)にnamehokan.csはアタッチされていませんでした。

もしシーン違いの話でしたら、該当シーンも含め、もう少し詳しく状況を教えて下さい。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:48 pm  

ランキング表示はgameClearシーンの話でした、申し訳ないです。

staticを使用する参照方法で参照することができました!

しかし、今度もまた別のところで参照できていないエラーが出てきてしまいました。
何か抜けている部分などあるのでしょうか。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:49 pm  

つまりここでの問題としては、

RankingDataModel内のsStrJsonにwebRequest.downloadHandler.textの値がきちんと入っていないということか
Rankingmanage内のSetJsonFromWww内の StartCoroutine(SetMessage(sTgtURL, name, time, CallbackApiSuccess, CallbackWwwFailed));
の引数が間違っているという認識であっていますでしょうか


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 10:50 pm  

そうですね。

webRequest.downloadHandler.textの値がきちんと入っていないということです。

引数が間違っていたら、その手前でエラーが起こりそうですね…。

エラー文の上にあるDebug.Logで表示されている「Success:<br />」の<br />は正しい結果なのでしょうか?

もし間違った値であるのであれば、php側にも問題があるかもしれません。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:50 pm  

PHP側の方で構文エラーが発生していたようでそれを見逃していました。
それを解決したところ、InvalidCastException: Specified cast is not valid.
が出てしまいました。3枚目の色をつけている部分で(int)timeとしているのがいけないのでしょうか。

(int)をつけないとfloa型からstring型に変換はできないというエラーが出るため記述しているのですが、、、
それとも関係なく別の部分なのでしょうか。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 10:51 pm  

データベースのtimeの型がfloatであるならば、float型のままデータベースに送った方がいいと思いますので、
こちらを参考に「floatをstringに変換」してみてください!

https://www.sejuku.net/blog/44977


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:52 pm  

修正して変換してみても
InvalidCastException: Specified cast is not valid.
のエラーは出続けてしまうのですが、float型の場合PHP側でも違った記述が必要なのでしょうか


返信引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
04/01/2021 10:52 pm  
もしかしたらDBに整数値が入っている可能性が考えられます。
float型の値をDBに送ったとしても、それが整数(例えば、2.0等)の場合、DB側で整数値として処理される場合があります。一度
if (jsonOne.Contains("Time"))
{
tmp.Time = (float)(double)jsonOne["Time"];
}
となっているところを
if (jsonOne.Contains("Time"))
{
Debug.Log(jsonOne["Time"].GetType().FullName);
tmp.Time = (float)(double)jsonOne["Time"];
}
と変更し、int型が入っていないか確かめてみてください。
もしint型が入っていたら
①int型の場合とfloat型の場合で分けて処理する
②まずは型を統一した型に変更してから処理する
の2パターンで対応してください。

返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
04/01/2021 10:52 pm  

デバッグログを見たところint64となっており、ずっとfloat型で処理しようとしていたのでエラーが出ていたみたいです。

②のパターンですべてlong型で統一して処理することにしました。

その結果無事にランキング機能の実装ができました!
何度も質問に答えていただきありがとうございました!


返信引用
共有:
タイトルとURLをコピーしました