<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: KOGA Mitsuhiro</title>
    <description>The latest articles on DEV Community by KOGA Mitsuhiro (@shiena).</description>
    <link>https://dev.to/shiena</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F42240%2Fd376d362-2e6c-4ea0-afda-90d3a994d8e3.jpeg</url>
      <title>DEV Community: KOGA Mitsuhiro</title>
      <link>https://dev.to/shiena</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shiena"/>
    <language>en</language>
    <item>
      <title>Unity2018.2 + il2cppでgRPCアプリをAndroid/iOS向けにビルドする</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sat, 04 Apr 2020 20:35:00 +0000</pubDate>
      <link>https://dev.to/shiena/unity2018-2-il2cpp-grpc-android-ios-95o</link>
      <guid>https://dev.to/shiena/unity2018-2-il2cpp-grpc-android-ios-95o</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;「&lt;a href="https://qiita.com/muroon/items/2115c2c72be8b0c3f5f6"&gt;UnityでgRPCアプリ(iOS, Android)をビルドできるようになった&lt;/a&gt;」でUnityのiOS, AndroidでもgRPCアプリを動かせるようになりました。&lt;br&gt;
ここから更にil2cppでビルドする際に起きる問題の対処をまとめました。&lt;/p&gt;
&lt;h1&gt;
  
  
  共通
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;*.proto&lt;/code&gt;で&lt;code&gt;oneof&lt;/code&gt;か&lt;code&gt;enum&lt;/code&gt;を使っている場合は&lt;code&gt;System.Reflection.Emit&lt;/code&gt;が走って実行時エラーになってしまいます。&lt;br&gt;
&lt;code&gt;protoc&lt;/code&gt;で生成したコード中の&lt;code&gt;enum&lt;/code&gt;すべてを以下の&lt;code&gt;T&lt;/code&gt;に指定すると回避できます。&lt;br&gt;
&lt;code&gt;oneof&lt;/code&gt;で&lt;code&gt;enum&lt;/code&gt;を使った場合はそのフィールドを含むクラスもこの対策が必要みたいです。RPC周りの例外メッセージに&lt;code&gt;System.Reflection.Emit&lt;/code&gt;が出てきたら対象のクラスを指定すれば大丈夫だと思います。&lt;/p&gt;

&lt;p&gt;一度だけ実行すればいいので静的コンストラクタなどに書いておくといいでしょう。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Google.Protobuf.Reflection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;FileDescriptor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ForceReflectionInitialization&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Android向け
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/grpc/grpc/pull/18039"&gt;C#: Fix il2cpp build on Unity Android. #18039&lt;/a&gt;でダミー関数がマージされたのでコピー不要になりました。&lt;/p&gt;

&lt;p&gt;&lt;del&gt;DLLImportの名前が合わずにリンク時にビルドエラーが発生してしまいます。&lt;br&gt;
Unity2018.2からPluginsフォルダにcppを配置するとビルドされるようになったので、以下のダミー関数のソースを配置しInclude Platformsから&lt;code&gt;iOS&lt;/code&gt;と&lt;code&gt;Editor&lt;/code&gt;を除外します。&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;del&gt;&lt;a href="https://github.com/jsmouret/grpc-unity-package/blob/master/Plugins/Grpc.Core/runtimes/grpc_csharp_ext_stub.c"&gt;/Assets/Plugins/Grpc.Core/runtimes/grpc_csharp_ext_stub.c&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/jsmouret/grpc-unity-package/blob/master/Plugins/Grpc.Core/runtimes/grpc_csharp_ext_stub.c.meta"&gt;/Assets/Plugins/Grpc.Core/runtimes/grpc_csharp_ext_stub.c.meta&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YD1Ev_2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hu64kv8k014ruyu8lm2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YD1Ev_2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hu64kv8k014ruyu8lm2k.png" alt="image.png" width="704" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ネットワークアクセスがgRPCのみだと&lt;code&gt;AndroidManifest.xml&lt;/code&gt;に&lt;code&gt;INTERNET&lt;/code&gt;パーミッションが付与されません。&lt;br&gt;
確実に有効にするために&lt;code&gt;PlayerSettings &amp;gt; Other Settings &amp;gt; Internet Access&lt;/code&gt;を&lt;code&gt;Require&lt;/code&gt;にします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JHiSJpga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x5bum7fn2vjhzxdic18o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JHiSJpga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/x5bum7fn2vjhzxdic18o.png" alt="image.png" width="880" height="111"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  iOS向け
&lt;/h1&gt;

&lt;p&gt;iOS向けのライブラリのアーキテクチャはx86_64とarm64だけなので&lt;code&gt;PlayerSettings &amp;gt; Other Settings &amp;gt; Architecture&lt;/code&gt;を&lt;code&gt;ARM64&lt;/code&gt;にします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dT2uWGgn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fiiit58ccoj9umaqvd4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dT2uWGgn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fiiit58ccoj9umaqvd4b.png" alt="image.png" width="614" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;また、bitcode非対応なのでXCodeの&lt;code&gt;Build Settings&lt;/code&gt;で&lt;code&gt;ENABLE_BITCODE&lt;/code&gt;を&lt;code&gt;NO&lt;/code&gt;にします。&lt;br&gt;
&lt;del&gt;&lt;a href="https://github.com/grpc/grpc/pull/20113"&gt;Enable bitcode for ios native libraries #20113&lt;/a&gt;でbitcodeに対応するビルドオプションが追加されたので対処不要になりました。&lt;/del&gt;&lt;br&gt;
bitcode対応すると&lt;code&gt;libgrpc.a&lt;/code&gt;が250MB以上増えたので&lt;a href="https://github.com/grpc/grpc/tree/v1.24.x"&gt;v1.24.x&lt;/a&gt;ブランチは&lt;a href="https://github.com/grpc/grpc/pull/20233"&gt;Revert "Enable bitcode for ios native libraries" in v1.24.x #20233&lt;/a&gt;で、masterブランチは&lt;a href="https://github.com/grpc/grpc/commit/a2dbf0a99d1fc1c0059dbb28c4b530a58584cd71"&gt;a2dbf0a99d1fc1c0059dbb28c4b530a58584cd71&lt;/a&gt;で差し戻されてしまいました。&lt;/p&gt;

&lt;p&gt;リンク対象のライブラリに&lt;code&gt;libz&lt;/code&gt;が必要なので&lt;code&gt;Build Phases &amp;gt; Link Binary With Libraries&lt;/code&gt;から追加します。&lt;/p&gt;

&lt;p&gt;この操作は以下のエディタ拡張を配置すればビルド時に自動的に反映できます。&lt;/p&gt;

&lt;p&gt;&lt;del&gt;参考にした&lt;a href="https://github.com/jsmouret/grpc-unity-package/blob/master/example/UnityGrpcClient/Assets/Scripts/Editor/BuildHelper.cs"&gt;BuildHelper.cs&lt;/a&gt;は&lt;code&gt;libresolv.tbd&lt;/code&gt;を追加していますがビルドエラーにならなかったので今も必要なのかよく分かりません…&lt;/del&gt;&lt;br&gt;
参考にした先と公式ではビルドオプションが異なり、公式のライブラリを使うなら&lt;code&gt;libresolv.tbd&lt;/code&gt;は不要でした。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#if UNITY_IPHONE

using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public class BuildHelper
{
    // Add libz.tbd and disable bitcode when building for iOS
    // Thanks to https://github.com/jsmouret/grpc-unity-package/blob/master/example/UnityGrpcClient/Assets/Scripts/Editor/BuildHelper.cs

    [PostProcessBuildAttribute(1)]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        if (target == BuildTarget.iOS)
        {
            var projectPath = PBXProject.GetPBXProjectPath(path);
            var project = new PBXProject();
            project.ReadFromString(File.ReadAllText(projectPath));
            var targetGUID = project.TargetGuidByName(PBXProject.GetUnityTargetName());

            project.AddFrameworkToProject(targetGUID, "libz.tbd", false);

            project.SetBuildProperty(targetGUID, "ENABLE_BITCODE", "NO");

            File.WriteAllText(projectPath, project.WriteToString());
        }
    }
}

#endif
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  最後に
&lt;/h1&gt;

&lt;p&gt;2018/10/15現在、このような対策が必要ですが今後不要になったり対策が変わるかもしれないので&lt;a href="https://github.com/grpc/grpc"&gt;grpc/grpc&lt;/a&gt;や&lt;a href="https://github.com/protocolbuffers/protobuf"&gt;protocolbuffers/protobuf&lt;/a&gt;のissuesなどで動向を追ってください。&lt;/p&gt;

&lt;p&gt;※追記&lt;br&gt;
Experimentalパッケージが出る前のバージョンは「&lt;a href="https://blog.applibot.co.jp/2018/10/31/grpc-in-unity/"&gt;UnityプロジェクトでのgRPC導入方法について&lt;/a&gt;」の手順でビルドすれば利用できるようです。&lt;/p&gt;

&lt;h1&gt;
  
  
  参考リンク
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/muroon/items/2115c2c72be8b0c3f5f6"&gt;UnityでgRPCアプリ(iOS, Android)をビルドできるようになった&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sassembla.github.io/Public/2018:08:05%201-07-27/2018:08:05%201-07-27.html"&gt;Unity(IL2CPP環境)でのprotobufの使い方&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.applibot.co.jp/2018/10/31/grpc-in-unity/"&gt;UnityプロジェクトでのgRPC導入方法について&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jsmouret/grpc-unity-package"&gt;jsmouret/grpc-unity-package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/protocolbuffers/protobuf/pull/4559"&gt;protocolbuffers/protobuf - Fix to allow AOT compilers to play nicely with reflection #4559&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/issues/15013#issuecomment-417714017"&gt;grpc/grpc - Unity3D package #15013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/issues/16012#issuecomment-404995041"&gt;grpc/grpc - Compile error on Unity Android (when using il2cpp scripting backend) #16012&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/pull/18039"&gt;grpc/grpc - C#: Fix il2cpp build on Unity Android. #18039&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/issues/16839"&gt;grpc/grpc - Xcode reports libgrpc_csharp_ext.a does not contain bitcode #16839&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/pull/20113"&gt;grpc/grpc - Enable bitcode for ios native libraries #20113&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grpc/grpc/pull/20233"&gt;grpc/grpc - Revert "Enable bitcode for ios native libraries" in v1.24.x #20233&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
      <category>grpc</category>
    </item>
    <item>
      <title>Unite Tokyo 2019で発表されたUnity Render Streamingを試す</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sat, 04 Apr 2020 20:34:00 +0000</pubDate>
      <link>https://dev.to/shiena/unite-tokyo-2019-unity-render-streaming-lkg</link>
      <guid>https://dev.to/shiena/unite-tokyo-2019-unity-render-streaming-lkg</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;Unity Render StreamingとはUnityのゲーム画面をWebブラウザに流し、Webブラウザからはキーボード、マウス、タッチ、ボタンで入力できるようにした仕組みです。この仕組みでHDRPをサポートしないPCでもブラウザ経由で確認できるといったもののようです。詳細や制約などは&lt;a href="https://blogs.unity3d.com/jp/2019/09/17/stream-high-quality-real-time-graphics-through-your-browser-with-our-new-webrtc-framework/"&gt;Unity &amp;amp; WebRTC – ブラウザーと Unity を繋げる – Unity Blog&lt;/a&gt;が詳しいです。&lt;br&gt;
この仕組みは&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.renderstreaming/Documentation~/jp/index.md"&gt;チュートリアル&lt;/a&gt;が用意されていてHDRPのサンプルプロジェクトで動作確認できます。&lt;br&gt;
なかなか面白い仕組みなのでサンプルプロジェクトを調べて自前のプロジェクトに組込む手順をまとめました。&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Unity Render Streaming &lt;a href="https://t.co/ak84aB2Gw8"&gt;&lt;/a&gt;&lt;a href="https://t.co/ak84aB2Gw8"&gt;https://t.co/ak84aB2Gw8&lt;/a&gt; &lt;a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw"&gt;@YouTube&lt;/a&gt;さんから&lt;/p&gt;— KOGA Mitsuhiro (&lt;a class="mentioned-user" href="https://dev.to/shiena"&gt;@shiena&lt;/a&gt;) &lt;a href="https://twitter.com/shiena/status/1178352469711024129?ref_src=twsrc%5Etfw"&gt;September 29, 2019&lt;/a&gt;
&lt;/blockquote&gt; 
&lt;h1&gt;
  
  
  使い方
&lt;/h1&gt;
&lt;h2&gt;
  
  
  試した環境
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10&lt;/li&gt;
&lt;li&gt;Unity2019.2.6f1&lt;/li&gt;
&lt;li&gt;Unity Render Streaming 1.1.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;更に&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.template.renderstreaming/Documentation~/jp/index.md"&gt;ドキュメント&lt;/a&gt;によるとGraphics APIは&lt;code&gt;DirectX11&lt;/code&gt;のみをサポートして、&lt;a href="https://developer.nvidia.com/video-encode-decode-gpu-support-matrix"&gt;NVIDIA VIDEO CODEC SDK&lt;/a&gt;に公開されているグラフィックボードを推奨しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  インストール
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Package Managerを開き、&lt;code&gt;Advanced&lt;/code&gt;から&lt;code&gt;Show dependencies&lt;/code&gt;と&lt;code&gt;Show preview packages&lt;/code&gt;をチェックします。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NAJQo3P9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm2u8osvijn9ytr6yoyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NAJQo3P9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm2u8osvijn9ytr6yoyw.png" alt="image.png" width="880" height="527"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;In Project&lt;/code&gt;をクリックして&lt;code&gt;All packages&lt;/code&gt;に切り替えます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;パッケージ一覧から&lt;code&gt;Unity Render Streaming&lt;/code&gt;を探して右下の&lt;code&gt;Install&lt;/code&gt;ボタンからインストールします。検索窓に&lt;code&gt;Streaming&lt;/code&gt;と入力するとパッケージ一覧を絞りこめるので探すのが楽です。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EmrmVyOm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c634yqq9b0dre09xvkh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EmrmVyOm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c634yqq9b0dre09xvkh8.png" alt="image.png" width="880" height="527"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unity Render StreamingはInput Systemに依存していて有効にするか確認ダイアログが出るので問題なければ&lt;code&gt;Yes&lt;/code&gt;ボタンを押します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rBATt-dE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m5935dw32i0mrukgqbha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rBATt-dE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m5935dw32i0mrukgqbha.png" alt="image.png" width="583" height="268"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webサーバーとの連携はサンプルプロジェクトのスクリプトを流用すると楽なので取り込みます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;もう一度Package ManagerからUnity Render Streamingを選択してHDRPの&lt;code&gt;Import in project&lt;/code&gt;ボタンを押します。
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hZLGtjxc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mjooq7okhp7xwfieu6et.png" alt="image.png" width="880" height="526"&gt;
&lt;/li&gt;
&lt;li&gt;サンプルプロジェクトをインポートするダイアログが開くので&lt;code&gt;Scripts&lt;/code&gt;のみ選択して&lt;code&gt;インポート&lt;/code&gt;ボタンを押します。
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SCIw3Zde--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ua9w9f4ucpg9qqhcdq3w.png" alt="image.png" width="666" height="984"&gt;
&lt;/li&gt;
&lt;li&gt;サンプルプロジェクトは&lt;code&gt;High Definition RP&lt;/code&gt;に依存していて&lt;code&gt;Import in project&lt;/code&gt;ボタンを押した時にインストールされています。ですが不要ならアンインストールしても構いません。&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Render Streamingの設定
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;まずはブラウザに表示するカメラをHierarhyに追加して&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/SimpleCameraController.cs"&gt;SimpleCameraController&lt;/a&gt;をアタッチ、Audio Listenerを削除します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8RlRdUaL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hwyq6njmf44c4757awqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8RlRdUaL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hwyq6njmf44c4757awqi.png" alt="image.png" width="880" height="535"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;次にRender Streaming用に空のGameObjectをHierarhyを追加して&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/RenderStreaming.cs"&gt;RenderStreaming&lt;/a&gt;をアタッチ、&lt;code&gt;CaptureCamera&lt;/code&gt;にブラウザ用カメラを設定します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qzh_X19x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9x9hxsfeh1dtz4z5w72o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qzh_X19x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9x9hxsfeh1dtz4z5w72o.png" alt="image.png" width="880" height="535"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;メニュー &amp;gt; Render Streaming &amp;gt; Download web appからWebサーバーをダウンロードします。保存先はデフォルトでプロジェクト直下ですがどこに保存しても構いません。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xVM-Dipl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eollxd9rhjgiifdx7j85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xVM-Dipl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eollxd9rhjgiifdx7j85.png" alt="image.png" width="819" height="1129"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nkXn5go0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w9o12acjzdtqzu2zp3oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nkXn5go0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w9o12acjzdtqzu2zp3oy.png" alt="image.png" width="880" height="657"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Render Streamingを試す
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;ダウンロードした&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/releases/tag/1.1.1-preview"&gt;webserver.exe&lt;/a&gt;を実行します。&lt;/li&gt;
&lt;li&gt;Unityエディタのプレイボタンを押してゲームを実行します。&lt;/li&gt;
&lt;li&gt;ブラウザで&lt;code&gt;http://localhost&lt;/code&gt;を開きます。再生ボタンが表示されているのでクリックしてしばらく待つとゲーム画面が表示されます。&lt;/li&gt;
&lt;li&gt;ブラウザで左ドラッグすると移動、右ドラッグすると回転します。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;この動画ではブラウザを操作した時にカメラのTransformが変化しているのが分かると思います。&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Unity Render Streaming &lt;a href="https://t.co/ak84aB2Gw8"&gt;&lt;/a&gt;&lt;a href="https://t.co/ak84aB2Gw8"&gt;https://t.co/ak84aB2Gw8&lt;/a&gt; &lt;a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw"&gt;@YouTube&lt;/a&gt;さんから&lt;/p&gt;— KOGA Mitsuhiro (&lt;a class="mentioned-user" href="https://dev.to/shiena"&gt;@shiena&lt;/a&gt;) &lt;a href="https://twitter.com/shiena/status/1178352469711024129?ref_src=twsrc%5Etfw"&gt;September 29, 2019&lt;/a&gt;
&lt;/blockquote&gt; 
&lt;h2&gt;
  
  
  ブラウザ側のボタンカスタマイズ
&lt;/h2&gt;

&lt;p&gt;残念ながらダウンロードしたバイナリのwebサーバーはボタンに関してカスタマイズできないようです。&lt;br&gt;
&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/tree/1.1.1-preview/WebApp"&gt;Webサーバーソース&lt;/a&gt;をダウンロードして、&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/WebApp/public/scripts/app.js#L42-L67"&gt;app.js#L42-L67&lt;/a&gt;あたりを変更すると任意のテキストと色のボタンを作れそうです。&lt;br&gt;
また、ブラウザの入力は&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.template.renderstreaming/Documentation~/jp/input.md"&gt;ブラウザ入力処理&lt;/a&gt;に従って送信されて&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/RemoteInput.cs"&gt;RemoteInput.cs&lt;/a&gt;でいい感じに処理がふりわけられるようです。&lt;/p&gt;

&lt;h1&gt;
  
  
  参考リンク
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blogs.unity3d.com/jp/2019/09/17/stream-high-quality-real-time-graphics-through-your-browser-with-our-new-webrtc-framework/"&gt;Unity &amp;amp; WebRTC – ブラウザーと Unity を繋げる – Unity Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.renderstreaming/Documentation~/jp/index.md"&gt;チュートリアル&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/"&gt;https://github.com/Unity-Technologies/UnityRenderStreaming/&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.template.renderstreaming/Documentation~/jp/index.md"&gt;ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Packages/com.unity.template.renderstreaming/Documentation~/jp/input.md"&gt;ブラウザ入力処理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/tree/1.1.1-preview/WebApp"&gt;Webサーバーソース&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/WebApp/public/scripts/app.js#L42-L67"&gt;app.js#L42-L67&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/SimpleCameraController.cs"&gt;SimpleCameraController.cs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/RenderStreaming.cs"&gt;RenderStreaming.cs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/UnityRenderStreaming/blob/1.1.1-preview/Assets/Scripts/RemoteInput.cs"&gt;RemoteInput.cs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.nvidia.com/video-encode-decode-gpu-support-matrix"&gt;NVIDIA VIDEO CODEC SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
    </item>
    <item>
      <title>UnityのUniversalRPで開発中のCamera Stacking Systemを試す</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Mon, 30 Mar 2020 09:05:00 +0000</pubDate>
      <link>https://dev.to/shiena/unity-universalrp-camera-stacking-system-m5k</link>
      <guid>https://dev.to/shiena/unity-universalrp-camera-stacking-system-m5k</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;現在はUnity2019.3以上のPackage ManagerからCamera Stacking Systemに対応したUniversalRP7.2以上をインストールできます。&lt;br&gt;
また&lt;a href="https://github.com/Unity-Technologies/UniversalRenderingExamples"&gt;UniversalRenderingExamples&lt;/a&gt;の&lt;a href="https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/Character-UI"&gt;Character UI&lt;/a&gt;と&lt;a href="https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/3D-Skybox"&gt;3D Skybox&lt;/a&gt;にCamera Stacking Systemを利用したサンプルプロジェクトがあります。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Character UI&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wRd3iYjo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/images/3D-Character-UI/Main.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wRd3iYjo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/images/3D-Character-UI/Main.gif" alt="Main.gif" width="740" height="485"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;3D Skybox&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Om0C-5Rj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/images/3D-Skybox/Main.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Om0C-5Rj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Unity-Technologies/UniversalRenderingExamples/wiki/images/3D-Skybox/Main.gif" alt="Main.gif" width="740" height="485"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;UnityのLWRPはカメラスタックをサポートしないと明言されていました。&lt;br&gt;
流石に不便だったのかUnity2019.2のロードマップにカメラスタックが追加されました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/document/d/1GDePoHGMngJ-S0Da0Fi0Ky8jPxYkQD5AkVFnoxlknUY/edit"&gt;Camera Rendering in LWRP&lt;/a&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;2019.2 でCamera Stacking Systemが実装されるので、LWRPでカメラの結果を重ねるのはそこから可能になる感じですね &lt;a href="https://t.co/4HoWunmCQv"&gt;pic.twitter.com/4HoWunmCQv&lt;/a&gt;&lt;/p&gt;— h.omae (@pigeon6) &lt;a href="https://twitter.com/pigeon6/status/1121268133530984449?ref_src=twsrc%5Etfw"&gt;April 25, 2019&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;p&gt;残念ながら2019.2のリリースに間に合わなかったのですが&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/pull/5462"&gt;Universal/2019.3/backports by phi-lira · Pull Request #5462&lt;/a&gt;で&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3"&gt;release/2019.3&lt;/a&gt;ブランチにマージされたので試してみます。&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Camera Stacking for URP has landed in main code base. This is definitely the longest PR I did in my life (6+ months), but it's finally here. This is target to be released in 7.2.0 package for URP end of this month. &lt;a href="https://t.co/5Pi19Lzot3"&gt;&lt;/a&gt;&lt;a href="https://t.co/5Pi19Lzot3"&gt;https://t.co/5Pi19Lzot3&lt;/a&gt;&lt;/p&gt;— Felipe Lira (@phi_lira) &lt;a href="https://twitter.com/phi_lira/status/1215231019294560256?ref_src=twsrc%5Etfw"&gt;January 9, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;p&gt;現在は&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline"&gt;master&lt;/a&gt;ブランチと&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3"&gt;release/2019.3&lt;/a&gt;ブランチにマージされました。以下はそれぞれのブランチに対するPull Requestです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/pull/5260"&gt;Universal Camera Stacking by phi-lira · Pull Request #5260&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/pull/5462"&gt;Universal/2019.3/backports by phi-lira · Pull Request #5462&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;またドキュメントは&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/master/com.unity.render-pipelines.universal/Documentation~/cameras.md"&gt;com.unity.render-pipelines.universal/Documentation~/cameras.md&lt;/a&gt;に用意されています。&lt;/p&gt;
&lt;h1&gt;
  
  
  Camera Stacking System
&lt;/h1&gt;
&lt;h2&gt;
  
  
  環境
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Unity2019.3.0f3&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3"&gt;release/2019.3ブランチ&lt;/a&gt;のUniversalRP 7.2.0&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://assetstore.unity.com/packages/essentials/unity-samples-ui-25468"&gt;Unity Samples: UI&lt;/a&gt; (動作確認用)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  UniversalRPのダウンロード
&lt;/h2&gt;

&lt;p&gt;zipでダウンロードする方法とgitでcloneする方法、更にgitで対象のフォルダのみcloneする方法がありそれぞれ利点、欠点があるので使いやすい方法を選んでください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zipでダウンロード

&lt;ul&gt;
&lt;li&gt;利点: ブラウザからダウンロードできる&lt;/li&gt;
&lt;li&gt;欠点: zipのサイズが1GB程度ある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;gitでclone

&lt;ul&gt;
&lt;li&gt;利点: git logを辿れる&lt;/li&gt;
&lt;li&gt;欠点: zipよりもダウンロード時間が長いのでおすすめしない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;gitで対象のフォルダのみclone

&lt;ul&gt;
&lt;li&gt;利点: 必要最小限のフォルダのみダウンロードするので速い&lt;/li&gt;
&lt;li&gt;欠点: gitといくつかのコマンド操作が必要なので慣れていないと操作が難しい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  zipでダウンロードする
&lt;/h3&gt;

&lt;p&gt;以下のリンクから&lt;code&gt;release/2019.3ブランチ&lt;/code&gt;を開き、右側の&lt;code&gt;Clone or download&lt;/code&gt; &amp;gt; &lt;code&gt;Download ZIP&lt;/code&gt;ボタンからダウンロードします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3"&gt;https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--foxSl7QR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xe77cgw4w1y1mz4a024y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--foxSl7QR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xe77cgw4w1y1mz4a024y.png" alt="image.png" width="775" height="505"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  gitでcloneする
&lt;/h3&gt;

&lt;p&gt;以下のコマンドでuniversal/camera-stackingブランチをcloneします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;-b&lt;/span&gt; release/2019.3 https://github.com/Unity-Technologies/ScriptableRenderPipeline.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  gitで対象のフォルダのみcloneする
&lt;/h3&gt;

&lt;p&gt;以下のコマンドでCore RP Library, Universal RP, Shader Graphのみcloneします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 不要なfetchしないためにリモートのみを設定したローカルリポジトリを作る&lt;/span&gt;
git init ScriptableRenderPipeline
&lt;span class="nb"&gt;cd &lt;/span&gt;ScriptableRenderPipeline
git remote add origin https://github.com/Unity-Technologies/ScriptableRenderPipeline.git

&lt;span class="c"&gt;# sparse checkoutを有効にしてCore RP Library, Universal RP, Shader Graphのみをcheckout対象にする&lt;/span&gt;
git config core.sparsecheckout &lt;span class="nb"&gt;true
echo&lt;/span&gt; /com.unity.render-pipelines.core/ &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .git/info/sparse-checkout
&lt;span class="nb"&gt;echo&lt;/span&gt; /com.unity.render-pipelines.universal/ &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .git/info/sparse-checkout
&lt;span class="nb"&gt;echo&lt;/span&gt; /com.unity.shadergraph/ &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .git/info/sparse-checkout

&lt;span class="c"&gt;# checkoutしたいブランチと同名のローカルブランチを作る&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; release/2019.3

&lt;span class="c"&gt;# shallow cloneで履歴を1つだけpullする&lt;/span&gt;
git pull &lt;span class="nt"&gt;--depth&lt;/span&gt; 1 origin release/2019.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  UniversalRPをインストールする
&lt;/h2&gt;

&lt;p&gt;以下のように&lt;code&gt;com.unity.render-pipelines.core&lt;/code&gt;, &lt;code&gt;com.unity.render-pipelines.universal&lt;/code&gt;, &lt;code&gt;com.unity.shadergraph&lt;/code&gt;を&lt;code&gt;[Project Folder]/Packages&lt;/code&gt;にコピーします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5kwr8Ch8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4na6fd07pul54v6y6gpo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5kwr8Ch8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4na6fd07pul54v6y6gpo.png" alt="image.png" width="559" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;正常にインストールできているとPackage ManagerのCore RP Library, Universal RP, Shader Graphのバージョンが7.2.0 (in development)になっています。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZGDId07a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l8lxmiju22p3m1njnfyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZGDId07a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l8lxmiju22p3m1njnfyc.png" alt="image.png" width="880" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  従来のRP
&lt;/h2&gt;

&lt;p&gt;まずは確認のために&lt;a href="https://assetstore.unity.com/packages/essentials/unity-samples-ui-25468"&gt;Unity Samples: UI&lt;/a&gt;のMenu 3Dを開いてみます。このシーンは背景用の&lt;code&gt;MainCamera&lt;/code&gt;とUI用の&lt;code&gt;GUI Camera&lt;/code&gt;の2つがあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6z6SWanY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9os9z0d2gvkqonbfjqk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6z6SWanY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9os9z0d2gvkqonbfjqk5.png" alt="image.png" width="880" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Camera Stacking System未対応のUniversal RP
&lt;/h2&gt;

&lt;p&gt;次にCamera Stacking System未対応のUniversal RP 7.1.2 で確認するとGame ViewはGUI Cameraで背景も上書きされてしまいます。&lt;br&gt;
描画順序は従来のRPと同様にDepthで決まるようですがUniversalRPに切り替えるとInspectorから見えなくなります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YNmaBr7Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/81ologolmlx4qdlr5182.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YNmaBr7Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/81ologolmlx4qdlr5182.png" alt="image.png" width="880" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Camera Stacking System対応のUniversal RP
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;del&gt;まずはUniversalRPのアセットを作り、&lt;code&gt;Opaque Texture&lt;/code&gt;を有効にします。これは1パスしか扱えないUniversalRPでGrabPassと同様の機能でカメラスタックに必要なようです。&lt;/del&gt; &lt;strong&gt;&lt;code&gt;Opaque Texture&lt;/code&gt;を有効にしなくても描画されるようになりました。&lt;/strong&gt;UniversalRPアセット
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QVYsBsaP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bmggjorodpv7ugzfcgwx.png" alt="image.png" width="435" height="1067"&gt;
&lt;/li&gt;
&lt;li&gt;後から描画するカメラ(GUI Camera)の&lt;del&gt;&lt;code&gt;Background Type&lt;/code&gt;を&lt;code&gt;Uninitialized&lt;/code&gt;か&lt;code&gt;Solid Color&lt;/code&gt;に変更して&lt;/del&gt;&lt;code&gt;Render Mode&lt;/code&gt;を&lt;code&gt;Overlay&lt;/code&gt;に変更します。
&lt;del&gt;&lt;code&gt;Render Mode&lt;/code&gt;を変えると&lt;code&gt;Background Type&lt;/code&gt;が見えなくなるので必ず&lt;code&gt;Background Type&lt;/code&gt;を先に変更します。&lt;/del&gt;
&lt;strong&gt;事前に&lt;code&gt;Background Type&lt;/code&gt;を変更しなくても背景が上書きされなくなりました。&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aocDQ7kA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a641xt2q1s8ux9jjz41n.png" alt="image.png" width="765" height="912"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;先に描画するカメラ(Main Camera)の&lt;code&gt;Stack&lt;/code&gt;に&lt;code&gt;GUI Camera&lt;/code&gt;を追加します。

&lt;ul&gt;
&lt;li&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Qbd5Ll3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jiqt34rhjz9fc6zw16ij.png" alt="image.png" width="787" height="1479"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;以上の設定でUniversalRPでも従来のRPと同様に複数のカメラを重ねて描画できました。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3J-b-rgn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kr8ngq89pjmk59urmakw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3J-b-rgn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kr8ngq89pjmk59urmakw.png" alt="image.png" width="880" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  他の方法でカメラスタックする
&lt;/h1&gt;

&lt;p&gt;こちらは試していませんがLWRPを拡張する方法とPostProcessingとしてオーバーレイする方法もあります。&lt;br&gt;
ですがLWRPの拡張はv3あたりがベースなのでそのまま使えるか分からなかったりPostProcessingは遅かったりとなかなかうまくいかないようです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.slideshare.net/kairimineiri/lwrp-137342815/30"&gt;LWRPのパス拡張について&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SRP Post Processing Texture Overlay in Unity

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468"&gt;https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?time_continue=413&amp;amp;v=LkP2AHcokxA"&gt;https://www.youtube.com/watch?time_continue=413&amp;amp;v=LkP2AHcokxA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951"&gt;https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ditzel/PostProcessingTextureOverlay"&gt;https://github.com/ditzel/PostProcessingTextureOverlay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tsubakit1.hateblo.jp/entry/2019/10/09/233225"&gt;【Unity】LWRPでポストプロセスを使用しつつUIの手前にパーティクルを表示する&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  最後に
&lt;/h1&gt;

&lt;p&gt;Unityの中の人によると以下のスレッドでUnity2019.4LTSを目標としていて2019.3リリース直後にパッケージに含まれそうと言っているので期待できそうです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-5125979"&gt;https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-5125979&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/mKhSt7og0XY"&gt;https://youtu.be/mKhSt7og0XY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  参考リンク
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.google.com/document/d/1GDePoHGMngJ-S0Da0Fi0Ky8jPxYkQD5AkVFnoxlknUY/edit"&gt;Camera Rendering in LWRP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portal.productboard.com/8ufdwj59ehtmsvxenjumxo82/c/31-camera-stacking"&gt;https://portal.productboard.com/8ufdwj59ehtmsvxenjumxo82/c/31-camera-stacking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Camera Stacking Systemの動画

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://drive.google.com/file/d/1J8ChJIsAXdXdmOPtNF_FIqd9exYD0kql/view"&gt;https://drive.google.com/file/d/1J8ChJIsAXdXdmOPtNF_FIqd9exYD0kql/view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/pigeon6/status/1121268133530984449"&gt;https://twitter.com/pigeon6/status/1121268133530984449&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/pull/5260"&gt;Universal Camera Stacking by phi-lira · Pull Request #5260&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/ScriptableRenderPipeline/pull/5462"&gt;Universal/2019.3/backports by phi-lira · Pull Request #5462&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.slideshare.net/kairimineiri/lwrp-137342815/30"&gt;LWRPのパス拡張について&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SRP Post Processing Texture Overlay in Unity

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468"&gt;https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?time_continue=413&amp;amp;v=LkP2AHcokxA"&gt;https://www.youtube.com/watch?time_continue=413&amp;amp;v=LkP2AHcokxA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951"&gt;https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ditzel/PostProcessingTextureOverlay"&gt;https://github.com/ditzel/PostProcessingTextureOverlay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tsubakit1.hateblo.jp/entry/2019/10/09/233225"&gt;【Unity】LWRPでポストプロセスを使用しつつUIの手前にパーティクルを表示する&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
    </item>
    <item>
      <title>Qiitaの記事とストックをバックアップする</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sun, 29 Mar 2020 16:27:00 +0000</pubDate>
      <link>https://dev.to/shiena/qiita-2d19</link>
      <guid>https://dev.to/shiena/qiita-2d19</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;最近PowerShellを使っているので力試しにQiitaの記事とストックをバックアップするスクリプトを作りました。&lt;br&gt;
LGTM一覧は残念ながらQiita APIにないのでWebページをスクレイピングしないと取得できなさそうです。&lt;/p&gt;
&lt;h1&gt;
  
  
  動作環境
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Windows PowerShell 5&lt;/li&gt;
&lt;li&gt;PowerShell Core 6&lt;/li&gt;
&lt;li&gt;PowerShell 7&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  使い方
&lt;/h1&gt;
&lt;h2&gt;
  
  
  記事のバックアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/shiena/ccbb5f2a382cc16b616b5848594539c1#file-qiita-item-exporter-ps1"&gt;qiita-item-exporter.ps1&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ファイルの先頭に&lt;code&gt;$userId&lt;/code&gt;を自分のアカウント名に変更します。&lt;/li&gt;
&lt;li&gt;記事中の画像ファイルのURLはデフォルトでファイル名のみに置換しますが他のURLに置き換えたい場合に設定します。
たとえば&lt;code&gt;$imageFolder = "https://example.com/images/"&lt;/code&gt;にすると記事中の画像のURLが以下のように置換されます。

&lt;ul&gt;
&lt;li&gt;変更前 &lt;code&gt;https://qiita-image-store.s3.amazonaws.com/0/00000/ffffffff-ffff-ffff-ffff-ffffffffffff.png&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;変更後 &lt;code&gt;https://example.com/images/ffffffff-ffff-ffff-ffff-ffffffffffff.png&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$userId = 'your-user-name'
$imageFolder = "" # replace image path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;qiita-item-exporter.ps1&lt;/code&gt;を実行すると以下のような構造で記事と画像が保存されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- items
  +- readme.md                                   # 各記事へのリンク
  +- xxxxxxxxxxxxxxxxxxxx                        # 記事のID
     +- xxxxxxxxxxxxxxxxxxxx.md                  # ダウンロードした記事
     +- readme.md                                # 画像のURLを置換した記事
     +- ffffffff-ffff-ffff-ffff-ffffffffffff.png # 記事中の画像
     +- meta.json                                # 作成日時、更新日時、タイトル、タグを保存したJSON
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  ストックのバックアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/shiena/ccbb5f2a382cc16b616b5848594539c1#file-qiita-stock-exporter-ps1"&gt;qiita-stock-exporter.ps1&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;$userId&lt;/code&gt;と&lt;code&gt;$imageFolder&lt;/code&gt;は&lt;code&gt;qiita-item-exporter.ps1&lt;/code&gt;と同様の設定です。&lt;/li&gt;
&lt;li&gt;ストックの総数はQiita APIで取得できないので&lt;a href="https://qiita.com/stock"&gt;ストック一覧&lt;/a&gt;の一番下からページ数を確認して&lt;code&gt;$pages&lt;/code&gt;を設定します。
このスクショでは&lt;code&gt;29&lt;/code&gt;がページ数です。
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ijy5QK2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zapqwr7uwfli71fzed6j.png" alt="image.png"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$userId = 'your-user-name'
$pages = 1 # your-stock-pages
$imageFolder = "" # replace image path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;qiita-stock-exporter.ps1&lt;/code&gt;を実行すると以下のような構造で記事と画像が保存されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- stokcs
  +- readme.md                                   # 各記事へのリンク
  +- xxxxxxxxxxxxxxxxxxxx                        # 記事のID
     +- xxxxxxxxxxxxxxxxxxxx.md                  # ダウンロードした記事
     +- readme.md                                # 画像のURLを置換した記事
     +- ffffffff-ffff-ffff-ffff-ffffffffffff.png # 記事中の画像
     +- meta.json                                # ユーザーID、ユーザー情報、タイトル、タグを保存したJSON
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  さいごに
&lt;/h1&gt;

&lt;p&gt;PowerShellは文法こそ独特なもののC#のLINQのようにパイプで文字列だけではなくオブジェクトを流せるのでデータの加工が楽でした。&lt;/p&gt;

</description>
      <category>qiita</category>
      <category>powershell</category>
    </item>
    <item>
      <title>Unity Accelerator + Prometheus + GrafanaをDockerでサービス化する</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sat, 28 Mar 2020 12:38:00 +0000</pubDate>
      <link>https://dev.to/shiena/unity-accelerator-prometheus-grafana-docker-h3a</link>
      <guid>https://dev.to/shiena/unity-accelerator-prometheus-grafana-docker-h3a</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;Unity2019.3からAsset Pipeline v2が追加されてUnity Acceleratorを組み合わせるとインポートしたアセットをキャッシュおよび共有することができます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blogs.unity3d.com/jp/2019/09/11/speed-up-your-team-with-the-unity-accelerator/"&gt;Unity Accelerator でチームの作業をスピードアップ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;それまでのUnityにもAsset Pipeline v1とキャッシュサーバーでキャッシュできていましたが、Unity Acceleratorには以下の違いがあります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;キャッシュサーバーと同居できる&lt;/li&gt;
&lt;li&gt;Collaborateのキャッシュに対応&lt;/li&gt;
&lt;li&gt;不要なキャッシュを定期的にクリーンアップ&lt;/li&gt;
&lt;li&gt;転送されたバイト数や接続されたエディターなどの情報をPrometheusから利用できるメトリクスで公開&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;フォーラムの以下のスレッドによるとDockerHubでイメージが公開されています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/consider-making-a-docker-container-for-accelerator.809115/"&gt;Consider making a Docker Container for Accelerator?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/unitytechnologies/accelerator"&gt;https://hub.docker.com/r/unitytechnologies/accelerator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unity Acceleratorは&lt;a href="https://prometheus.io/"&gt;Prometheus&lt;/a&gt;とダッシュボードの&lt;a href="https://grafana.com/"&gt;Grafana&lt;/a&gt;を組み合わせるとメトリクスを可視化できるのでdocker-composeでサービス化しました。&lt;/p&gt;

&lt;h1&gt;
  
  
  Dockerでサービス化
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/shiena/docker-unity-accelerator"&gt;https://github.com/shiena/docker-unity-accelerator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  設定ファイル
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COLLAB_REGISTRATION_TOKEN=ft0bJvbRD
DISABLE_USAGE_STATS=yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://unity3d.com/unity/features/collaborate"&gt;Unity Collaborate&lt;/a&gt;と連携する場合は&lt;code&gt;COLLAB_REGISTRATION_TOKEN&lt;/code&gt;にトークンを設定します。&lt;/li&gt;
&lt;li&gt;統計情報の送信を抑制する場合は&lt;code&gt;DISABLE_USAGE_STATS&lt;/code&gt;に任意の値を設定します。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  サービスを実行
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;サービスを起動するとそれぞれ以下からアクセスできます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unity Acceleratorおよびキャッシュサーバー: 起動したPCのIPアドレス&lt;/li&gt;
&lt;li&gt;Prometheus: &lt;a href="http://localhost:9090"&gt;http://localhost:9090&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Grafana: &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;初期アカウントとパスワードは&lt;code&gt;admin&lt;/code&gt;と&lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grafanaでは&lt;a href="https://docs.unity3d.com/Manual/UnityAccelerator.html"&gt;Unity - Manual:  Unity Accelerator&lt;/a&gt;の一覧にあるメトリクスを扱えます。&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Administraotr Dashboard
&lt;/h2&gt;

&lt;p&gt;v1.0.272+gb7c26b9からLocal Administrator Dashboardが追加されて &lt;a href="http://localhost:10080"&gt;http://localhost:10080&lt;/a&gt; からアクセスできるようになりました。&lt;/p&gt;

&lt;p&gt;ConfigurationとLogsは以下のコマンドでパスワード設定が必要です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose exec accelerator /agent/unity-accelerator tool adminpw mysupersecretpassword ​
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HqpKw0wK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrcnscmf7138lkzgbg8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HqpKw0wK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrcnscmf7138lkzgbg8f.png" alt="image.png" width="880" height="822"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  公式イメージ公開前にDocker化で工夫したこと
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Unity AcceleratorをダウンロードするURLからバージョンが分からないのでバージョンを確認する方法を用意しています。&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;v1.0.196+ge1f9988で修正されました。&lt;del&gt;キャッシュサーバー追加でインストーラーを非対話モードで実行するとnpmのパスが展開されないバグがあるので対話モードprintfで強引にインストールしています。(バグ報告済み)&lt;/del&gt;
&lt;/li&gt;
&lt;li&gt;v1.0.242+gf11031dで修正されました。&lt;del&gt;v1.0.196+ge1f9988で初回起動時などpidファイルがなかったり空の時に起動できないバグがあるのでパッチを当てています。&lt;/del&gt;
&lt;/li&gt;
&lt;li&gt;公式イメージが公開されたので独自Dockerfileから切り替えました。&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
      <category>docker</category>
    </item>
    <item>
      <title>Unity2018.4はLTSだけどバージョンアップで破壊的変更されている</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sun, 15 Mar 2020 10:15:00 +0000</pubDate>
      <link>https://dev.to/shiena/unity2018-4-lts-2lhn</link>
      <guid>https://dev.to/shiena/unity2018-4-lts-2lhn</guid>
      <description>&lt;h1&gt;
  
  
  修正以外の変更内容
&lt;/h1&gt;

&lt;p&gt;Unity2018.4.1以降に修正以外で変更された内容を抜き出しました。&lt;br&gt;
LTSなのにBackwards Compatibility Breaking Changesなんて項目もありますね。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/whats-new/2018.4.4"&gt;https://unity3d.com/unity/whats-new/2018.4.4&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android: Android Gradle plugin version updated up to 3.4.&lt;/li&gt;
&lt;li&gt;Android: Gradle version updated up to 5.1.1.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/whats-new/2018.4.5"&gt;https://unity3d.com/unity/whats-new/2018.4.5&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version Control: Added "Overwrite Failed Checkout Assets" editor setting, turning it off makes unity not overwrite files that can't be checked out. (1010999, 1158593)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/whats-new/2018.4.6"&gt;https://unity3d.com/unity/whats-new/2018.4.6&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Backwards Compatibility Breaking Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple TV: Remove support for Universal Harmony Remote, supporting this controller made Siri Remote and gamepads regrees by producing unintended double events for button clicks. For more information check UnityView+Keyboard.mm pressesBegan/pressesEnd functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XR: Updated Vuforia to version 8.3.8.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/whats-new/2018.4.10"&gt;https://unity3d.com/unity/whats-new/2018.4.10&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Backwards Compatibility Breaking Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android: Improve error messages for cases where android application fails to load libmain.so. Previously it was printing "Unable to find main", now it will print "Failed to load 'libmain.so', the application will terminate.", additionally it will print exception from System.loadLibrary with detailed info, where the application was looking for libmain.so&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graphics: Optimised Cluster Rendering networking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/whats-new/2018.4.14"&gt;https://unity3d.com/unity/whats-new/2018.4.14&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XR: Updated to Oculus 1.38 plugin and added support for valid tracking poses even when devices aren't fully tracked. (1197386)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/beta/2018.4.16f1"&gt;https://unity3d.com/unity/beta/2018.4.16f1&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package Manager: Changed the package installation process to no longer set package directories and files as read-only on disk. This prevents all sorts of possible corruption scenarios (e.g. read-only directories, partially-read-only packages in the package cache) and avoids some permission issues when removing packages.&lt;/li&gt;
&lt;li&gt;Package Manager: Changed the package installation process to systematically revert packages to their original state. Note: this has the side-effect of actively reverting local modifications in immutable packages, which could previously be kept until the dependency was updated to a different version of the package. In order to preserve local changes, a package should first be &lt;a href="https://docs.unity3d.com/Manual/upm-embed.html"&gt;embedded in the project&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package Manager: Added support for configuring additional SSL certificate authorities, including self-signed certificates. See the &lt;a href="https://docs.unity3d.com/Manual/upm-network.html#SSL"&gt;Unity Manual&lt;/a&gt; for more information on how to use this.&lt;/li&gt;
&lt;li&gt;Package Manager: Added support for Git URLs with the SCP format (e.g. &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;/user/repo).&lt;/li&gt;
&lt;li&gt;Package Manager: Added support for Git URLs without a trailing .git by using git:// URLs or prepending git+ to URLs (e.g. git+&lt;a href="https://github.com/user/repo"&gt;https://github.com/user/repo&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Package Manager: Added support for tarball-based dependencies (e.g. "file:.tgz").&lt;/li&gt;
&lt;li&gt;Package Manager: Changed the UnityEditor.PackageManager.Client.Add method to make the @ prefix optional when adding Git-based dependencies and local dependencies (file:).&lt;/li&gt;
&lt;li&gt;Package Manager: Reduced the amount of data transferred over the network when fetching package metadata from the registry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiplayer: Added UNET encryption support.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://unity3d.com/unity/beta/2018.4.19f1"&gt;https://unity3d.com/unity/beta/2018.4.19f1&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;API Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Particles: Added: Added NativeArray overloads to SetParticles and GetParticles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Editor: Greatly improves performance over large numbers of objects with RectTransforms, scene navigation is now very smooth. However actual picking is still very slow (no change). (1165982)&lt;/li&gt;
&lt;li&gt;XR: Updated minimum version of Windows Mixed Reality package.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  リリースノートを調べた経緯
&lt;/h1&gt;

&lt;p&gt;Unity2018.4.9f1とOculus Integration v1.37を使ったプロジェクトがあり、Unityのパッチバージョンを上げてみると実機で起動できなくなりました。&lt;br&gt;
公式フォーラムやAnswersでも原因を特定できておらず藁にもすがる思いで各バージョンのリリースノートをたどると2018.4.14fに以下の変更がありプロジェクト内のバージョンより大きくなっていました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XR: Updated to Oculus 1.38 plugin and added support for valid tracking poses even when devices aren't fully tracked. (1197386)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;恐らくこれが原因で2018.4.13f1でビルドしたものは起動できて2018.4.14f1でビルドしたものは起動できませんでした。&lt;br&gt;
バージョンアップする時は下位互換性だけではなくライブラリのバージョンなど他の内容も確認が必要そうです。&lt;/p&gt;

&lt;p&gt;色々なご意見&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;まじか... &lt;a href="https://t.co/CAs7fn8tV1"&gt;https://t.co/CAs7fn8tV1&lt;/a&gt;&lt;/p&gt;— su10@ハイパーカジュアルゲーム開発 (@su10_dev) &lt;a href="https://twitter.com/su10_dev/status/1238880965205708800?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;メチャクチャわかる…LTS(長期サポートするけど破壊的変更もする)&lt;br&gt;Unity2018.4はLTSだけどバージョンアップで破壊的変更されている &lt;a href="https://t.co/gXPUAtceAf"&gt;https://t.co/gXPUAtceAf&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Qiita?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#Qiita&lt;/a&gt;&lt;/p&gt;— izm (&lt;a class="mentioned-user" href="https://dev.to/izm"&gt;@izm&lt;/a&gt;) &lt;a href="https://twitter.com/izm/status/1238882827401187328?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;「LTSだから安心して上がるやろ」と思って上げると記事中にあるように統合されているSDKなどが影響して、たすけて！もなふわすい～とる～む！！ってなることもあり得るので注意せねばな...(自戒)&lt;/p&gt;— mao (&lt;a class="mentioned-user" href="https://dev.to/test_h_"&gt;@test_h_&lt;/a&gt;) &lt;a href="https://twitter.com/TEST_H_/status/1238883974492999680?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;HoloLens2の機能周りも19系列だけでなく、LTSでも使えるようにちょいちょい更新かかっていたりするからなぁ&lt;br&gt;単純な不具合修正だけじゃなくて他SDK、デバイスサポートも更新し続けてるのがLTS&lt;br&gt;&lt;br&gt;Unity2018.4はLTSだけどバージョンアップで破壊的変更されている - Qiita &lt;a href="https://t.co/ZesQqheLnw"&gt;https://t.co/ZesQqheLnw&lt;/a&gt;&lt;/p&gt;— Decoc (@deco_c_) &lt;a href="https://twitter.com/deco_c_/status/1238884218119151617?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;UnityのLTSってLTSの意味理解してんのか？って思うくらいには安定感がないんだよなぁ...&lt;br&gt;&lt;br&gt;Unity2018.4はLTSだけどバージョンアップで破壊的変更されている &lt;a href="https://t.co/VPlMOgfhvu"&gt;https://t.co/VPlMOgfhvu&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Qiita?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#Qiita&lt;/a&gt;&lt;/p&gt;— TechNΘ (@Techno1109) &lt;a href="https://twitter.com/Techno1109/status/1238891952474447876?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;Unity 2018.4は.16でAssetBundleの非同期ロードが止まってしまう破壊的破壊があったんですが、.18で治ったらしいです（これからテスト） &lt;a href="https://t.co/mskEAGVqtP"&gt;https://t.co/mskEAGVqtP&lt;/a&gt;&lt;/p&gt;— ichijo (@Takaaki_Ichijo) &lt;a href="https://twitter.com/Takaaki_Ichijo/status/1238968051565039617?ref_src=twsrc%5Etfw"&gt;March 14, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;やっぱりバージョン上げるときはどんなときでも変更点を確認すべきだな&lt;/p&gt;— たた (@pf35301) &lt;a href="https://twitter.com/pf35301/status/1238992113787793408?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;「Unity 2018.4 LTS (Long Term Supported) (Stableとは言ってない)」不定期の気配&lt;/p&gt;— 獏星(ばくすたー) / Megumi Baxter (@baku_dreameater) &lt;a href="https://twitter.com/baku_dreameater/status/1239000057052971008?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;LTSは新機能が入らないというだけで、他のライブラリのバージョンに追従するためやセキュリティー的な対応で破壊的変更にならざるを得ないはしょうがないのかなぁと。まぁ、それでもパッチバージョン上げたら動かなくなるパターンは萎える…。&lt;/p&gt;— なっつー@BNUT (@yashinut) &lt;a href="https://twitter.com/yashinut/status/1239006880220901377?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;Unityはセマンティックバージョニングではないし、後方互換完全に保って2年間パッチし続けるリリース管理は不可能に近いっていうか間違いなく不可能だろうからしゃーないね...辛いけどさ...　&lt;a href="https://t.co/xgOALpdGrJ"&gt;https://t.co/xgOALpdGrJ&lt;/a&gt;&lt;/p&gt;— Haruto Otake (@Trapezoid) &lt;a href="https://twitter.com/Trapezoid/status/1239011754178306048?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;UnityのLTSは「新機能を勉強せずに最長2年間使える」程度の意味しか無いのでこういうリリースノート読まずに起動しないバグを出すレベルのチームほど使わない方が無難 &lt;a href="https://t.co/Kb4lt2iuYc"&gt;https://t.co/Kb4lt2iuYc&lt;/a&gt;&lt;/p&gt;— 野生の男 WILDMAN (&lt;a class="mentioned-user" href="https://dev.to/yasei_no_otoko"&gt;@yasei_no_otoko&lt;/a&gt;) &lt;a href="https://twitter.com/yasei_no_otoko/status/1239015982707789824?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;blockquote&gt;
&lt;p&gt;UnityのLTSでリリースノート見ないのはただの自殺志願者やぞ&lt;/p&gt;— はるっちー (@hal_chi) &lt;a href="https://twitter.com/hal_chi/status/1239118289663438848?ref_src=twsrc%5Etfw"&gt;March 15, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

</description>
      <category>unity3d</category>
    </item>
    <item>
      <title>Extenject / UniRx / UniTaskをPackage Managerで扱いたい</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Mon, 09 Mar 2020 12:26:00 +0000</pubDate>
      <link>https://dev.to/shiena/extenject-unirx-unitask-package-manager-1ih6</link>
      <guid>https://dev.to/shiena/extenject-unirx-unitask-package-manager-1ih6</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;Package Managerでパッケージの導入が楽になったのでよく使うライブラリでも使えないかと調べた所、各リポジトリにissueは立っているものの開発元はまだ対応していません。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/svermeulen/Extenject/issues/24"&gt;https://github.com/svermeulen/Extenject/issues/24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/neuecc/UniRx/issues/427"&gt;https://github.com/neuecc/UniRx/issues/427&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Cysharp/UniTask/issues/25"&gt;https://github.com/Cysharp/UniTask/issues/25&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ですが有志がUPM対応したりレジストリを建てたりしているのでそれを利用する方法をまとめました。&lt;/p&gt;

&lt;h1&gt;
  
  
  有志がUPM化したものを利用
&lt;/h1&gt;

&lt;p&gt;ExtenjectとUniRxはissueにもコメントされていたものです。UniTaskはUPMに対応するPull Requestのリポジトリを利用できそうです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/starikcetin/awesome-upm"&gt;https://github.com/starikcetin/awesome-upm&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/starikcetin/Extenject"&gt;https://github.com/starikcetin/Extenject&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/starikcetin/UniRx"&gt;https://github.com/starikcetin/UniRx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Cysharp/UniTask/pull/26"&gt;&lt;/a&gt;&lt;a href="https://github.com/Cysharp/UniTask/pull/26"&gt;https://github.com/Cysharp/UniTask/pull/26&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/twksos/UniTask/tree/upm"&gt;https://github.com/twksos/UniTask/tree/upm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/starikcetin/Extenject.git#9.1.0",
    "com.neuecc.unirx": "https://github.com/starikcetin/UniRx.git#7.1.0",
    "com.cysharp.unitask": "https://github.com/twksos/UniTask.git#upm-1.2.0",
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Unofficial Unity Package Manager Registryを利用
&lt;/h1&gt;

&lt;p&gt;もんりぃ先生(&lt;a class="mentioned-user" href="https://dev.to/monry"&gt;@monry&lt;/a&gt;)が建てたUnofficial Unity Package Manager Registryにもパッケージが登録されているのでこちらを利用する事もできます。&lt;br&gt;
詳細は以下のリンクをご覧下さい。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://monry.hatenablog.com/entry/2019/06/06/204840"&gt;Unofficial Unity Package Manager Registry を建ててみました&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.upm-packages.dev/ja/usage"&gt;パッケージを利用する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://upm-packages.dev/"&gt;Unofficial Unity Package Manager Registry&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://upm-packages.dev/-/web/detail/com.stevevermeulen.extenject"&gt;https://upm-packages.dev/-/web/detail/com.stevevermeulen.extenject&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://upm-packages.dev/-/web/detail/jp.cysharp.unirx"&gt;https://upm-packages.dev/-/web/detail/jp.cysharp.unirx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://upm-packages.dev/-/web/detail/jp.cysharp.unitask"&gt;https://upm-packages.dev/-/web/detail/jp.cysharp.unitask&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;こっちはパッケージを利用する方法に従って&lt;code&gt;manifest.json&lt;/code&gt;に以下の内容を追加します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;更にExtenjectのバージョンの枝番に&lt;code&gt;-5&lt;/code&gt;、&lt;code&gt;scopes&lt;/code&gt;に&lt;code&gt;dev.upm-packages&lt;/code&gt;を追加するとテスト用のMoqとNSubstituteを一緒にインストールできます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp",
        "dev.upm-packages"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0-5",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Path query parameter (Subfolder)
&lt;/h1&gt;

&lt;p&gt;Unity2020.1a21とUnity2019.3.4f1から&lt;code&gt;package.json&lt;/code&gt;をサブフォルダに配置できるようになりました。既存構成のままupm化できるようになったので開発元に追加されれば利用できるようになります。&lt;/p&gt;

&lt;p&gt;現状、Extenjectは以下のように指定すればPackage Managerから扱えますがバグがありコンパイルエラーになります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject",
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;まだ&lt;code&gt;package.json&lt;/code&gt;が追加された後にタグが作られてませんが以下のようにハッシュを直接指定すると固定できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject#a955dd60be11d9a1f92080cda1d87e425c519072",
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://forum.unity.com/threads/some-feedback-on-package-manager-git-support.743345/#post-5425311"&gt;https://forum.unity.com/threads/some-feedback-on-package-manager-git-support.743345/#post-5425311&lt;/a&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Unity 2019.3.4f1 から Unity Package Manager が「Git リポジトリのルート以外に package.json がある場合」もサポートしてくれるようになりました。&lt;a href="https://t.co/gChvsXmgjb"&gt;&lt;/a&gt;&lt;a href="https://t.co/gChvsXmgjb"&gt;https://t.co/gChvsXmgjb&lt;/a&gt;&lt;br&gt;こんな感じに &lt;code&gt;?path=...&lt;/code&gt; とパスを指定してあげれば良いようです。&lt;br&gt;（内部的に clone してから当該パス以下を読んでる？）&lt;/p&gt;— もんりぃ先生 (&lt;a class="mentioned-user" href="https://dev.to/monry"&gt;@monry&lt;/a&gt;) &lt;a href="https://twitter.com/monry/status/1235973803823337473?ref_src=twsrc%5Etfw"&gt;March 6, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--he8rrYhd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vprchcqxn82gkx5yl2yd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--he8rrYhd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vprchcqxn82gkx5yl2yd.png" alt="image.png" width="880" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  最後に
&lt;/h1&gt;

&lt;p&gt;どちらの方法も一次配布元ではないのでいつまで追従するのか不安があります。&lt;br&gt;
また、Unofficial Unity Package Manager Registryのパッケージはそれに加えて一旦ダウンロードしないと内容が分からないので差分が分からないのと誰がアップロードしたのか分からない不安さがあります。&lt;br&gt;
この辺りを踏まえて便利に利用しましょう。&lt;/p&gt;

</description>
      <category>unity3d</category>
    </item>
    <item>
      <title>【Unity】そろそろXR Managementに対応したOpenVR XR Pluginがリリースされそう</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sun, 08 Mar 2020 10:31:00 +0000</pubDate>
      <link>https://dev.to/shiena/unity-xr-management-openvr-xr-plugin-16h2</link>
      <guid>https://dev.to/shiena/unity-xr-management-openvr-xr-plugin-16h2</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;Unityの既存のVRサポートは2020.1で廃止されXR Managementに一本化されます。&lt;br&gt;
今までOpenVR対応プラグインがなかったのでViveなど一部のHMDで移行の障害になっていましたがやっとリリースされそうな動きが見えてきました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://forum.unity.com/threads/xr-plugins-and-subsystems.693463/page-5#post-5562637"&gt;https://forum.unity.com/threads/xr-plugins-and-subsystems.693463/page-5#post-5562637&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gVz-XqIc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pg47g7ikkr4pnq9606xh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gVz-XqIc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pg47g7ikkr4pnq9606xh.png" alt="image.png" width="880" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以下はInputSystemのPull Requestとそれを作った開発者のGitHubアカウントにあるテストパッケージです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Unity-Technologies/InputSystem/pull/1083"&gt;https://github.com/Unity-Technologies/InputSystem/pull/1083&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zite/TestPackage"&gt;https://github.com/zite/TestPackage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w63_hGnP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lcn70srgq9tige43nk1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w63_hGnP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lcn70srgq9tige43nk1i.png" alt="image.png" width="880" height="482"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  導入方法
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;リリース前なので導入しても動作保証はありません。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  manifest.jsonに追加
&lt;/h2&gt;

&lt;p&gt;Unityプロジェクトフォルダの&lt;code&gt;Packages/manifest.json&lt;/code&gt;に以下の1行を追加するとUnityが自動でダウンロードします。&lt;br&gt;
今はmasterブランチよりTestBranchの方が進んでいるので&lt;code&gt;#TestBranch&lt;/code&gt;を指定します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "dependencies": {
    "com.valve.openvr": "https://github.com/zite/TestPackage.git#TestBranch",
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pakcagesフォルダにコピー
&lt;/h2&gt;

&lt;p&gt;TestPackageリポジトリをzipでダウンロードしたりgit cloneしてPackagesフォルダに配置するとUnityプロジェクトに取り込まれます。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t7mu5H9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7s7msjipgoja8cvx9gkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t7mu5H9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7s7msjipgoja8cvx9gkj.png" alt="image.png" width="880" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenVR XR Pluginが認識されるとPackage Managerに追加されます。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Yd-6YjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/flawuu0av9kcyglpacob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Yd-6YjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/flawuu0av9kcyglpacob.png" alt="image.png" width="880" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  OpenVR XR Pluginの設定
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---2QPSEBP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uqxlm5bs2hwdlakopf48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---2QPSEBP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uqxlm5bs2hwdlakopf48.png" alt="image.png" width="828" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--brd8QQ5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9gpxmxp7fcog4vcc9ayz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--brd8QQ5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9gpxmxp7fcog4vcc9ayz.png" alt="image.png" width="828" height="570"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DoQxkkCp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4s3b8zhcjh1l36fycjo2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DoQxkkCp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4s3b8zhcjh1l36fycjo2.png" alt="image.png" width="828" height="570"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NC98ICOZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6qzf9cqdan8wbln0v5o9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NC98ICOZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6qzf9cqdan8wbln0v5o9.png" alt="image.png" width="828" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>openvr</category>
    </item>
    <item>
      <title>docker-composeでDBの起動完了を待ってからWebアプリを実行する</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Mon, 02 Mar 2020 15:35:00 +0000</pubDate>
      <link>https://dev.to/shiena/docker-compose-db-web-29gm</link>
      <guid>https://dev.to/shiena/docker-compose-db-web-29gm</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;docker-composeで複数のコンテナを管理するとき、ほぼWebアプリとDBを一緒に使います。&lt;br&gt;
大抵はWebアプリ側に&lt;code&gt;depends_on&lt;/code&gt;でDBのコンテナを指定して起動順序を制御しますが、あくまで起動順序だけなのでDBの起動完了前にWebアプリがDBにアクセスしてしまい起動失敗する事があります。&lt;/p&gt;

&lt;p&gt;せっかくdocker-composeで1つにまとめて管理しているのに便利さが半減してしまうとモヤモヤしていたら、&lt;a href="https://docs.docker.com/compose/startup-order/"&gt;公式&lt;/a&gt;ではWebアプリ側でチェックせよと解説していました。&lt;/p&gt;
&lt;h1&gt;
  
  
  GitBucket + MySQLの場合
&lt;/h1&gt;

&lt;p&gt;上述の公式の解説ではPostgreSQLを対象にしているのですが、MySQLをよく使うので書き換えてみました。&lt;/p&gt;

&lt;p&gt;ファイル構成はこんな感じです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose.yml
  + gitbucket/
      + Dockerfile
      + wait.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;今回のメインとなる&lt;code&gt;wait.sh&lt;/code&gt;は引数からDBのホスト名、ユーザ名、パスワードを受け取って生存チェック後にWebアプリを実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/sh

set -e

host="$1"
shift
user="$1"
shift
password="$1"
shift
cmd="$@"

echo "Waiting for mysql"
until mysql -h"$host" -u"$user" -p"$password" &amp;amp;&amp;gt; /dev/null
do
        &amp;gt;&amp;amp;2 echo -n "."
        sleep 1
done

&amp;gt;&amp;amp;2 echo "MySQL is up - executing command"
exec $cmd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ベースイメージはalpine版なのでapkでmysql-clientをインストールしています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM java:8-jre-alpine
MAINTAINER shiena
ENV GITBUCKET_HOME /var/gitbucket
VOLUME ["${GITBUCKET_HOME}"]
EXPOSE 8080
RUN apk add --no-cache mysql-client
COPY wait.sh /wait.sh
ENV GITBUCKET_VERSION 4.7.1
ADD https://github.com/gitbucket/gitbucket/releases/download/${GITBUCKET_VERSION}/gitbucket.war /gitbucket.war
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;最後にdocker-compose.ymlです。&lt;br&gt;
wait.shにDBの情報を渡す必要があるため、&lt;code&gt;command&lt;/code&gt;でGitBucketを起動します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '2'
services:
  gitbucket:
    build: gitbucket
    image: gitbucket:4.7.1
    ports:
      - "8080:8080"
    volumes:
      - ./var/gitbucket:/var/gitbucket
    depends_on:
      - db
    command: sh /wait.sh db gitbucket gitbucket java -jar /gitbucket.war

  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=1
      - MYSQL_DATABASE=gitbucket
      - MYSQL_USER=gitbucket
      - MYSQL_PASSWORD=gitbucket
      - TZ=Asia/Tokyo
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;以上、このようなスクリプトを挟む事でDBの起動完了を待ってからWebアプリを起動できるようになります。&lt;/p&gt;

&lt;h1&gt;
  
  
  参考
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://qiita.com/sivertigo/items/9baa73d922a68788402b#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%AE%8C%E6%88%90%E3%81%99%E3%82%8B%E9%A0%86%E7%95%AA%E3%81%8C%E5%89%8D%E5%BE%8C%E3%81%99%E3%82%8B%E5%95%8F%E9%A1%8C"&gt;サービスの完成する順番が前後する問題 - docker-compose depends_onとlinksの違い&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/startup-order/"&gt;Controlling startup order in Compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DreamItGetIT/wait-for-mysql"&gt;DreamItGetIT/wait-for-mysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vishnubob/wait-for-it"&gt;vishnubob/wait-for-it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jwilder/dockerize"&gt;jwilder/dockerize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Eficode/wait-for"&gt;Eficode/wait-for&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>dockercompose</category>
    </item>
    <item>
      <title>VulkanをサポートしたOculus QuestでVisual Effect Graphを使う</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Sun, 23 Feb 2020 16:51:00 +0000</pubDate>
      <link>https://dev.to/shiena/vulkan-oculus-quest-visual-effect-graph-2bf</link>
      <guid>https://dev.to/shiena/vulkan-oculus-quest-visual-effect-graph-2bf</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;Unity2019.3になってOculus QuestでVulkanがサポートされました。&lt;br&gt;
更にURP 7.2.0からXR周りが改善されたりXR Interaction Toolkitだけでクロスプラットフォームにカメラリグやコントローラーを扱えるようになっています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.oculus.com/blog/vulkan-support-for-oculus-quest-in-unity-experimental/"&gt;Vulkan Support for Oculus Quest in Unity (Experimental)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/2019-3-release-xr-updates.821637/"&gt;2019.3 Release - XR Updates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.unity3d.com/2019/12/17/xr-interaction-toolkit-preview-package-is-here/"&gt;XR Interaction Toolkit Preview Package is here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.unity.com/threads/xr-interaction-toolkit-preview-release.795684/"&gt;XR Interaction Toolkit Preview Release&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;そこでUnityとPackage Managerの機能だけで外部アセットを使わずにOculus QuestでVisual Effect Graphを使ってみます。&lt;/p&gt;

&lt;h1&gt;
  
  
  できあがったもの
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;スクリーンショットと動画&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=C_DgvLJiuP8"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MAl5RrcM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img.youtube.com/vi/C_DgvLJiuP8/0.jpg" alt="screenshot" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ソース&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/shiena/QuestVulkan"&gt;https://github.com/shiena/QuestVulkan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;ビルドしたapk&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/shiena/QuestVulkan/releases/tag/1.0.0"&gt;https://github.com/shiena/QuestVulkan/releases/tag/1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  開発環境
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Unity2019.3.1f1

&lt;ul&gt;
&lt;li&gt;Android Build Support&lt;/li&gt;
&lt;li&gt;Android SDK &amp;amp; NDK Tools&lt;/li&gt;
&lt;li&gt;OpenJDK&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Oculus Quest v13以上&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unityインストール時にAndroid Build Supportを展開してAndroid SDK &amp;amp; NDK ToolsとOpenJDKもチェックします。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7hDBns3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4ele7tmieb0qjgconryn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7hDBns3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4ele7tmieb0qjgconryn.png" alt="0.unity2019.3install.png" width="880" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  手順概要
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;新規プロジェクト作成&lt;/li&gt;
&lt;li&gt;Oculus Quest向けにProject Settingsを変更&lt;/li&gt;
&lt;li&gt;Package Managerから必要なパッケージを追加&lt;/li&gt;
&lt;li&gt;VisualEffectGraph Additionsをインポート&lt;/li&gt;
&lt;li&gt;シーン構築&lt;/li&gt;
&lt;li&gt;ビルドと実行&lt;/li&gt;
&lt;li&gt;クオリティ調整&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  新規プロジェクト作成
&lt;/h2&gt;

&lt;p&gt;UnityHubで新規作成してUniversal Template Projectから作成します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ede-8mB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tgmtl1nb9tooa6v4lqk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ede-8mB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tgmtl1nb9tooa6v4lqk1.png" alt="1.10.new-project.png" width="880" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Oculus Quest向けにProject Settingsを変更
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Androidプラットフォームに変更&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;メニューの&lt;code&gt;ファイル &amp;gt; ビルド設定&lt;/code&gt;を開き、プラットフォームからAndroidを選択して&lt;code&gt;Switch Platformボタン&lt;/code&gt;を押します。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kl9OvmLO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/63ef7736-cccf-8322-da62-40b5c50e3c01.png" class="article-body-image-wrapper"&gt;&lt;img alt="2.10.switch-platform2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kl9OvmLO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/63ef7736-cccf-8322-da62-40b5c50e3c01.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Oculus Quest向けにProject Settingsを変更&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build Settingsの&lt;code&gt;プレイヤー設定ボタン&lt;/code&gt;を押してProject Settingsを開きます。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Player &amp;gt; Androidアイコン &amp;gt; その他の設定を開きます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graphics APIsをVulkanのみに変更&lt;/li&gt;
&lt;li&gt;最低APIレベルを4.4から6.0に変更&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_81RuLH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/f4ba7fe9-7f33-2d00-c3c7-dba3906d8607.png" class="article-body-image-wrapper"&gt;&lt;img alt="2.30.player-settings-after2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--_81RuLH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/f4ba7fe9-7f33-2d00-c3c7-dba3906d8607.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;XR Plugin Managementを開きます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install XR Plugin Managementボタン、Oculus XR PluginのInstallボタンの順に押します。&lt;/li&gt;
&lt;li&gt;AndroidアイコンのPlugin ProvidersにOculus Loadersを追加します。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2XTd9jey--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/c34340a5-f052-6088-bf30-f5530172fc69.png" class="article-body-image-wrapper"&gt;&lt;img alt="2.50.xr-settings-all2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--2XTd9jey--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/c34340a5-f052-6088-bf30-f5530172fc69.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Oculusを開きます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;作成ボタンを押してOculus Quest用の設定を作ります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oR-V6ioI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/b18d34d2-f86f-aa92-29cc-ca8d55493a49.png" class="article-body-image-wrapper"&gt;&lt;img alt="2.80.oculus-all2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--oR-V6ioI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/b18d34d2-f86f-aa92-29cc-ca8d55493a49.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Package Managerから必要なパッケージを追加
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;メニューの&lt;code&gt;ウインドウ &amp;gt; Package Manager&lt;/code&gt;を開き、&lt;code&gt;Advanced&lt;/code&gt;から&lt;code&gt;Show preview packages&lt;/code&gt;をチェックしてプレビューバージョンを見えるようにします。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;プロジェクト内をすべてのパッケージに変更して以下のパッケージをインストールします。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XR Integration Toolkit&lt;/li&gt;
&lt;li&gt;Visual Effect Graphの&lt;strong&gt;7.2以上&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Universal RPの&lt;strong&gt;7.2以上&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Android Logcat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kTSbV6nf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5zjso9tclt8xox79mmsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kTSbV6nf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5zjso9tclt8xox79mmsk.png" alt="3.10.package-manager.png" width="880" height="675"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  VisualEffectGraph Additionsをインポート
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Package ManagerのVisual Effect GraphからVisualEffectGraph Additionsの&lt;code&gt;Import into Projectボタン&lt;/code&gt;を押します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--92EvkRXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/1f56e527-1063-4e36-4831-16da567c9889.png" class="article-body-image-wrapper"&gt;&lt;img alt="4.10.import-vfx-additions2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--92EvkRXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/1f56e527-1063-4e36-4831-16da567c9889.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Assets/Samples/Visual Effect Graph/7.2.1/VisualEffectGraph Additions/VFX/&lt;/code&gt;にアセットが作られますがそのままでは動かないのでメニューの&lt;code&gt;編集 &amp;gt; Visual Effects &amp;gt; Rebuild All Visual Effect Graphs&lt;/code&gt;から再コンパイルします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--onoME3mx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s5cg5oze5uxtcdtitf66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--onoME3mx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s5cg5oze5uxtcdtitf66.png" alt="image.png" width="880" height="890"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  シーン構築
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;メニューの&lt;code&gt;ゲームオブジェクト &amp;gt; XR &amp;gt; Room-Scale XR Rig&lt;/code&gt;を選択するとMain CameraがVR用のXR Rigに変換されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TBPObeIk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/e66e0f0b-ec54-b03f-909a-8511f8bd39cb.png" class="article-body-image-wrapper"&gt;&lt;img alt="5.10.xr-rig2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--TBPObeIk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/e66e0f0b-ec54-b03f-909a-8511f8bd39cb.png" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
元のカメラに合わせる場合は以下のTransformになります。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---eNhC23v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7y01c8xo46i9iys651d3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---eNhC23v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7y01c8xo46i9iys651d3.png" alt="5.20.xr-rig-transform.png" width="730" height="322"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Assets/Samples/Visual Effect Graph/7.2.1/VisualEffectGraph Additions/Prefabs/&lt;/code&gt;にあるVFXのプレハブをヒエラルキーに追加します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KoyuBB9j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/2f8285ac-2f68-1902-d614-bdbbac2163f7.png" class="article-body-image-wrapper"&gt;&lt;img alt="5.30.vfx-prefab2.png" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KoyuBB9j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/2f8285ac-2f68-1902-d614-bdbbac2163f7.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;追加したVFXをカメラから見やすい位置に調整します。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ビルドと実行
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;メニューの&lt;code&gt;ファイル &amp;gt; ビルド設定&lt;/code&gt;を開きます。&lt;/li&gt;
&lt;li&gt;デバイスを実行しますからOculus Questを選択します。&lt;/li&gt;
&lt;li&gt;ビルドして実行ボタンを押します。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;アプリを起動してメニューの&lt;code&gt;ウインドウ &amp;gt; 分析 &amp;gt; Android Logcat&lt;/code&gt;を開くとVulkanが使われているのが分かります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xGW-HAh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5wuh083r0bwkbf8yl33c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xGW-HAh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5wuh083r0bwkbf8yl33c.png" alt="androidlog.png" width="880" height="523"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  クオリティ調整
&lt;/h2&gt;

&lt;p&gt;このままでもVisual Effect Graphは動きますがBloomが弱いのでPCと比べると貧弱です。以下の設定を行うとBloomの違いが分かります。&lt;br&gt;
ただしHDRとPostProcessingはOculusの開発者ブログでパフォーマンス低下させると指摘されているようにFPSが更に下がってしまいます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.oculus.com/blog/getting-started-with-unitys-lightweight-render-pipeline-lwrp/"&gt;Getting Started with Unity’s Lightweight Render Pipeline (LWRP)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;クオリティ調整後のスクリーンショットと動画&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=-TtlK6eY22I"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k7-uTM93--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img.youtube.com/vi/-TtlK6eY22I/0.jpg" alt="screenshot" width="480" height="360"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;ビルドしたapk&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/shiena/QuestVulkan/releases/tag/1.1.0"&gt;https://github.com/shiena/QuestVulkan/releases/tag/1.1.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Assets/Settings/UniversalRP-MediumQuality.assets&lt;/code&gt;を&lt;code&gt;Assets/Settings/UniversalRP-OculusQuest.assets&lt;/code&gt;に複製して以下の項目を変更します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HDRを有効にする&lt;/li&gt;
&lt;li&gt;Anti Aliasing (MSAA)を&lt;code&gt;4x&lt;/code&gt;にする&lt;/li&gt;
&lt;li&gt;Grading Modeを&lt;code&gt;High Dynamic Range&lt;/code&gt;にする&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i_mW-54U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qf2l70beavao58r65chq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i_mW-54U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qf2l70beavao58r65chq.png" alt="image.png" width="880" height="481"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Player Settings &amp;gt; 品質&lt;/code&gt;にOculusQuestを追加して以下の項目を変更します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AndroidのDefaultに設定する&lt;/li&gt;
&lt;li&gt;Renderingに&lt;code&gt;UniversalRP-OculusQuest&lt;/code&gt;を設定する&lt;/li&gt;
&lt;li&gt;それ以外は&lt;code&gt;Medium&lt;/code&gt;と同じ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hmFfJgGV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jibiod8h9di995t4oo52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hmFfJgGV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jibiod8h9di995t4oo52.png" alt="image.png" width="880" height="382"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Player Settings &amp;gt; グラフィックス&lt;/code&gt;のスクリプタブルレンダーパイプライン設定に&lt;code&gt;UniversalRP-OculusQuest&lt;/code&gt;を設定します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U_qRDm5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/imocntgvmxetc9jy9dov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U_qRDm5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/imocntgvmxetc9jy9dov.png" alt="image.png" width="820" height="711"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  その他
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;カメラのPost Processingを有効にしてStereo Rendering ModeをMultiviewにすると右目の位置がおかしくなります。&lt;/li&gt;
&lt;li&gt;Post Processingが重いのでFPSは40～60くらいしか出ません。Post Processingを無効にすると70FPSくらい出ます。&lt;/li&gt;
&lt;li&gt;Visual Effect GraphをRebuildするとOpenGLES3でもVulkanと同様に表示できました。設定ミスの場合&lt;del&gt;OpenGLES3だとVisual Effect Graphのエフェクトが謎のレーザーになってしまいました。&lt;/del&gt;
&lt;a href="http://www.youtube.com/watch?v=uB0pnrfENEc"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R5Jh4yWX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img.youtube.com/vi/uB0pnrfENEc/0.jpg" alt="screenshot" width="480" height="360"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
      <category>oculusquest</category>
      <category>visualeffectgraph</category>
    </item>
    <item>
      <title>Groovy2系(Gradle)はコメント中の\uもUnicodeエスケープされる</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Wed, 05 Feb 2020 04:05:00 +0000</pubDate>
      <link>https://dev.to/shiena/groovy2-gradle-u-unicode-40fj</link>
      <guid>https://dev.to/shiena/groovy2-gradle-u-unicode-40fj</guid>
      <description>&lt;p&gt;Groovy2系の文字列リテラルは&lt;code&gt;\u0000&lt;/code&gt;のように&lt;code&gt;\u&lt;/code&gt;に続けて4桁の数字でUnicodeエスケープされます。&lt;br&gt;
このUnicodeエスケープは文字列リテラルだけではなく困った事にコメントにも適用されます。なので例えば以下のようなコメントを書くとエラーになります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// C:\upload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;この動作は以下のバグレポートによるとバージョン2系のパーサーはunicode readerでソースコードを読み込むので発生するとコメントされていました。つまり文字列やコメントだけではなくコードすべてに対してUnicodeエスケープしているという事です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://issues.apache.org/jira/browse/GROOVY-8395"&gt;Certain string(s) in comments cause General error during parsing: Did not find four digit hex character code.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;バージョン3系ではパーサーが新しくなりコメントに&lt;code&gt;\u&lt;/code&gt;を含めることができます。またドキュメントから見つけられなかったのですがスラッシュ文字列とドルスラッシュ文字列も&lt;code&gt;\u&lt;/code&gt;はUnicodeエスケープされなくなりました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://groovy-lang.org/releasenotes/groovy-3.0.html"&gt;Release notes for Groovy 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;とは言え、まだリリースされていないので今はどうにかしてコード中から&lt;code&gt;\u&lt;/code&gt;を取り除く必要があります。&lt;/p&gt;

&lt;p&gt;そもそもの発端はUnityでAndroid用にカスタム build.gradle テンプレートを利用して&lt;code&gt;DIR_UNITYPROJECT&lt;/code&gt;をプロジェクトフォルダの絶対パスに置換する機能を使った時に&lt;code&gt;u&lt;/code&gt;で始まるフォルダがあった事が原因でWindowsでエラーが起きた事でした。&lt;br&gt;
Unity2019.1以降なら&lt;code&gt;DIR_UNITYPROJECT&lt;/code&gt;を置換する時にパス区切り文字をエスケープして&lt;code&gt;\\&lt;/code&gt;で出力するのでこの変数で問題は起きないようです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.unity3d.com/ja/current/Manual/android-gradle-overview.html"&gt;Android の Gradle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://issuetracker.unity3d.com/issues/android-windows-template-variable-dir-unityproject-on-windows-does-not-escape-slash-characters"&gt;[ANDROID][WINDOWS] TEMPLATE VARIABLE DIR_UNITYPROJECT ON WINDOWS DOES NOT ESCAPE '/' CHARACTERS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>groovy</category>
      <category>gradle</category>
      <category>android</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>Windows版IntelliJでSource Han Code JPとMyricaがフォント一覧に表示されない</title>
      <dc:creator>KOGA Mitsuhiro</dc:creator>
      <pubDate>Tue, 28 Jan 2020 18:10:00 +0000</pubDate>
      <link>https://dev.to/shiena/windows-intellij-source-han-code-jp-myrica-2n3o</link>
      <guid>https://dev.to/shiena/windows-intellij-source-han-code-jp-myrica-2n3o</guid>
      <description>&lt;h1&gt;
  
  
  はじめに
&lt;/h1&gt;

&lt;p&gt;コーディング向けフォントに&lt;a href="http://myrica.estable.jp/"&gt;Myrica&lt;/a&gt;と&lt;a href="https://github.com/adobe-fonts/source-han-code-jp"&gt;Source Han Code JP&lt;/a&gt;があります。&lt;br&gt;
これらのフォントは視認性が高く気に入っていたのでWindows版のIntelliJで使おうとしたのですが使えなかった話です。&lt;br&gt;
ちなみにMac版だと問題なく表示できます。ぐぬぬ…&lt;/p&gt;

&lt;h1&gt;
  
  
  原因を探る
&lt;/h1&gt;

&lt;p&gt;IntelliJはOSSなのでフォント選択部分のソースを探します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JetBrains/intellij-community/blob/143/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java#L360-L387"&gt;https://github.com/JetBrains/intellij-community/blob/143/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java#L360-L387&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大体、この辺りなのでチェックコードを抜き出して検証してみます。&lt;br&gt;
以下の条件をすべて満たすとフォント一覧に表示されます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;フォント名が&lt;code&gt;.bold&lt;/code&gt;で終わらない&lt;/li&gt;
&lt;li&gt;フォント名が&lt;code&gt;.italic&lt;/code&gt;で終わらない&lt;/li&gt;
&lt;li&gt;標準フォントと太字フォントでアセントとディセントが0以上&lt;/li&gt;
&lt;li&gt;標準フォントと太字フォントで小文字の&lt;code&gt;l&lt;/code&gt;、大文字の&lt;code&gt;W&lt;/code&gt;、スペースの幅が1以上&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  検証環境
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OS: Windows8.1&lt;/li&gt;
&lt;li&gt;Java: 1.8.0_60&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  検証用のコード
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.awt.*;
import java.util.Arrays;
import javax.swing.*;

public class Main extends JPanel {

    private static final long serialVersionUID = -1L;

    public static void main(String[] args) {
        Main m = new Main();
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Arrays.stream(ge.getAvailableFontFamilyNames()).forEach(m::checkFont);
    }

    void checkFont(String fontName) {
        Font plainFont = new Font(fontName, Font.PLAIN, 12);
        System.out.print("| " + fontName + " |");
        if (plainFont.canDisplay('W')) {
            Font boldFont = plainFont.deriveFont(Font.BOLD);
            FontMetrics plainMetrics = getFontMetrics(plainFont);
            FontMetrics boldMetrics = getFontMetrics(boldFont);

            int plainDescent = plainMetrics.getDescent();
            int plainAscent = plainMetrics.getAscent();
            int boldDescent = boldMetrics.getDescent();
            int boldAscent = boldMetrics.getAscent();
            System.out.printf(" %d | %d | %d | %d |", plainDescent, plainAscent, boldDescent, boldAscent);

            int plainL = plainMetrics.charWidth('l');
            int boldL = boldMetrics.charWidth('l');
            int plainW = plainMetrics.charWidth('W');
            int boldW = boldMetrics.charWidth('W');
            int plainSpace = plainMetrics.charWidth(' ');
            int boldSpace = boldMetrics.charWidth(' ');
            System.out.printf(" %d | %d | %d | %d", plainL, boldL, plainW, boldW, plainSpace, boldSpace);
        }
        System.out.println(" |");
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  検証結果
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Myrica
&lt;/h3&gt;

&lt;p&gt;plainDescentとboldDescentが負数なのでNG&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;フォント名&lt;/th&gt;
&lt;th&gt;plainDescent&lt;/th&gt;
&lt;th&gt;plainAscent&lt;/th&gt;
&lt;th&gt;boldDescent&lt;/th&gt;
&lt;th&gt;boldAscent&lt;/th&gt;
&lt;th&gt;plainL&lt;/th&gt;
&lt;th&gt;boldL&lt;/th&gt;
&lt;th&gt;plainW&lt;/th&gt;
&lt;th&gt;boldW&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Myrica M&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Myrica N&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Myrica P&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Source Han Code JP
&lt;/h3&gt;

&lt;p&gt;plainAscentとboldAscentが負数および文字幅が0なのでNG&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;フォント名&lt;/th&gt;
&lt;th&gt;plainDescent&lt;/th&gt;
&lt;th&gt;plainAscent&lt;/th&gt;
&lt;th&gt;boldDescent&lt;/th&gt;
&lt;th&gt;boldAscent&lt;/th&gt;
&lt;th&gt;plainL&lt;/th&gt;
&lt;th&gt;boldL&lt;/th&gt;
&lt;th&gt;plainW&lt;/th&gt;
&lt;th&gt;boldW&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP B&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP EL&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP H&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP L&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP M&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP N&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Han Code JP R&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;-239&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ＭＳ ゴシックとＭＳ 明朝
&lt;/h3&gt;

&lt;p&gt;参考までにＭＳ ゴシックとＭＳ 明朝の値です。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;フォント名&lt;/th&gt;
&lt;th&gt;plainDescent&lt;/th&gt;
&lt;th&gt;plainAscent&lt;/th&gt;
&lt;th&gt;boldDescent&lt;/th&gt;
&lt;th&gt;boldAscent&lt;/th&gt;
&lt;th&gt;plainL&lt;/th&gt;
&lt;th&gt;boldL&lt;/th&gt;
&lt;th&gt;plainW&lt;/th&gt;
&lt;th&gt;boldW&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ＭＳ ゴシック&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ＭＳ 明朝&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ＭＳ Ｐゴシック&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ＭＳ Ｐ明朝&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  結論
&lt;/h1&gt;

&lt;p&gt;フォント周りは分からないので原因も分からないのですが見事にチェックに引っかかっています。&lt;br&gt;
どうすればいいんだ…&lt;/p&gt;

</description>
      <category>font</category>
      <category>intellij</category>
    </item>
  </channel>
</rss>
