0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DJProject_備忘録_4

Last updated at Posted at 2024-11-11

2024-11-12

  • PythonのPlayerのUdonSharp化
    • QRCodeModePlayerの変換

      • 確認
      • 修正
      • 確認
    • QRCodeCharacterCountPlayerの変換

      • 確認
      • 修正
    • QRCodeBitConversionPlayerの変換

      • UdonSharp用に簡易的な独自のNumpy(RinaNumpy)をimportする形で変換。
      • RinaNumpyに新しいメソッドを追加。

2024-11-13

  • U#変換の続き

    • ChecksumPlayerの変換

    • 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度に聞くのではなく、次のように…
    IMG_0044.png

    …メソッド毎に聞いていく。
    なお、質問する直前に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;
    }
    

    って書き込んでおいた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?