kiyasuの日記

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

gitの最初のコミットに、本来gitで管理したくない設定ファイルを含めてコミットしてしまったんですが、これを取り除くにはどうすればよいでしょうか?

rebaseだと最初のコミットを対象に含めることができず困っていた。

この質問に対するChatGPTくんの回答はこう。

さすがChatGPTくんには勝てねえよ…などと思いながら試してみたところ普通にinvalid upstreamと言われてしまいました。えっ? すごいスラスラ嘘つくね。

正しくはrootオプションを付けるらしい。

 git rebase -i --root

dev.classmethod.jp

Agora SDK(Unity)で画面共有をする

UnityのAgora SDKで画面共有をします。Windows, Android, iOSの間でそれぞれ画面共有できるところまでやります。 なお、現状iOSではiPhone Xで動作確認していて、iPad Proでは動いていませんiOSの画面共有機能に50MBのメモリ使用制限があり、おそらくですがiPad Proの解像度で画面共有しようとするとそれが超過しているようです。対策は調査中。 改めて試してみると、何も変えなくてもiPad Pro(2020 12inch)でできました。なぜ?なにかXCode上での作業ミスってたかな…

agoraは一か月あたり10000分までは無料で使えるようです。

Agoraのアカウント作成

自分はgithubアカウント連携でAgoraのアカウント作りました。

Video SDKダウンロード

以下のリンクからUnityのVideo SDKをダウンロードします。自分はVersion4.0.0でやりました。

SDKs Download | Agora Documentation

Unityプロジェクトの設定

SDKのインポート

Unityプロジェクトを作成して上でダウンロードしたunitypackageをインポートします。

自分はUnity2021.3.11f1でやりました。

これが出たら一番左を選択。

AppIdとTokenの設定

次にインポートしたアセットからAssets/Agora-RTC-Plugin/API-Example/AppIdInput/AppIdInput.assetを編集します。

ここでまずChannel Nameを適当に決めておきます。

次にここにアクセスしてProject ManagementからCreateでプロジェクトを作ります。

Project NameとUse Caseは適当に、Authenticationですが、下のTesting modeを選んでもTokenは必要になるようです。とりあえず上のSeccured modeを選択しておきます。

作成したプロジェクトの編集ページに入り、中ほどのFeaturesからGenerate temp RTC Tokenのページに入ります。

上で決めたChannel Nameを入力して下の「Generate」をクリック。

Unityに戻って、このApp IDとTemp TokenをAppIdInput.assetにコピペしてアクセス権限の設定は終了です。ちなみにこの方法で作成したTokenは24時間しか使えないので注意してください。

シーン設定

Unityプロジェクト内のAssets/Agora-RTC-Plugin/API-Example/Examples/Advanced/ScreenShare/ScreenShareScene.unityを開きます。

現状のままビルドしても動作しますが、見づらくなるのでスクリプトに少し細工をします。

Assets/Agora-RTC-Plugin/API-Example/Examples/Advanced/ScreenShare/ScreenShare.csを開いて、339行目あたりに

go.GetComponent<RectTransform>().sizeDelta = new Vector2(20, 20);

と追加します。シェアリングで共有される画面のサイズ設定をここで行っています。

ビルド

Android, windowsはUnityからビルドして起動すればすぐ動作を確認できます。(Unity Editor上では動作しません)

iOS用のビルド

iOSではXCodeに手を入れるなどして、少し手順が複雑です。

Unityでビルドする前にProjectSettings/OtherSettingsのCamera Usage DescriptionとMicrophone Usage Descriptionに適当な値を記入して、Targe minimum iOS Versionは12.0以上にしておきます。

XCodeでの作業

次にXCodeで書き出したプロジェクトを開きます。最初にプロジェクトのProvisioning Fileを作成します。

次に画面共有用のExtensionを作成します。

↓の画面では「Activate」を選択。

Deployment Infoで対象のiOSのバージョンが12以上になっていることを確認してください。Unity-iPhone Targetにおけるこの数字も同じ値になるようにしてください。

次にFrameworkを追加します。

下のAdd Filesを選択。

Frameworks/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Plugins/iOS/以下のすべてを選択してOpenをクリック

それからInfoタブを開いてNSExtensionPrincipalClassの値をAgoraReplayKitHandlerにします。

あとはビルドしてデバイスにインストールすればOKです。

iOS上での操作方法

アプリの画面上で「Start Sharing」を押した後、iOS側では「画面収録」から先ほど作った画面共有用のExtensionを実行する必要があります。

実行

左からAndroid, iPhone, Windowsです。Windowsは画面小さすぎてわかりませんがiTunesの画面が出てます。

Packages以下のscriptを編集してDebug.Log()を出す

UnityのPackage Managerを使って導入したスクリプトはRead Onlyになっているようで、編集してセーブしてもすぐに戻ります。
ブレイクポイントおいてイミディエイトウィンドウで変数の中身みて、というのはできるんですが、大量のログをファイルに出して見てみたいときはどうすればいいか。

  1. 対象のパッケージをフォルダごと別の場所に移動させる
  2. Packages/manifest.json内のパスを1で変更した場所に変更する。相対パスでも絶対パスでもいいです。

これでOKです。

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