強火で進め

このブログではプログラム関連の記事を中心に書いてます。こちらで( http://blog.livedoor.jp/tsuyobi-outdoor/ ) アウトドア関連の記事も書いてます。

「Unknown managed type referenced: [UnityEditor.CoreModule] UnityEditorInternal.Profiling.CPUProfilerModule」というエラーが出た時の対処法

該当する Issue Tracker のページはこちら。

Unity Issue Tracker - An error is thrown after re-building a library of previous Editor version project when the Profiler of 2020.2 project is opened
https://issuetracker.unity3d.com/issues/an-error-is-thrown-after-re-building-a-library-of-previous-editor-version-project-when-the-profiler-of-2020-dot-2-project-is-opened

修正済みの様なので修正済みのバージョンを使用するかコメント欄に有る「Library フォルダに有るファイル "CurrentLayout-default.dwlt" を削除して Unity エディタを再起動」で対応。

Google Maps に登山をした時の GPS の軌跡を保存する方法

登山やランニングなどで移動した軌跡をWeb上で公開しようとすると昔は「ルートラボ」という便利なサービスが有ったのですがそれもかなり前にサービス終了しています。
登山やランニングの情報を記録できるWebサービスを使えば公開できますがそれだとブログで使う事はできません。

何か方法は無いかと考えてみた所、上手く行く方法が見つかったので紹介します。

作成手順

Google Maps には図形ツールを使った描画やピン(マーカー)の配置を行い、保存する事ができる「マイマップ」という機能が有ります。

こちら、作成を行うのは別ページとなっており、ここからアクセスできます。

ページを開くと新規に地図が作成された状態で表示されます。ここで地図の名前を付けたりマーカーを置いたり編集をします。

ツールを見ると「ルートを追加」というものがあり、 Google Maps のルート検索と同じ様な方法でルートを地図上に描画できます。
f:id:nakamura001:20211015211317p:plain

「東京駅」から「上野駅」のルートを作った場合。
f:id:nakamura001:20211015211632p:plain

この方法は便利なのですが登山道は Google Maps ではほとんど描かれていない(データが無い)為、ルートが引かれません。その為、登山の軌跡にはこの方法は使えません(ランニングの軌跡を書きたい時などには使えそうです)。

今回は登山をしていてアプリやGPSロガーなどで軌跡データを取っている人には一般的な GPX ファイルを使って軌跡を描画する事にします。

「インポート」をクリックすると
f:id:nakamura001:20211015212148p:plain

この様なウィンドウが表示され、ここから GPX ファイルをアップロードできます。
f:id:nakamura001:20211015214023p:plain
ここで GPX ファイルを直接アップロードしても良いのですが自分がアップロードした GPX ファイルの場合には「ファイルに無効またはサポートされていないデータが含まれているか、ファイルが大きすぎて解析できません。」というエラーが表示され、処理が完了しませんでした。

そこで事前に Google が自社サービスの中でこの様な時に使用する標準となっている KML ファイルに変換してアップロードするという手順を試した所、こちらは問題無くアップロードできました。
GPX から KML への変換はオンラインサービスがあり、そちらを使用して変換しました。

変換した KML ファイルをアップロードすると軌跡を描画すると「Path」と Path の上に表示される「マーカー」の2つのレイヤーという構成で取り込まれました(元データや変換ツールによっては結果が異なる可能性も有ります)。
自分の場合は「マーカー」の方のレイヤーは必要無かったので削除しました。

後は「ここは見どころです」とマーカーを追加したり、軌跡の太さや色を調整しました。

今回、「往路と復路で色を分けたいな」と思ったのですがマイマップ上では出来なそうだったので「往路と復路に分割した GPX ファイルを KML に変換→インポート」という手順で作成しました。

この手順で作成したものがこちらです。デフォルトでは「非公開」状態になっているので公開状態にすると一般公開できます。
f:id:nakamura001:20211015214600p:plain

この様にブログに埋め込む事も出来ます。

作成したマイマップへのアクセス

ちなみに作成済みのマイマップ(地図)はハンバーガーメニュー(三本線のアイコン)をクリック
f:id:nakamura001:20211015214239p:plain

「マイプレイス」をクリック
f:id:nakamura001:20211015214319p:plain

「マイマップ」をクリックで表示できます。
f:id:nakamura001:20211015214453p:plain

関連情報

Web 上で GPX ファイルを編集する事が出来るツール。一応、新規に1から GPX ファイルを作る事も出来ますが基本的に GPX ファイルを編集するツールとして使うのが便利です。
GPX Editor and Viewer(GPXEV)

【Unity】Light Probe の編集が出来ない時の対処方法

Unity 2019.4.22f1 で作業をしていた時に Light Probe を編集しようとしたのですが選択した瞬間に編集状態か解除されるという動作になり、編集できませんでした。

こちらに有った解決方法の Unity エディタの Layout を Defualt にするという方法で解消できました。そのうち修正されるかとは思いますがそれまではこの方法で対処するようにしましょう。
forum.unity.com
f:id:nakamura001:20211009221141p:plain

【Unity】プレビュー版のパッケージを Package Manager からインストールする方法

プレビュー版のパッケージのインストール方法はバージョンによって異なっています。

ここでは Unity 2019、 Unity 2020、 Unity 2021 について解説します。

共通の話

それぞれのバージョン個別の話に入る前に共通の話をしておきます。

今回、インストールの説明として使用するパッケージは実機でのメモリの使用量が直感的に分かって便利な Memory Profiler です。

この様な見た目でメモリの状態が確認できます。
f:id:nakamura001:20211008012913p:plain

こちらの Memory Profiler のドキュメントページを開くと URL の中に逆ドメインの様な com.unity.memoryprofiler という部分が確認できます。この文字列は後で使用しますので覚えておきましょう。

なお、プレビューパッケージの一覧はこちらのページで確認できます。

Unity 2019 の場合

メニューから Window > Package Manager と選択。

表示されたウィンドウの中の「Advanced」ボタンを押し、「Show preview packages」をクリックします。
f:id:nakamura001:20211007222054p:plain

「+」ボタンを押し、「Add package from git URL...」をクリック。
f:id:nakamura001:20211007223303p:plain

入力欄に「com.unity.memoryprofiler」と入力して「Add」ボタンをクリックするとインストールが開始します。
f:id:nakamura001:20211008013951p:plain

少し待つと「Memory profiler」が表示されます。
f:id:nakamura001:20211007223550p:plain

Unity 2020 の場合

「歯車」ボタンを押し、「Advanced Project Settings」をクリック。
f:id:nakamura001:20211007230241p:plain

「Enable Preview Packages」と「Show Dependencies」にチェック。
f:id:nakamura001:20211007230252p:plain

「Enable Preview Packages」をチェックしたタイミングで英語で「プレビュー版なのでテスト目的だけに使用するのお勧めします」と表示されます。「I understand」(了解)ボタンを押します。
f:id:nakamura001:20211007230300p:plain

「+」ボタンを押し、「Add package from git URL...」をクリック。
f:id:nakamura001:20211007231637p:plain

入力欄に「com.unity.memoryprofiler」と入力して「Add」ボタンをクリックするとインストールが開始します。
f:id:nakamura001:20211008014218p:plain

少し待つと「Memory profiler」が表示されます。
f:id:nakamura001:20211007235508p:plain

Unity 2021 の場合

「歯車」ボタンを押し、「Advanced Project Settings」をクリック。
f:id:nakamura001:20211008002329p:plain

「Enable Preview Packages」と「Show Dependencies」にチェック。
f:id:nakamura001:20211008002622p:plain

「Enable Preview Packages」をチェックしたタイミングで英語で「プレビュー版なのでテスト目的だけに使用するのお勧めします」と表示されます。「I understand」(了解)ボタンを押します。
f:id:nakamura001:20211008002610p:plain

「+」ボタンを押し、「Add package by name...」をクリック。
f:id:nakamura001:20211008002851p:plain

入力欄に「com.unity.memoryprofiler」と入力して「Add」ボタンをクリックするとインストールが開始します。
f:id:nakamura001:20211008013529p:plain

少し待つと「Memory profiler」が表示されます。
f:id:nakamura001:20211008003245p:plain

URL のプロトコルを使った方法

Unity 2021.2.0a5 より新しいバージョンの場合には他の方法として「カスタム URL スキーム」(※)を使ってパッケージをインストールするというものが有ります。
※「外部プロトコルリクエスト」などと呼ばれる事も有ります。ブラウザに貼って実行したり、リンクをクリックしたりした時にアプリが起動するヤツです。

Memory profiler の場合には com.unity3d.kharma:upmpackage/com.unity.memoryprofiler という URL になります。

この URL を実行すると Unity 上で Package Manager が起動し、パッケージ名が入力済みの状態になっています。ここで「Add」ボタンを押すとインストールが開始されます。
f:id:nakamura001:20211008003438p:plain

Chrome などアドレス欄に入力して飛んでもアプリが起動しない環境も有ります。その場合でも URL が設定されたリンクをクリックした場合には動作します。
ここにサンプルを置いておきます。

【Unity】Android の実機でどの様なフォーマットで使われているかを確認する方法

Unity ではテクスチャは様々なフォーマットを選択できますが Androidバイスによってはサポートしていないフォーマットも有ります。その様な場合、 Unity は「非圧縮のRGBA」のフォーマットが使用されます。
今回は Unity 上で様々なフォーマットに設定したテクスチャが Android の実機上ではどの様なフォーマットになっているかを RenderDoc を使って確認する方法を解説します。

事前準備

Render Doc の環境をまだ準備していない場合にはこちらの記事を参考に環境を作成しておいて下さい。

実機上では「非圧縮のRGBA」に変更されている事を確認

ここでは現状のほとんどの Androidバイスでは対応していない(※)「RGB Compressed DXT1」というフォーマットを使って確認します。 Graphic API は Open GL ES 3 を使用して検証する事にします。
NVIDIATegra GPU などが対応しています。

Unity のプロジェクトに card_frame というテクスチャを追加し、フォーマットを「RGB Compressed DXT1」にします。
f:id:nakamura001:20211007192157p:plain

これを「Development Build」を有効にして「Build And Run」を実行します。
f:id:nakamura001:20211007192004p:plain

こちらの記事を参考に Android アプリと RenderDoc を接続します。

「Texture View」タブに切り替えて「card_frame」のテクスチャを確認すると「RGB Compressed DXT1」を指定したにも関わらず、「非圧縮のRGBA(R8G8B8A8_UNORM)」になっている事が確認できます。
f:id:nakamura001:20211007191327p:plain

「ETC」だが NPOT の場合

次に「RGB Crunched ETC」でテストしてみます。 ETC フォーマットの場合には POT (2の乗数のサイズ) のテクスチャでないと駄目ですが card_frame の画像は 480x640 と NPOT (2の乗数では無いサイズ)な為に実際には「非圧縮のRGBA」が使われます。
f:id:nakamura001:20211007193221p:plain

RenderDoc で確認すると R8G8B8A8_UNORM になっています。
f:id:nakamura001:20211007193417p:plain

「ETC」で POT の場合

次に card_frame の画像を 256x256 と POT なサイズに変更して確認してみます。
f:id:nakamura001:20211007193729p:plain

確認すると「ETC」では無く、「ETC2(ETC2_RGB8_UNORM)」が使われてます。
f:id:nakamura001:20211007204720j:plain

「鎖」のアイコンをクリックして OpenGL ES のコマンドではどうなっているか確認します。
f:id:nakamura001:20211007210144p:plain

「GL_COMPRESSED_RGB8_ETC2」という事が確認できました。 ETC2 は ETC の上位互換が有り「GL_COMPRESSED_RGB8_ETC2」は「GL_OES_compressed_ETC1_RGB8_texture」と後方互換性が有ります。 という事でAndroid の実機上でもちゃんと「ETC」として扱われている事が確認できました。
f:id:nakamura001:20211007210111p:plain

ちなみに Graphic API を Vulkan に変更した場合の結果はこちら。
f:id:nakamura001:20211007215744p:plain
f:id:nakamura001:20211007215706p:plain

参考情報

Unityでビルド後の転送処理の時に以下のエラーが出る場合には RenderDoc を終了させて下さい。

Unable to start ADB server. Please make sure the Android SDK is installed and is properly configured in the Editor. See the Console for more details.

Unity で設定可能なテクスチャフォーマット。
Recommended, default, and supported texture compression formats, by platform - Unity マニュアル

ETC2 のフォーマットが ETC(ETC1) の上位互換で有るとの記述部分。
docs.imgtec.comKhronos Data Format Specification v1.1 rev 9

RGB ETC2 is a format for compressing RGB data. It is a superset of the older ETC1 format. This means that an older ETC1 texture can be decoded using an ETC2-compliant decoder. The main difference is that the newer version contains three new modes; the ‘T-mode’ and the ‘H-mode’ which are good for sharp chrominance blocks and the ‘Planar’ mode which is good for smooth blocks.

Android アプリに RenderDoc を接続する方法(Windowsの場合)

ここでは現在の最新版である RenderDoc 1.16 での設定方法を解説します。

RenderDoc のインストール

RenderDoc の公式サイトでここのボタンを押してインストラーを入手してインストールします。
f:id:nakamura001:20211007162912p:plain

Android と RenderDoc を接続

事前に以下の環境を整えておいて下さい。

  • Androidバイスは「開発者モード」が有効になっている
  • PC に adb(Android SDK)がインストールされている
  • Android Studio などでアプリにアタッチして行う処理を行っていると接続に失敗します。終了させておいて下さい

Androidバイスを PC に繋いだ状態でRenderDoc を起動し、画面の左下に有る「家」のアイコンをクリックします。
以下の様に接続している Androidバイスの名前が出てくるのでクリックします。
f:id:nakamura001:20211007164101p:plain
※ PC と Androidバイスの接続状況は RenderDoc のメニューから Tools > Manage Remote Servers と選択すると確認できます。

接続が成功すると Androidバイス上で自動的に RenderDoc が起動し、 PC 側の RenderDoc では「家」アイコンが有った場所がこの様な表示に切り替わります。
f:id:nakamura001:20211007171604p:plain

Android アプリ(パッケージ)と接続しアプリを起動

「Launch Application」というタブを選択。Executable Path の所の「...」ボタンをクリック。
f:id:nakamura001:20211007165106p:plain

するとこの様な表示になりますので矢印の所に表示されているパッケージ名から接続したいアプリのものを見つけます。
f:id:nakamura001:20211007165845p:plain
※ここで PC 内のフォルダが表示される場合には Androidバイスとの接続が切れています。再度、接続作業を行って下さい。

パッケージ名を選択すると右側に Activity が表示されるので接続したいものをダブルクリックします。
f:id:nakamura001:20211007170055p:plain

「Executable Path」に選択したものが入力されている事を確認し、「Launch」ボタンを押します。
f:id:nakamura001:20211007170341p:plain

描画情報のキャプチャ

新規にタブが追加され、この様な状態になります。「Capture Frame(s) Immediately」ボタンを押して、現在の描画情報をキャプチャします。
f:id:nakamura001:20211007170508p:plain

キャプチャが終わるとここにアプリ画面と同じサムネイル画像が表示されるのでダブルクリックします。
f:id:nakamura001:20211007171040p:plain

これで情報を持ってくる事ができました。後は「Texture View」など開き情報を確認して解析を行います。

Unity を使って iPhone 向けの AR コンテンツを簡単に作る方法(USDZファイルを出力する方法)

まずは 試してみる

iPhone での AR は Apple のこちらのサイトで体験できます。
developer.apple.com

iPhone 向けの AR コンテンツを作成

iPhone で簡単に AR コンテンツを作成するには USD(Universal Scene Description) 形式のファイルを準備をするのが一番簡単です。 USD は CGアニメ映画で有名な Pixar が作成したファイルフォーマットです。
USD ファイルは「 USD ファイルと関連するテクスチャファイルなど」という複数ファイルの構成となり、煩雑です。そこで iPhone の AR では USD ファイルでは無く、「 USD ファイルと関連するテクスチャファイルなど」を1つの非圧縮zipにまとめた「 USDZ 」というファイル形式を使用します。

Unity は既に公式で USD フォーマットに対応しています。Unity公式ブログのこちらの記事に Untiy で USD を使える様にするパッケージの事について書かれていますがパッケージの追加は現在では手順が変わっている為、手順を解説しておきます。

USD を使える様にするパッケージを追加

USD のパッケージについては Unityのドキュメントのこちらのページに記載が有ります。

このページを見るとパッケージ名が com.unity.formats.usd だという事が確認できます。
f:id:nakamura001:20210930052504p:plain

これからこのパッケージ名を使ってパッケージを追加します。

Package Manager を開き、「+」アイコンをクリック > 「Add Package from git URL」と選択
f:id:nakamura001:20210930035652p:plain

com.unity.formats.usd と入力し、「Add」ボタンをクリック。
f:id:nakamura001:20210930035704p:plain

この画面の「install」ボタンをクリックすると USD パッケージを追加できます。
f:id:nakamura001:20210930040307p:plain

パッケージの追加以外の部分についてはこちらの記事の内容がそのまま使えます。シーンの色空間を「Linear」に変更するところから「Skin Weights」を「Unlimited」に設定する所までの作業を行って下さい。

USD ファイルで保存する環境を構築

Unity 上に配置したオブジェクトを USD 形式のファイルとして出力する為に Unity Recorder パッケージを追加します。

Package Manager を開き、表示を「Unity Registry」に変更。
f:id:nakamura001:20210930042628p:plain

「Recorder」で検索すると「Unity Recorder」が見つかるのでこちらを追加します。
f:id:nakamura001:20210930042630p:plain

USDZ ファイルに保存

環境の準備が終わったのでいよいよ USDZ ファイルに保存する方法の解説です。

まず、Unity のシーン上に USDZ ファイルに保存したい 3D モデルを配置しておきます。

メニューから Window > General > Recorder > Recorder Window と選択すると以下のウィンドウが表示されます。
f:id:nakamura001:20210930043723p:plain

「+ Add Recorder」をクリック > 「USD Clip」と選択すると以下の様になります。
f:id:nakamura001:20210930044710p:plain

Capture の Source に USDZ ファイルに保存したい GameObject を設定します。
f:id:nakamura001:20210930044720p:plain


「Export Format」を「USDZ」に変更します。
f:id:nakamura001:20210930051348p:plain

「START RECORDING」ボタンを押すと「STOP RECORDING」と表示が切り替わり、ゲームが実行されます。ゲームの起動が終わったら「STOP RECORDING」ボタンを押します。
f:id:nakamura001:20210930051419p:plain

これで USDZ ファイルが作成されました。このアイコンをクリックすると保存されたフォルダが開きます。
f:id:nakamura001:20210930051644p:plain

iPhone で AR 表示を確認

作成した USDZ ファイルは「メールで送る」「Dropboxに保存して開く」など何らかの方法を使って iPhone 上で開くだけで AR 表示ができます。

なお、 Unity 上でアニメーションを付けておくとアニメーションも AR 上で再生されます。