20210506のUnityに関する記事は5件です。

Unityで作成した大容量プロジェクトをGitLabにアップロード

概要 この記事はUnityで作成した大容量プロジェクトをGitLabにアップロードするための手順を簡潔にまとめたもの 初心者なので、不備があってもご容赦いただけると幸いです。 この記事を記載しようと考えた経緯 元々GitHubにアップデートをしようと思ったが、無料で使用できる容量ではオーバーしてしまい右往左往していたところ、GitLabを知り備忘録として記事にした 事前準備 ● gitlabで新規プロジェクトを作成 ● .gitignoreファイルをアップロードしたいプロジェクトに挿入 (挿入場所はAssetsと同じ階層) Unityをgitにアップロードする際に必要と言われている.gitignoreのテンプレートは( https://github.com/github/gitignore )を参考にしました アップロード手順(ターミナルで実行) 1 git init 2 git remote add origin [自分が作成したプロジェクトのURL] 3 git add . 4 git commit -m “適当なコメント” 5 git push origin master 5でエラーが出た場合は以下6,7を実行し、再度5を実行 6 git fetch 7 git merge --allow-unrelated-histories origin/master
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityでandroid向けVRゲームを作成する際の備忘録

Unity初心者がVRゲームを作成するにあたりぶち当たった問題をつらつらと書き記していきます。 ※順次追記していきます。 ■環境  Unity:2021.1.5f1  URP:11.0.0  Cardboard XR Plugin:v1.5.0  試験端末:HUAWEI P30 lite ■ぶち当たった問題  1,URPのテンプレートからプロジェクトを作成すると端末上で何も表示されない  2,シェーダーがガンマ色空間用にカスタマイズされていない?  3,SpotLightやPointLightのModeをRealTimeにするとAndroid端末上でのみ影が表示されない ■問題点1:URPのテンプレートからプロジェクトを作成すると端末上で何も表示されない 写実的な絵のゲームを作成したい場合、URPを使用するという選択肢があります。 モバイル端末アプリケーションにも推奨されており、URPのサンプルプロジェクトを開くと十分に写実的な映像が見られます。 ※さらに写実的な映像を作成したい場合はHDRPの使用が推奨されている。 とりあえずこのサンプルプロジェクトをVR化することを第一ステップとしようと思い、下記を参考にビルドを行いました。 cardboardサンプルプロジェクトは正常に動作したのですが、URPのテンプレートからプロジェクトを作成してビルドした場合、真っ黒な画面が表示されるだけのアプリが出力されました… ・cardboardサンプルプロジェクトとの比較 ということで原因を調査しました。cardboardサンプルプロジェクトとURPサンプルプロジェクトの設定と比較して差分がある部分をひたすらチェックしていくというアナログな手段で調査しました。 ※ググり方が悪かったのか問題点そのものの解決策は見つからなかったです。 以下の2点を変更するとVRアプリとしては正常に動作するようです。  ①Project Setting→Player→Other Setting→Color Spare→Gamma  ②Main camera→Camera→Rendering→Post Processing→チェック外す ①android端末はリニア色空間に対応していない? 上記投稿は2017年ですが依然として問題があるようです。 少なくともHUAWEI P30 liteでは2021/05/06現在対応していないようです。 ※Oculusなどでは対応していそう? 嘆いていても仕方がないのでガンマ色空間でゲームを作成する方針とします。 ②Post Processingは非対応? Post Processingを有効にするとUnityのロゴマークの画面から遷移しませんでした。 こちらもどうやら非対応もしくは一部のポストプロセスが干渉してしまっていると思われます。 ■問題点2:シェーダーがガンマ色空間用にカスタマイズされていない? シェーダーについてはまだ全く勉強していない状態なのでそういうものなのかもしれませんが、"Universal Render Pipeline/Lit"で描写したときに影が濃すぎるように感じます。 "Lit"がガンマ色空間想定されていない、もしくはガンマ色空間は"そういうもの"、のどちらかかと思います。 ・リニア色空間設定時: ・ガンマ色空間設定時: ※画面奥のSpot Lightの設定は、Mode = baked、Intensity=10にしています。  Mode = Mixed or Realtimeにすると黒い影は発生しません。 リニア色空間への変更は問題点1で不可であり、影の濃さや色調をPost Processingで設定することも同様に問題点1でできないので、シェーダースクリプトを書き換えることでどうにかできないか模索中です。素人ながらSimpleLit色々を弄ってみましたがいい感じにはならず。BakedGIをうまいこと弄れればそれっぽくなりそうな感じはします。 もし解決策ご存じの方いたら教えていただきたいです… 追記) Intensityの設定が間違っていました。右の壁に描写されている影をみれば分かりますが、ガンマ色空間とリニア色空間での光の強さ(Intensity)は数値が同じでも実際に見える強さは異なります。 BakedGIはBaked Global Illuminationの略。Unity Learnに色空間とGIを含めた説明がありました。 https://learn.unity.com/tutorial/introduction-to-lighting-and-rendering ■問題点3:SpotLightやPointLightのModeをRealTimeにするとAndroid端末上でのみ影が表示されない Preview上では影が見えるのですがAndroid端末上では見えません。 Sun Sourceに設定しているDirectionalLightはRealtimeでも影を表示します。 原因調査中… 追記1 2021/05/08)問題点2追記、問題点3追記 追記2 2021/05/08)問題点2追記
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LookingGlass Portrait 逆引きQ&A

日本勢は本日(21/05/06)から着弾していますが、Twitter以外であまり情報がなさそうなので、引っかかったところ追記していきます。 チュートリアルとかないの? 英語ですが簡潔なのでこちらがオススメ: https://docs.lookingglassfactory.com/getting-started/portrait ステップバイステップ式の公式チュートリアル動画はこちら(セットアップ方法もこちら): https://learn.lookingglassfactory.com/onboarding/ 公式Discordサーバーはこちら: https://discord.com/invite/lookingglassfactory [Unity] インタラクティブなスタンドアロン(単独動作)モードを作る方法は? 公式Discordで質問したところ、現時点(21/05/06)では作れない模様。 代わりに、HoloPlay RecorderでUnity上のシーンを録画したものをスタンドアロンモード用に転送する方法を案内されました。 http://learn.lookingglassfactory.com/tutorials/getting-started-with-unity/ スタンドアロンモードで起動するには? PCと接続した状態だとスタンドアロンモードにできない模様。 付属のACアダプタか、RasPi4対応のUSB-Cアダプタのみ接続で起動。 起動時の最大消費電流が2Aほどなので、5V2AのUSB-ACアダプタであれば起動できそう。 [Unity] HoloPlay Recorderで録画できない ※1.4.2で直りました HoloPlay Unity Plugin 1.4.1添付スクリプトにバグ。 Assets/Holoplay/Plugins/FFmpegOut/Runtime/FFmpegSession.csの32行目を下記のように書き換えると録画できる。 "-fflags +discardcorrupt " + ※discardcorruptの前のスペースを削除する [Windows] PCに接続しても表示されないんだけど いくつか見る点があります。 HoloPlay Serviceがインストールされているか? ここからDLしてインストールしておく(LookingGlassアカウントの作成が必要) https://lookingglassfactory.com/software HDMIとUSB-CともにPCと接続しているか? HDMI端子をPC側に接続しているか? HDMI変換機経由ではなく、直接HDMIで接続しているか? DisplayPort変換を使っているとうまく認識されないことがあった 接続するUSBポートを変える/USB-Cメス-USB-Aオス変換を使ってUSB 3.0ポートへ接続する 筆者はこれで解決 ディスプレイとして検出されていない可能性。下記の画面で「検出」ボタンを押してみる PCと接続した際に、PCのデスクトップが表示されていたら接続OK。 スタンバイモードになっている可能性。下記の上のボタン(ランプがついているほう)を一度押してみる 青LED表示ならPC接続モード。白LED表示は単体動作モード [Windows] PCに接続した後の表示が変なんだけど? ディスプレイの設定画面を開き、下記のように設定する [表示スケール]を100%に [複数のディスプレイ]がデスクトップをこのディスプレイに拡張するになっていること 片側が常にフリッカーしているような現象が起きている場合、コンテンツを表示させると直った。(おそらく仕組み上の仕様) また、しばらく表示させておくと直る可能性あり。 直らない場合、電源供給が足りていない可能性もあるので、別のUSB3.0以上のポートに接続。(USB2.0ポートは使えない) [Unity] Playしても何も表示されないんだけど(PCのデスクトップが表示されたまま) Unity上で[Ctrl+E]を押すとルキグラ側で表示される。 [Unity] なんか表示するものが小さいんだけど Holoplay CaptureのSizeを小さくするとズームできる。 ※モデル自体を近くにしたり、巨大化したりするとピントが合わなくなって表示がおかしくなったりするので、ルック調整はHoloplay Captureの値を変えながら行うとよさそう [Windows] PCに接続したときにデスクトップのアイコン順序が変わるの嫌なんだけど DesktopOKというフリーソフトを使うとデスクトップアイコンの順序を復元できます。 日本語化対応、64bit版あり、Windows10でも動いています(筆者愛用中)。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VContainer入門(3) - 基本的なRegister

この記事について 前回に引き続きVContainerの説明をしていきます。 これから何回かにわけてIContainerBuilderで使える様々なRegister関連のメソッドを紹介します。 今回は基本的なRegisterについて説明します。 MonoBehaviour関連のRegisterの説明は次回にします。 目次ページ: VContainer入門 Register 基本的な使い方 Registerは一番基本的な登録メソッドです。 型引数に登録したいクラス、引数にLifetimeScopeを指定するだけで使えます。 登録する builder.Register<Logger>(Lifetime.Singleton); 受け取る [Inject] public Constructor(Logger logger) { } 登録する型を指定する 型引数にインターフェースを指定して別の型として登録できます。 受け取る側は具体的な型を意識せずにインターフェースとして受け取れるようになります。 登録する builder.Register<ILogger, Logger>(Lifetime.Singleton); 受け取る [Inject] public Constructor(ILogger logger) { } 生成方法を指定する 登録する型のオブジェクトを生成するデリゲートを指定して、その型の生成方法を指定できます。 IObjectResolverを受け取って登録する型を返すデリゲートを渡します。 その型を解決するときはそのデリゲートが呼ばれるようになります。 登録する builder.Register<ILogger>(resolver => new Logger(), Lifetime.Singleton); 受け取る [Inject] public Constructor(ILogger logger) { } RegisterFactory 基本的な使い方 RegisterFactoryでファクトリメソッドを登録できます。 ここで言うファクトリメソッドとは、その型のオブジェクトを生成するメソッドです。 そのメソッドを受け取った側でそれを呼び出して必要なオブジェクトを生成できます。 登録する builder.RegisterFactory<ILogger>(() => new Logger()); 受け取る [Inject] public Constructor(System.Func<ILogger> loggerFactory) { ILogger logger = loggerFactory.Invoke(); } 引数ありで登録する 型引数に指定して引数ありのファクトリメソッドも登録できます。 以下の例では引数としてintを受け取っています。 型引数に複数指定して複数の引数にも対応できます。 登録する builder.RegisterFactory<int, ILogger>(arg => new Logger(arg)); 受け取る [Inject] public Constructor(System.Func<int, ILogger> loggerFactory) { ILogger logger1 = loggerFactory.Invoke(1); ILogger logger2 = loggerFactory.Invoke(2); } RegsiterInstance 基本的な使い方 Registerで型を登録すると、その型が必要になったときにVContainer側で生成されます。 一方、RegisterInstanceを使うとすでに存在するインスタンスを登録できます。 登録する var logger = new Logger(); builder.RegisterInstance(logger); 受け取る [Inject] public Constructor(Logger logger) { } 登録する型を指定する Registerと同じように登録する型を指定できます。 登録する var logger = new Logger(); builder.RegisterInstance<ILogger>(logger); 受け取る [Inject] public Constructor(ILogger logger) { } As As Asを使うと登録するインターフェースの型を指定できます。Registerの後ろにメソッドチェーンの形で使います。 登録する builder.Register<Logger>(Lifetime.Singleton).As<ILogger>(); 受け取る [Inject] public Constructor(ILogger logger) { } 複数の型で登録したい場合はつなげて指定できます。 指定したどの型でも受け取れるようになります。 登録する builder.Register<Logger>(Lifetime.Singleton).As<ILogger>().As<ILogger2>.As<ILogger3>(); 受け取る [Inject] public Constructor(ILogger logger, ILogger2 logger2, ILogger3 logger3) { } AsSelf インターフェースとして登録するとき、さらに自分自身の型としても登録したい場合はAsSelf()をつけます。 登録する builder.Register<Logger>(Lifetime.Singleton).As<ILogger>().AsSelf(); 受け取る [Inject] public Constructor(Logger logger, ILogger logger) { } AsImplementedInterfaces AsImplementedInterfaces()で、その型が実装する全てのインターフェースとして登録できます。 登録する builder.Register<Logger>(Lifetime.Singleton).AsImplementedInterfaces(); WithParameter WithParameterを使うと、そのRegisterで生成されるオブジェクトに対してだけinjectできます。 登録する builder.Register<Logger>(Lifetime.Singleton).WithParameter<string>("[Prefix]"); このように登録するとLoggerでstringが受け取れるようになります。 Logger.cs public sealed class Logger { private string prefix; [Inject] public void Logger(string prefix) { this.prefix = prefix; } public void Log(string message) => Debug.Log(prefix + message); } WithParameterでは名前でもinjectできます。 登録する builder.Register<Logger>(Lifetime.Singleton) .WithParameter("prefix", "[Prefix]") .WithParameter("suffix", "[Suffix]"); Logger.cs public sealed class Logger { private string prefix; private string suffix; [Inject] public void Logger(string prefix, string suffix) { this.prefix = prefix; this.suffix = suffix; } public void Log(string message) => Debug.Log(prefix + message + suffix); }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

unityのcolliderによる当たり判定について

まず始めに、本記事の情報はunity開始1週間の人が書いているため間違っている可能性大です。 承知の上でよろしければコメントお願いします。     Unityでは、BoxColliderとRigidbodyを使ってOnTriggerで当たり判定が簡単にできることを知った。 ->じゃぁ2Dと3Dでの当たり判定も同様にできるのか? 試したこと: SquareにBoxCollider2D、CubeにBoxColliderを設定し当たり判定をとる 結果   : 無理だった 検索した結果、以下の記事で3DモデルにCollider2Dとその逆を試している。 以下の記事に書かれているが、X軸、Y軸方向に回転させなければ破綻しなさそうなことが分かった。 https://nyama41.hatenablog.com/entry/3d_model_2d_collider https://nyama41.hatenablog.com/entry/2d_map_3d_collider ここで新たな疑問、Collider2DはZ軸を変えた場合どうなるのか まずMainCameraがOrtheographicのとき、破綻していない。 次にMainCameraをPerspectiveに設定 Game画面ではあたっているが、当たり判定のログが出ていない。 さらにずらしたところ当たり判定が出た -> よく考えれば当たり前だが、2Dのときの当たり判定はX/Y軸で決まっているみたい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む