2024-11-12
- PythonのPlayerのUdonSharp化
-
QRCodeModePlayerの変換
- 確認
- 修正
- 確認
-
QRCodeCharacterCountPlayerの変換
- 確認
- 修正
-
QRCodeBitConversionPlayerの変換
- UdonSharp用に簡易的な独自のNumpy(RinaNumpy)をimportする形で変換。
- RinaNumpyに新しいメソッドを追加。
-
2024-11-13
-
U#変換の続き
-
ChecksumPlayerの変換
- 前回のChatGPTインスタンス「
https://chatgpt.com/g/g-kuufVcS5H-miraitoriko/c/67325684-52c0-8012-9905-c5252b4a47b1
」(Masarina用)
の最後のメッセージを
削除、質問、削除、質問…と繰り返す形で作成していく。
- 前回のChatGPTインスタンス「
-
e_QRCodeTerminationPlayerDirの削除(使わないプレイヤーだったため)
- 確認
- 修正
-
PolynomialDivisionPlayerの変換
- このプレイヤーは、プレイヤーとしては使いませんが、ライブラリとして扱います。
-
やるべきことを一度まとめる
- efghijkl2_ChecksumPlayerDirの確認がまだ。
- j_PolynomialDivisionPlayerDirの確認がまだ。
-
-
2024-11-13
-
PyToU#変換の続き
- の
Convert.ToInt32はU#で使えないので、
public int BitStringToInt(string bitString) { int result = 0; for (int i = 0; i < bitString.Length; i++) { if (bitString[i] == '1') { result += (1 << (bitString.Length - i - 1)); // ビットシフトを使って各桁を加算 } } return result; }
で代用。RinaNumpyに追加した。
確認完了。- ChecksumPlayer の変換の確認
なんかおかしい。
CharGPTに頼らず、時間をかけて上から一つ一つみていく必要がある。- このプレイヤーのpyとU#の比較
- の
-
2024-11-15
何してたんだっけ、、状況把握から、、。
あ、そうだたしかにSystemライブラリのメソッド使ってから、修正したんだ、、。
- へんかんのつづき
- ChecksumPlayerの修正との事なので、上から修正していく。ArrayToString メソッドの修正 修正理由: += を使った文字列の連結は、UdonSharpでは最適ではありません。StringBuilderもサポートされていないので、別のアプローチが必要です。 修正内容: 各配列要素を直接つなげる代わりに、あらかじめサイズを指定した配列を作り、要素をまとめる。 AppendChecksum メソッドの修正 修正理由: Array.Copy が使えないため、直接配列をコピーする必要があります。 修正内容: 新しい配列を作成し、手動で要素をコピーします。 Debug.Log 出力の最適化 修正理由: 長い文字列を生成する部分があるため、ここも効率的に処理する必要があります。
ああ、1番上のやつは、+=とかjoinはUdonSharpでは使えないから、ループコピーで対処するべきだというやつだね。
ジャグ配列系のコピーメソッドはRinaNumpyで作成済みだから、それを使おう。
2024-11-15
-
ChecksumPlayerの修正
ArrayToString メソッドの修正 修正理由: += を使った文字列の連結は、UdonSharpでは最適ではありません。StringBuilderもサポートされていないので、別のアプローチが必要です。 修正内容: 各配列要素を直接つなげる代わりに、あらかじめサイズを指定した配列を作り、要素をまとめる。 AppendChecksum メソッドの修正 修正理由: Array.Copy が使えないため、直接配列をコピーする必要があります。 修正内容: 新しい配列を作成し、手動で要素をコピーします。 Debug.Log 出力の最適化 修正理由: 長い文字列を生成する部分があるため、ここも効率的に処理する必要があります。
との事なので、上から修正していく。
修正箇所の質問は、1度に聞くのではなく、次のように…
…メソッド毎に聞いていく。
なお、質問する直前にRinaNumpy.csを渡しているので、RinaNumpyライブラリも含めて思考させている。
このプレイヤーの修正完了 -
プレイヤーのU#化のつづき
- QRCodeMapInitializerPlayerの変換
一旦作るせてから、RinaNumpyで賄えるところは賄う形で"修正する形"でchatGPTに頼むと素晴らしい。
みよ、素晴らしくUdonSharpに対応したコードができる。
using UdonSharp; using UnityEngine; public class QRCodeMapInitializerPlayer : UdonSharpBehaviour { // メンバ変数(Pythonのインスタンス変数に相当) public int Version = 2; // QRコードのバージョン public int GridSize = 25; // QRコードのグリッドサイズ public float[] ModeCharNumInfoChecksumBitlist; // モード/文字数情報/チェックサムのビットリスト // RinaNumpyをアタッチ public RinaNumpy rinaNumpy; // Unityエディタでアタッチすることを想定 // 依存するプレイヤー public UdonSharpBehaviour ChecksumPlayer; // Unityでアタッチすることを想定 // 自分の名前を返すメソッド public string ReturnMyName() { return "QRCodeMapInitializerPlayer"; } // メイン処理 public string ExecuteMain() { /* * UnityエディタでChecksumPlayerとRinaNumpyInstanceをアタッチすることを前提に処理を進める */ // ChecksumPlayerからデータを取得 QRCodeMapInitializerPlayer checksumPlayer = (QRCodeMapInitializerPlayer)ChecksumPlayer; ModeCharNumInfoChecksumBitlist = checksumPlayer.ModeCharNumInfoChecksumBitlist; // RinaNumpyを活用した処理例: 配列の正規化 float mean = rinaNumpy.Mean_FloatArray(ModeCharNumInfoChecksumBitlist); float std = rinaNumpy.Std_FloatArray(ModeCharNumInfoChecksumBitlist); ModeCharNumInfoChecksumBitlist = rinaNumpy.Subtract_FloatArray_Float(ModeCharNumInfoChecksumBitlist, mean); ModeCharNumInfoChecksumBitlist = rinaNumpy.Divide_FloatArray_Float(ModeCharNumInfoChecksumBitlist, std); // 実行の確認用メッセージ Debug.Log($"{ReturnMyName()}が実行されました。"); Debug.Log($"Version: {Version}, GridSize: {GridSize}"); Debug.Log($"Normalized ModeCharNumInfoChecksumBitlist: {ModeCharNumInfoChecksumBitlist}"); // プレイヤー自身を更新する処理 return "Completed"; } }
- QRCodeTimingPatternPlayer
変換、修正やった。
これまでに変換したもの、大丈夫かな、、心配になってきた。
とくにResetとか、絶対だめだ、、、。やはりスマホでは限界。
家で時間が空いたらUnityデバッグしなきゃ。
とりあえず作ってきた変換してきた全てのプレイヤーに、
public bool 名前 + "Return()" { return true; }
って書き込んでおいた。
- QRCodeMapInitializerPlayerの変換