Empower great multiplayer experiences with Relay and Lobby - Unity Weekly #041

Unity Official

Relay と Lobby で素晴らしいマルチプレイヤー体験を実現しよう

00

Relay と Lobby で素晴らしいマルチプレイヤー体験を実現しよう | Unity Blog

先日 Unity Gaming Services にリリースされたマルチプレイヤーサービスである Relay と Lobbyについて、それらのサービスの紹介とRelayとLobbyを組み合わせることでプロジェクトにどのような恩恵が受けられるのかについて説明しています。

また、RelayとLobbyのサンプルプロジェクトチュートリアル動画 をそれぞれ紹介しています。

Articles

無限ループでフリーズした Unity を復帰させる方法

01

【Unity】無限ループでフリーズした Unity を復帰させる方法 - コガネブログ

Unityで無限ループを発生させたときに、無限ループから抜け出す方法を3つ紹介しています。

  • Unityの再生をショートカットで一時停止させる 「Emergency Exit」を利用する方法
  • Visual Studioのステートメントを用いてブレイクポイントにかかったときに次に実行する行を強制的に変更することで無限ループを抜ける方法
  • Visual Studioのイミディエイトウィンドウを用いてブレイクポイントにかかったときに変数の値を書き換えることで無限ループを抜ける方法

Unity URPでGPU処理負荷を画面に出してみる

02

Unity URPでGPU処理負荷を画面に出してみる|黒河優介|note

Universal Render Pipeline(URP)で上記のような項目別のGPU負荷を表示する機能を実装するための方法について解説しています。

現在利用している ScriptableRenderer から ScriptableRenderPass の一覧を収集し、そのなかから ProfilingSampler の一覧を収集して、サンプラーからそれぞれのパスの負荷を取得して、UIに表示しています。

実装はサンプラーなどが公開されていないためリフレクションを介して行っています。

The safest way to use DOTS in your MonoBehaviour project

03

The safest way to use DOTS in your MonoBehaviour project – COFFEE BRAIN GAMES

この記事では、記事の著者が開発している Academia : School Simulator で行ったMonoBehaviourとオブジェクト指向で実装していたプロジェクトをDOTSベースのシステムに置き換えた経験をもとに、移行方法のプラクティスを紹介しています。

DOTSでは参照型が利用できないため同等の処理をBurstによる最適化の恩恵を受けるようにどのように書き直すのか、また、Transformが絡むようなケースでどのように書き換えるのかについて解説しています。

また、上記の移行の際に問題となる配列の都度コピーのパフォーマンスを改善するために、永続的な配列確保と、オブザーバーパターンを導入してコピーした配列の保守を簡単にする方法についても言及しています。

Unity Localization を用いた多言語対応の実装方法

04

Unity Localization を用いた多言語対応の実装方法 - デニッキ!

Unity Localization を用いたアプリケーションの多言語対応の実装方法について解説しています。

Unity Localizationのインストール方法から、ロケールの作成やデフォルトロケールなどの基本的なローカライズの設定方法、ロケールの判定ロジックの説明と IStartupLocaleSelector による独自のロケール判定の実装、画像などのアセットや文字列のローカライズ方法についてそれぞれ詳細に解説されています。

Publish Asset Store UPM package on which LTS version?

Publish Asset Store UPM package on which LTS version?

Introloopnative-audiotiny-ambience開発・メンテナンスしている著者が、Unity Package Manager(UPM)でパッケージを公開する上で、どのLTSバージョンをサポートするべきかについて考えをまとめた記事です。

現状では、すべてのUPM Assetを2019.4 LTSで開発するほうが良いと著者は結論づけていますが、2017および2018LTSをサポートするにあたって、パッケージ管理として欠落しているasmdefの機能を取り上げながら、その理由について解説しています。

また、新しいUnityのバージョン向けに機能を提供する方法として、 package.json に定義できる Version Definitions についても言及しています。

Better Collider Generation with Asset Processors

05

Better Collider Generation with Asset Processors – Bronson Zgeb

Asset Processorsというエディタスクリプトを用いて、アセットインポート時にアセットの加工を行う方法を、モデルインポート時に独自でコリジョンを生成する例を交えながら解説しています。

AssetProcessor.OnPostprocessModel を継承して、モデルアセットをインポートした際に処理を差し込む方法から、ヒエラルキー上に特定の名前のノードが存在する場合に、コリジョンを生成する方法、組み込まれたメッシュからメッシュコリジョンを生成する方法について、それぞれ説明しています。

【URP】Light Layersで特定のオブジェクトにだけ影響するライトを作る

06

【Unity】【URP】Light Layersで特定のオブジェクトにだけ影響するライトを作る - LIGHT11

Unity 2021.2 からUniversal Render Pipeline(URP)利用できる Light Layers を用いてライトにレイヤーをもたせることができるようになりました。この記事では、Light Layersを用いて特定のオブジェクトにしかライティングの影響を与えないようなライトを作成する方法について解説しています。

Unity Vivox (UGS版) でボイスチャット・テキストチャットを行う【Unity Gaming Services】

07

Unity Vivox (UGS版) でボイスチャット・テキストチャットを行う【Unity Gaming Services】 - デニッキ!

Unity Gaming Services(UGS)として発表されたVivoxというボイス・テキストチャットサービスについて、処理フローやパッケージのインストール方法、ダッシュボードでのプロジェクトのセットアップ方法、サービスを用いたテキストチャットとボイスチャットの実装について解説しています。

また、それぞれUGSとUnity SDK(UGS版ではない、以前から存在したVivoxのUnity SDK)のVivoxの相違点についても触れています。

UnityでC#のアセンブラを見る

UnityでC#のアセンブラを見る – NotNullVariable

unity-asm-explorer-packageというツールを用いて、Unityエディタ上で、UnityのMonoがJITに吐き出すアセンブラを確認する方法について紹介しています。

unity-asm-explorer-packageのインストール方法および、Unityバージョンにおける注意点、ビルドしたアプリで、実際にMonoが吐き出すアセンブラを確認する方法について説明しています。

iOSでウィンドウからSafeAreaを取得するプラグインを作る

【Unity】iOSでウィンドウからSafeAreaを取得するプラグインを作る - Qiita

iOS15でUnityの提供するSafeArea取得APIである Screen.safeArea が正常な値を返さないという不具合の紹介とその事情の説明と、独自のiOSプラグインによってSafeAreaを取得する方法について解説しています。

Unity公式のNetcode for GameObjectsのHelloWorldチュートリアルを改造しつつ触ってみた

Unity公式のNetcode for GameObjectsのHelloWorldチュートリアルを改造しつつ触ってみた - Synamon’s Engineer blog

先日リリースされた Netcode for GameObjectsHelloWorldチュートリアルを改良しながら、Netcode for GameObjectsのその仕組みについて解説しています。

また、NetworkManagerとNetworkObjectの利用方法、RPCとして利用するメソッドの命名規則、NetworkVariableの書き換え、通信のラグの考慮についてそれぞれ言及しています。

そろそろShaderをやるパート47 水面の歪みのような表現

08

そろそろShaderをやるパート47 水面の歪みのような表現

上記画像のような、水面の歪みを表現するシェーダーの実装について解説しています。

GrabPassを用いて水面以外のオブジェクトの描画結果を取得して、その結果に対して水面より下を歪ませて、最後に水面を描画しています。

GrabPassの利用方法から、深度情報を用いた水面下の歪ませる対象の塗り分けと歪ませ方、水面の描画についてそれぞれ説明しています。

シェーダーグラフのカスタムライティング

09

【Unity】シェーダーグラフのカスタムライティング – 株式会社ロジカルビート

Shader Graphのカスタムノードについて、その作成方法とそのシェーダー内でのライト情報へのアクセスの仕方、ライト計算を行ってライティングをカスタマイズする方法についてそれぞれ解説しています。

AndroidのSpeechRecognizer APIレベル30以上で実装する

[Unity] AndroidのSpeechRecognizer APIレベル30以上で実装する - Qiita

Unity 2018.4.19fのプロジェクトでAndroid APIレベルを30以上に引き上げて、Speech Recognizer APIを利用する方法について紹介しています。

aarのtargetSdkVersionのアップデート、AndroidManifestへの queries の追記、UnityプロジェクトのTarget API Levelを強制的に30へ引き上げ、Custom Base Gradle Templateを用いてビルドに用いるgradleのバージョンを引き上げることTarget API レベルの30への引き上げを実現しています。

Unity Hubをベータ版にする方法と、Unity HubからAppleシリコン版(M1 Mac用)のUnityをインストールする方法

Unity Hubをベータ版にする方法と、Unity HubからAppleシリコン版(M1 Mac用)のUnityをインストールする方法【Unity】 - (:3[kanのメモ帳]

Apple Sliconにネイティブ対応したUnity Hubをインストールする方法と、同じくネイティブ対応したエディタのインストール方法、エディタがIntel版かApple Slicon版かを見分ける方法について解説しています。

UnityEditor上でGameObjectをUpdateさせる方法

UnityEditor上でGameObjectをUpdateさせる方法 - Qiita

エディター中に、プレイヤーループを強制的に実行するハック。

エディター中でも確実に実行されるOnRenderObject 内で、 EditorApplication.QueuePlayerLoopUpdate を呼びだして強制的にプレイヤーループを回して、その後 SceneView.RepaintAll でシーンを再描画することでこれらを実現しています。

VIVE Flow の Unity環境構築してCubeを表示するまで / Input周りを調べた

VIVE FlowのUnity環境構築してCubeを表示するまで

VIVE Flow のInput周りを調べた

HTCから2021/11/18に発表されたVIVE Flowのアプリを、VIVE Wave XR Pluginを用いて開発する方法について解説しています。

記事ではプラグインの導入方法からCubeを配置したシーンをビルドして実機で確認する方法と、UnityEngine.XRを用いて、VIVE Flowに連携しているスマホから入力を受け取る方法についてそれぞれ説明しています。

SNSシェア機能を実装できるアセット【NatShare】

10

【Unity】SNSシェア機能を実装できるアセット【NatShare】 - トマシープが学ぶ

OSのシェア機能を呼び出してテキストや画像をシェアするNatShareについて、その導入方法から利用方法、それぞれのSNSでのシェア結果について、サンプルつきで解説しています。

Unity Test Runnerの使い方を理解する

Unity Test Runnerの使い方を理解する - Qiita

Unity Test Runnerについてその導入方法からEditMode・PlayModeの違い、テストを書く際のフォルダ構成、テストの書き方と実行方法、テスト前後の処理(Setup / TearDown)について紹介しています。