技術書典15の出展結果

技術書典15の結果 技術書典15に「ゲームと数学のちょっといい話」という本を頒布しました。 ゲームで使われる数学の具体的な例を紹介する内容です。 今回の目標は、無料で頒布することで多くの人に手に取ってもらうことでした。 無料にしたのは学生に届けたかったためです。 結果は、316冊頒布することができました。 頒布したものはこちら https://techbookfest.org/product/cD0f3gsHUgpAzGYYnc11fs?productVariantID=bZiYgemh3j9RywZ8CLJMeT 所感 多くの人に目を通してもらうために今回は無料で頒布しました。 この判断は間違っていなかったと思います。実際、今までない数の頒布数になりました。 多くの人に広く浅く伝えたいものは無料、ニッチな情報を伝えたい場合は有料として活動を続けようと思いました。 有料で多くの頒布数が理想ですが、それは実力とテーマのひらめき、運が必要になるため難しいと感じました。 次に向けて 次はChatGPTを使って作ったサイトとAPIについての本を書く予定です。 とにかく、フロントもバックエンドも中途半端な知識と経験でChatGPTを使ってサイトとAPIを作る過程を紹介できればと思っています。

11月 28, 2023 · jnhtt

UnityのuGUIを使って任意の2点間に線分を引く

UnityのuGUIで点と点を結ぶ線分を作成する Canvas - Overlay 限定で点と点の線分を書く3D上のワールドの点とCanvas上の点に線分を表示したかったのでコンポーネントを作成しました。 画像のような線分を表示できるようになります。 Screenshot コード UILineコンポーネントは、以下の条件下で機能します。 UIのCanvasの設定がOverlayであること 3Dのワールド座標 Transform.position と RectTransform.localPositionの対であること UILineのプロパティlineImageのwidthを小さくすると細い線を描画します。 using UnityEngine; using UnityEngine.UI; // only Canvas - Overlay public class UILine : MonoBehaviour { [SerializeField] private RectTransform canvasRectTransform; [SerializeField] private Image lineImage; public void Draw(Transform trans3D, RectTransform uiElement) { if (trans3D == null || uiElement == null) { return; } Draw(trans3D.position, uiElement.localPosition) } public void Draw(Vector3 worldPosition, Vector2 uiElementLocalPos) { var mainCamera = Camera.main; if (lineImage == null || canvasRectTransform == null || mainCamera == null) { return; } Vector2 screenPoint = RectTransformUtility....

11月 23, 2023 · jnhtt

映画「ゴジラ-1.0」を観ました

ゴジラ-1.0 日本映画特有の狭い範囲の人間関係のジメジメした要素を残しつつも、大きな怪獣ゴジラと昭和の兵器が戦うスペクタクルをメインにしているのが良かった。 VFXは適切な表現をしているように見えた。豪華ではないがチープでもない。海での戦いの波と飛沫は良い線に見えた。 熱線を吐くための背中の棘が持ち上がる表現は期待感を煽って良かった。 とにかく、スペクタクル要素が多い日本映画が増えてほしい。

11月 18, 2023 · jnhtt

技術書典のサンプルレポジトリのログ綺麗にする

gitのコミットログをリセット 技術書典15で頒布する本のサンプルレポジトリのコミットログを公開前にリセットするコマンドを書き残しておきます。 頒布予定の本 https://techbookfest.org/product/cD0f3gsHUgpAzGYYnc11fs 何かしらの事情でprivateのレポジトリをpublicにする際にログを綺麗にしたい時に使います。 コマンド # git configでデフォルトブランチをmainに設定する git config --global init.defaultBranch main # git configの内容確認 git config -l # remote repositoryのurlを確認する # git@github.com:{username}/{repository}.git のような形式 git remote -v # 初期コミットをremote repositoryに強制上書き rm -rf .git git init git add . git commit -a -m 'first commit' # 確認したremote repositoryのurlを指定 git remote add origin git@github.com:{username}/{repository}.git push -u origin main -f

11月 10, 2023

フットボールのハイライトまとめサイトの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