kiyasuの日記

ハッピーうれピーよろしく哀愁

Skyrim日誌

今更だけどSkyrim VRをやっている。

今のところプレイ時間が6,7時間くらい?VR酔いするのでトラベルミン飲んで1日当たり30分2セットくらいがちょうどいい。ちょっとずつ時間長くしていこう。

ノルドで始めてブリーク・フォール墓地を攻略、ホワイトランに戻るとドラゴンが襲ってきたので返り討ちにしてみると、どうやら自分は伝説のドラゴンボーンだということが判明。イヴァルステッドから呼ばれたので向かってます。結構移動時間があるので酔う…

スカイリム自体ほぼ初めてなので普通のプレイと比べてどうかはわからないのですが、戦闘に緊張感があり、ダンジョン攻略はかなり没入して遊べます。これで酔わなければ本当に最高なんだけど…移動速度や回転速度を抑えめにするなどいろいろ試しています。

せっかくなのでModというユーザーが作った拡張機能を導入して、VRにおけるUXを考えつつやってみよう。

前準備

まずModを入れるための前準備を。

多くのModが依存しているSKSEと、Modを管理するためのMod Organizerを入れる。

SKSE

これを入れることで、CGとかのアセット差し替えだけでなくModがゲームのパラメータやデータをアクセスできるようになる、のかな?多分そんな感じのやつです。

ここを参考に入れればOK

SkyrimVRで SKSE VR の導入|粋勢(いなせ)|note

Mod Organizer

Modを管理してくれます。これを入れるとNexusModsCommunityっていうModの配布サイトみたいなところから直接ダウンロード、インストールできて便利です。あとおそらくですがMod同士の依存関係とかをうまいことやってくれるんだと思います。

Higgsを導入

skyrimspecialedition.2game.info

通常プレイだとオブジェクトに近づいてAボタンを押すとアイテム入手、という普通のゲームみたいな操作が必要なんですが、これを導入すると物をつかんだり背中に近づけてインベントリに追加したり(背負ってるのか?)食べ物を顔の近くに近づけて食べたりできます。

掴んで手元に引き寄せる動作には練習が必要か。

確かに楽しいんだけど、武器を外さないといけないのでちょっと面倒。なので実際はあまり使わないんだけど、たまに使いたくなるし、使うと楽しいので入れておくといいです。

コントローラーの振動もあって、こういう機能はあるとやっぱり没入感上がるなと思います。ただ操作はもっと簡単にならんかな。

街中でがっつり探索するぞ、ってときに良さそうです。

UnityのVFX Graphから透過動画を作る

手順

まずサンプルとしてかっこいいVFX Graphを取ってきます。

github.com

これはHDRPとしてしか動かないので、使いたいグラフをunitypackageにエクスポートして、適当なURPのプロジェクトにインポートしましょう。

今回自分は上記リポジトリ内の「Portal」を自分はUnity 2021.3.9f1のURPプロジェクトにインポートしました。

シーンに配置した様子がこれ。

真ん中のピンクの四角はなんだろう。URPとHDRPではVisual Effect Graphの対応状況が異なるみたいなので(あとUnityのバージョンによっても異なる)、多分何かしらのマテリアルかグラフが対応していなかったのでしょう。テストの本題じゃないのでスルーして、エフェクトの上半分あたりを撮影することにします。

カメラを以下の設定にします。大事なのはEnvironment/Background TypeをSolid ColorにしてBackgroundのカラーのアルファを0にしておくことです。

次にカメラを撮影したい場所に動かします。

その次にUnity Recorderをインストールします。

Unity Recorderの設定はこんな感じで。

左上の赤いPlayアイコンを押せばGameがPlayされ録画も開始されます。撮影中はこんな↓画面になります。

次に撮影された動画を確認しましょう。

撮影したwebmの動画がUnity2021.3.9f1ではなぜか読み込めず、仕方ないので手元にあったUnity2019.4.18で試します。

Unlit/Transparentのマテリアルを作ってQuadに適用して、VideoPlayerのRendererをそのQuadにして…

できました。思ったような感じじゃないですが…なんか撮影時のEffectより控えめなような…

今日のところはここまで。

参考

netsis.jp

docs.unity3d.com

音声通話の遅延を測る

なにかしらの音声通話ライブラリをテストしていて、どうも会話がしづらい。遅延している気がする。遅延時間をほかの通話サービスなどと比較したいが、どう測ればいいのか?

  1. 手元にデバイスを二つ用意する(少なくとも片方はPCがいいかも。オーディオのルーティングを自由に設定できるので)

  2. 両方のデバイスに同じBlutoothヘッドセットを接続する

  3. 片方のデバイスのマイク入力をオフにする

  4. マイク入力がオンになっているデバイスに話しかるタイミングでタイマースタート

  5. ヘッドセットから自分の声が聞こえてきたらタイマーストップ

これで時間が雑ですが大体の遅延時間が測れるはず。

ちなみにMicrosoftのTeamsは大体0.5秒弱くらい。これくらいなら会話するのに不自由ないと思います。1秒かかっていると少し会話しづらいかもしれません。Teamsは慣れてるだけかもしれないけど。

gitログにAPI Keyなどprivateであるべき設定ファイルが含まれている場合

git rebase -i HEAD~2

これでHEAD(先頭)から2つ前までのコミットを編集することができます。適当にpickとsquashを入力しましょう。

このような画面が出ます。上が新しく、下が古い。1行目のコミットでAPI Keyを含んでしまっていたので、2行目のコミットでAPI Keyの箇所を削除し、管理対象から外してコミットしてます。この二つを一緒にしてしまえば、API Keyが最初から管理対象から外れているようになります。

squashは前のコミットに押し込むこむことになるので、ここでは1行目にpick, 2行目にsquashとすればOKです。

remoteにも設定を反映させたい

API Keyを持つコミットがすでにremoteにもpushされている場合、場合によっては手遅れな気もしますがこれも同様に削除しましょう。

ただし、rebaseしたローカルのブランチをそのままpushしようとすると、干渉するので

! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/xxxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

このように怒られます。

どうすればよいかという

git push -f

もしくは

git push -d origin master

とすればよいようです。どちらにせよ物騒ですが…

λ git push -d origin master
To https://github.com/xxxx.git
! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to 'https://github.com/xxxxx.git'

と怒られることもあります。masterなのでそれはそうなんですが。

いろいろ原因はあるかもしれませんが、私の場合はremoteブランチでmasterがdefaultブランチになっているからでした。

githubでSettings/Branchesとたどって、デフォルトブランチを変更してから再度push -dするとブランチを削除できました。

そのあと

git push --set-upstream origin master

これでremoteのmasterブランチもrebaseできました。

参考

Gitで一度pushしたブランチでgit commit –amend/git rebase後再度pushする方法 – Kenchant

github - I can't delete a remote master branch on git - Stack Overflow

2つのブランチで並行して作業する

リモートのmaster最新を現在のブランチに取り込む

branchAにいるとして、

まずmaster最新の状態をフェッチする。

git fetch origin master

差分確認してみる

git diff branchA origin/master --name-only

ファイル検索して

git ls-files *test.cs

ファイル指定のdiffは場合はこう

git diff branchA origin/master -- dir/test.cs # --以降はファイル名

マージする

git merge origin/master

コンフリクトが起こったのでcheckout。origin/master優先

git checkout --theirs dir/test.cs

その後はaddしてcommitすれば解決

調子に乗ってmaster以外のremoteブランチもマージする

まず該当のリモートブランチを見つける

git branch -a | grep kiyasu

remotes/origin/dev/kiyasu というのが見つかったのでこれをFetch

git fetch origin dev/kiyasu # originというremote branchのdev/kiyasuをfetch

git ls-files test.js # 変更のあったファイルを検索

git diff branchA origin/dev/kiyasu -- dir/js/test.js # diff確認

git merge origin/dev/kiyasu # 問題なさそうなのでマージ

また一つ賢くなってしまった


チェリーピック

ブランチAのcommit-1fで行われた変更のみをブランチBに取り込みたい。こんな時は、ブランチBで

git cherry-pick (commit-1のhash)

とやればよい。これ面白いから好きだな。

自分じゃないbranchのコミットをremoteへpush

Unityの場合、アセットが多かったりしたら切り替えの際にアセット読み込みに時間がかかる。なので切り替えもあまりやりたくない。そのときは

git push origin ブランチ名

とすればよい。コロン使って何かする必要があるかも、と思っていたが一度--set-upstreamとかしておけばこれでいいようだ

マージ後に一度ちゃんと更新されてるか確認しておこう

git diff HEAD~ HEAD "ファイル名"

これで指定のファイルの直前のコミットと現在のコミットを比較できる

WindowsでUnityの作業するときの文字コードと改行コードの設定

Editorconfigを設定する

UnityのC#新規作成で生成されるスクリプトはascii文字ばかりなのでその時点では文字コードは確定しておらず、そのあと編集するエディタで日本語コメントなどを書き込むと、そのエディタの設定でマルチバイト含む全体の文字コードが決まる。なのでUnityではなく使用するエディタの設定を行う。

EditorConfigでやれば、フォルダ階層の上のほうに置けばその下はすべてEditorConfigの影響下になるらしいので便利そうだ。

How to set standard encoding in Visual Studio - Stack Overflow

どんなエディタでもEditorConfigを使ってコードの統一性を高める - Qiita

VisualStudio2022だとプラグイン不要で最初からサポートされているようだ。イチから書くのではなく、Visual Studioから書き出して、それを編集する。

書き出した.editorconfigファイルを開き、次の記述をすればOK

charset = utf-8-bom
end_of_line = lf

改行コード

UnityでC#スクリプトを作るとCRLFで作られる。これはどうしよう。
とりあえずgitの設定でなんとかしてみよう。

git config --global core.autocrlf input

これでcrlfはコミット時に自動的にlfに変換される。ただし、

この変換は不可逆のためバイナリファイルなどでは致命的です。

という側面があるらしい。自分はまだ当たったことないが…

なので

git config --global core.safecrlf true

としておこう。これだとcrlfが入っているソースコードをaddしようとすると

fatal: CRLF would be replaced by LF in Assets/EditorTest/test2.cs

と怒ってくれる。VSで修正しよう。

VSの「名前を付けて保存」にショートカットを指定する

ちょっとしたことだが二手くらい省略できる。

参考

Pro Git の core.autocrlf=input についての説明が間違っている件 - Qiita

上の記事で「checkin」とあって、どういう意味だろうと思ったが多分commitしてpushする、更新分をチェックインさせる、みたいなイメージでよさそう。

Git にコマンドラインでチェックインする | Do Design Space

改行コードの自動変換 core.autocrlf core.safecrlf - [Git/サーバー] ぺんたん info

Line Endings Unifier

Line Endings Unifier - Visual Studio Marketplace

これを使えばVS上で改行コードをいい感じに管理できるようだ。だがVisual Studio2022にはまだ対応しておらず。待ってみます。

URPでARFoundation

事象

UnityのUniversal Render Pipelineを使ってAR Foundationのアプリをビルドしてみたんですが、背景真っ黒だったりキューブの残像が残ったりでおかしい。

Configuring the AR Camera background using a Scriptable Render Pipeline | AR Foundation | 4.2.3

これの通りにやってるのに。

環境

  • Unity 2021.3.4f1
  • ARFoundation 4.2.3
  • URP 12.1.7
    • URPはプロジェクト作成時に3D(URP)を選択してます
  • Android

一応環境を書きましたが多分関係ないです。

解決方法

Quality Settingsを設定しましょう。

使いたいRender Pipeline Assetを適用されるQuality Settings(上の図ではBalanced)のRendering/Render Pipeline Assetに設定しましょう。

上のリンクの通りにやって新規にPipeline Asset作っても自動的にここに設定されなかったり、テンプレートからプロジェクト作るとQuality Levelごとにpipelineが分かれてたりして、見落としやすいところだと思います。