UPMを使って自作パッケージをgithubから追加

Unity PackageManagerを使って自作パッケージをプロジェクトに追加できるようにする 自作した機能をUnity PackageManager(以降はUPM)で追加と削除できるようにして使い回しのスピードを上げてみようと思います。 使いまわしたい機能とgithubのレポジトリがあることが前提です。 ここでは、高さフォグ機能のURP RendererFeatureとVolumeのコードとシェーダーをUPMで追加/削除できるようにします。 Githubレポジトリ https://github.com/jnhtt/height-fog-urp-volume Window > PackageManager > Add package from git url … > https://github.com/jnhtt/height-fog-urp-volume.git?path=Assets/HeightFog Unity PackageManager対応 フォルダ構成 package.json の記載内容 asmdef フォルダ構成 Unity推奨の構成 <root> ├── package.json ├── README.md ├── CHANGELOG.md ├── LICENSE.md ├── Third Party Notices.md ├── Editor │ ├── [company-name].[package-name].Editor.asmdef │ └── EditorExample.cs ├── Runtime │ ├── [company-name].[package-name].asmdef │ └── RuntimeExample.cs ├── Tests │ ├── Editor │ │ ├── [company-name].[package-name].Editor.Tests.asmdef │ │ └── EditorExampleTest....

12月 8, 2023 · jnhtt

Using Unity, Height Fog for Universal RP Volume

UnityのURPのVolumeにHeightFogを追加する Unityで高さフォグを使おうと思ったがURPパッケージに入っていなかったので自分で作る。 使い方は、RenderFeatureとVolumeで設定すると使えるようになります。 こんな見た目になります。 Screenshot Github コードとサンプルはここに置いてあります。 https://github.com/jnhtt/height-fog-urp-volume 開発環境 以下のような環境で実装しました。 MacBook Pro (16インチ,2021) M1 Pro/32GB Unity2022.3.13f1 URP 14.0.9 技術的要素 高さフォグをVolumeに追加 RenderFeature/RenderPassの追加 高さフォグをVolumeに追加 高さフォグの制御のためのパラメーターはVolume経由で行うようにしたいと思うのでVolumeComponentを継承したクラスを作成します。 fogHeightMin/Maxの値は用途に合わせて調整してください。 パラメーター 意味 値の範囲 fogColor フォグの色 rgb fogHeightMin フォググラデの範囲の最小値、これより小さいとフォグ色で塗られる floatで[-200,300] fogHeightMax フォググラデの範囲の最大値、これより大きいとフォグはない floatで[-200,300] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; namespace FingerTip.Volume { public class HeightFog : VolumeComponent { public ColorParameter fogColor = new ColorParameter(Color.white); public ClampedFloatParameter fogHeightMin = new ClampedFloatParameter(0, -200, 300); public ClampedFloatParameter fogHeightMax = new ClampedFloatParameter(0, -200, 300); public bool IsActive => fogHeightMin....

12月 7, 2023 · jnhtt

GYAAR Studio インディーゲームコンテストに応募しました

GYAAR Studio インディーゲームコンテストに応募しました ニッチなイライラする短時間アクションゲームで応募しました。 結果は2024年3月2日くらいに分かるみたいです。 https://indie.bandainamcostudios.com/gyaarcon-2 結果がダメなら自分の名義でSteamに即リリース予定です。 どのような結果になるにせよ、お楽しみに。

12月 5, 2023 · jnhtt

UnityのURPでBlitを使ったらErrorが出た場合の対処

URPでRenderPassを追加してBlitを使ったらエラーが出る場合 今回紹介するの方法は回避方法と思われます。 根本解決かは分からないです。 エラーは、CameraType.Previewの時に発生します。 そこで単純な回避方法として、RenderPass内でCameraType.Previewの時だけ描画をスキップします。 環境 次の環境でRenderPassを追加してSwapBuffersを使ったBlitでエラーが発生しました。 Unity2022.3.13f1 URP 14.0.9 該当コード Executeの中身は以下の通り。 public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { if (material == null) { return; } var cmd = CommandBufferPool.Get(RenderPassName); Blit(cmd, ref renderingData, material); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } エラー内容 表示されたエラーは以下の通り。 CameraType.Previewの時にBlitの内でAssertionで止まっています。 Assertion failed UnityEngine.Rendering.Universal.ScriptableRenderPass:Blit (UnityEngine.Rendering.CommandBuffer,UnityEngine.Rendering.Universal.RenderingData&,UnityEngine.Material,int) ... さらに、次のエラーも表示される。 Blitter.BlitTexture内のテクスチャ周りに問題がありそうなエラー。 ArgumentNullException: Value cannot be null. Parameter name: value UnityEngine.MaterialPropertyBlock.SetTexture (System.Int32 nameID, UnityEngine.Texture value) (at /Users/bokken/build/output/unity/unity/Runtime/Export/Shaders/MaterialPropertyBlock.cs:113) UnityEngine.Rendering.Blitter.BlitTexture (UnityEngine.Rendering.CommandBuffer cmd, UnityEngine.Rendering.RTHandle source, UnityEngine.Vector4 scaleBias, UnityEngine....

12月 5, 2023 · jnhtt

技術書典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