フットボールのハイライトまとめサイトのPython修正

チャンピオンズリーグのアーセナルvsセビージャのハイライト動画取得に失敗 結論から言うと入稿ミスと思われるタイトルの形式崩れが原因でした。 【アーセナル vs セビージャ】がこれまで入稿されていた正解形式だったが、【アーセナルvs セビージャ】で入稿されていました。 対処としては、vsの前後に強制的にスペースを入れるようにしました。 対処用のpythonコード 正規表現で置換しました。 以下に入稿データと置換対応のコードを残しておきます。 補足説明として、入稿データからホームチーム、アウェイチーム、大会名、シーズン、マッチデイのデータを取得しています。 入稿データ 【アーセナル vs セビージャ】UEFAチャンピオンズリーグ 2023-24 グループB Matchday4/1分ハイライト【WOWOW】 pythonコード title = re.sub(r'\s*vs\s*', ' vs ', title) 対処後 無事正しくデータを処理できるようになりました。 入稿ミスにも対応できるようなより抽象的なデータ抽出を書きたいですが、今は動いているコードを素早く修正することに注力しています。 文字列処理はパズル感があって、数あるプログラミングの楽しさの一つだと思います。

11月 9, 2023

rsyncを使ってUnityのWebGLをデプロイする

UnityWebGLのビルドをrsyncでサーバーにデプロイする UnityのWebGLビルドを自鯖にデプロイできるか試したので、手順を書き残しておきます。 サーバーに置いたチクタクバンバン風のスライディングパズルゲーム。 https://smartphone-games.net/rails-webgl/ 大雑把な手順 UnityのWebGLビルド Canvasサイズを設定 Compression FormatをDisableに設定 ビルドフォルダの権限設定 chmod -R 755 sshを使ったrsyncでサーバーに送信 nginxでapplication/wasm設定 Unity UnityのプラットフォームをWebGLに設定します。 設定後に、ProjectSettingsのResolution and Presentationのキャンバスサイズを1920x1080などに設定します。 Compression FormatをDisableで無効に設定します。 GZIPなどの圧縮を選ぶと、そのままだとブラウザで開くとエラーになります。自前で回答処理が必要で面倒なので無効にしています。 ビルドで出力された各フォルダやファイルに権限設定を行います。 ビルドの成果物が含まれてる親フォルダで以下を実行して権限を付与します。 セキュリティ的に不安がある場合は、より制限した権限設定を行いますが、ここではざっくり権限付与になっています。 chmod -R 755 [ビルドのルートフォルダ] rsync ビルドの成果物をサーバーに送信するのにrsyncを使いました。 サーバーにsshログインできることを前提にして、rsync+sshで送信しています。 username@hostはsshのconfigに記載したホストとユーザー名を使います。 繰り返し使うと思うので、権限設定とrsyncでの送信を含めてshellやmakefileでスクリプト化します。 rsync -avz --delete -e ssh [ローカルのビルド成果物フォルダのパス] [username@host:サーバーの配置パス] sshのconfig Host [rsyncで使うホスト] ... User [rsyncで使うユーザー名] ... nginx rsyncでサーバーに置いたWebGLゲームを/var/www/public_htmlにリンクを使って配置するなど外部に公開できるようにします。 /etc/nginx/mime.types にwasmの設定がないと警告が表示されます。 application/wasmをmime.typesに追加して、nginxを再起動します。 mime.types application/wasm wasm; nginx再起動 sudo nginx -s reload これでWebGLを公開できるはずです。 https://smartphone-games.net/rails-webgl/

11月 5, 2023

UnityのサードパーティープラグインNavMeshPlusを使う

NavMeshPlusとは Unityの2DでNavMeshを使うためのサードパーティーのコンポーネント群です。 Tilemapから2D用のNavMeshを生成できます。 Unityを使った2DゲームでNavMeshを使いたい場合に便利です。 https://github.com/h8man/NavMeshPlus ただし、Unityの2DのXY平面から、NavMesh生成のためにXZにする必要があります。 公式で2D用NavMeshを見つけることができないので、我慢して使うことになります。 使い方 以下のURLからzipをダウンロードして、NavMeshComponentsを自分のプロジェクトのAssets以下に追加します。 https://github.com/h8man/NavMeshPlus 手順 空のゲームオブジェクトを作成してNavigation SurfaceとNavigation CollectionSource2dをアタッチ Rendererと同じゲームオブジェクトにNavigation Modifierをアタッチ Tilemapを使っている場合は、Tilemap Rendererと同じゲームオブジェクトにNavigation Modifier Tilemapもアタッチ Navigation Modifier Tilemapをアタッチすると自動でNavigation Modifierもアタッチされます Navigation Modifier TilemapのTile ModifierにBake対象のTileを設定 アタッチしたNavigation ModifierのOverride Areaにチェックを入れて歩けるかどうかなどのArea設定 Navigation SurfaceのBakeを押下 Navigation Surfaceの設定項目はほぼ3DのNavMeshSurfaceと同様 注意 XYをXZに変更しているのでキャラクターやオブジェクトの回転も合わせる必要があります。 何もない状態からスタートするよりはNavMeshPlusを使う方が時間短縮になります。 ただし、複雑なゲームになった場合に実用可能かは未知です。

11月 4, 2023

技術書典15に本出します

技術書典15に本出します 技術書典15に「ゲームと数学のちょっといい話」という本で参加します。 高校数学くらいの知識がゲームで使われている実例を紹介する内容です。 無料で頒布しますので、いろんな人に手にとってもらえることを期待しています。 技術書典15がスタートしたらこのページに並ぶ予定です。 https://techbookfest.org/organization/5671720929198080 内容 大雑把に内容を説明すると、移動するためのベクトル、バックアタック判定のための内積、ミサイルのための補間、トーナメント表のための簡単なグラフ理論を紹介しています。 githubにサンプルも用意しているので、興味がありましたらよろしく。

11月 3, 2023

Hugoを使ったブログの投稿までの流れ

Setup Hugo blog ホームページにblogを追加するためにHugoを使ってみました。 このページが表示されているならば構築に成功したということです。 公式のquick-startに沿ってコマンドを実行しました。 https://gohugo.io/getting-started/quick-start/ 公式と違う部分はthemeを変えています。 themeは↓のURLから選んで、ページ内のgithubのurlを使います。 https://themes.gohugo.io/tags/blog/ brew install hugo hugo new site blog git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod git submodule update --init --recursive echo "theme = 'PaperMod'" >> hugo.toml hugo new content posts/my-first-post.md マークダウンで内容を書く posts/my-first-post.md に何かを書きます。 マークダウンを使います。 ローカルにサーバーを立てる 次のコマンドで、https://localhost:1313 にアクセスできるようになります。 hugo server -D 静的サイトのビルド postsにあるmdファイル内のドラフトフラグをfalseにします。 ドラフトがtrueだとビルドしても静的ファイルは生成されません。 次のコマンドで静的サイトのデータがpublicフォルダに生成されます。 hugo デプロイ git経由でpublicをサーバーに持っていきます。 hugoで生成したpublicをpublic_htmlなどの公開可能な場所に置く。

11月 3, 2023