- 投稿日:2020-02-15T21:53:56+09:00
Windows/macOS/Git/Unity Collaborateを併用する
- Git 2.24
- Unity 2019.2.19f1
この記事の目的
- Unityを使った協業について、プログラマ側はGit デザイナ側は Unity Collaborate を利用していくスタイルを実現する為の環境設定について述べる
tl; dr
- Unity Collaborate を master として扱う
- テキスト系のアセットは基本的に全部 lf(Unix式) を改行コードとする
- デザイナ側は特に何もする必要はない
- Windows 側の プログラマは
git config --local core.autocrlf input
- macOS 側は特に何もする必要はない
背景
Git はとても便利で優秀なツールなのですが、知らない人にとっては地獄です。学べば解決する話ですが、学習が容易ではない人を雑に否定することもできません。そこで、デザイナには Unity Collaborate を使ってもらうこととしました。
しかし Unity Collaborate は Git ではなく、それぞれが相互に運用できるように作られていません。そこで、どうすればそれぞれ仲良くできるのか試行錯誤した結果をここに記します。
小技の紹介
.collabignore
Unity Collaborate で、管理しないファイルを指定する方法です。
プロジェクトのルートフォルダにのみ存在できることに気をつけてください。ルートフォルダというのは Assets フォルダの直下ではなく Assets フォルダが置いてあるフォルダです。
この運用モデルの場合、デザイナ側に不必要なもの(そして、ただ存在するだけでUnity Editorの動きが悪くなるもの)をこれで指定することができます。
.gitignore
Gitで管理しないファイルを指定する方法です。有名すぎるので説明を省略します。
.gitattributes
Git の側で、どのファイルをテキストとして扱うのかを明示的に設定するファイルです。とりあえずはこう書いておけば間違いないです。
*.cs textWindows において、テキスト系のファイルを取得するときに改行コードを自動変換せず、コミット時に cr+lf を lf として解釈させる
git config --local core.autocrlf input
この指定です。input は、チェックアウトするときはそのまま、コミットする際に改行コードの変換を行う指定を意味します。
true にすると、チェックアウトするときに lf -> cr+lf を行い、コミットするときに cr+lf を lf としてファイルを格納します。
false にすると、チェックアウトにもコミットにも一切の変換を行いません。
運用について
- デザイナは Unity Collaborate のみを使う
- デザイナごとに、作業するフォルダを明確に分けておくと衝突しないので良い。また、プログラマともフォルダが明確に分かれていると良い。
- プログラマは Git のみを使う
- いつも通りの運用です。
- Unity Collaborate と Git を両方を使い、両方の変更をまとめていく管理者をプログラマ側にひとり用意する
- この人が頑張ります
- 運用方針としては Unity Collaborate = Git の master となるように頑張ります。
- master じゃなくても master 的なものを目指します(便宜的に本文書では master と呼びます)
- 単純に言うと Unity Collaborate の最新を Restore したときに、それと master の最新が一致する状態を目指します。
- 同様に Git から最新の master を持ってきたときに、それが最新の Unity Collaborate の状態となることを目指します。
Unity Collaborate と Git をまとめる手順
手順と言うほどのことではありませんが、書き出すとこうなります
- master ブランチにする。
- Unity Collaborate 側(デザイナ側)の変更があったら、それを Update してこちらに引っ張ってくる
- この Update で得られたものを Git 側に commit する
- Git 側で共有したい変更を master に merge する
- merge した内容を modified として Unity Collaborate 側へ publish する
このときに、このまとめ作業を行うマシンが Windows だと(macOS を使っているプログラマが混在していて autocrlf の設定が true だと)master の最新を checkout したときに、改行コードが自動的に変換されてしまい Unity Collaborate の最新と異なってしまうハマりに遭遇し、地獄になるわけです。
結論
- みんな Git を使えるようになって欲しい
- Git は色々設定項目があるので、最悪でも Git 側の色々設定を変更することによって無理矢理解決できることがぼちぼちある
- 歴史的経緯とはいえ、改行コードが異なっているの本当につらい。次の次の世代くらいには解決していて欲しい
- Unity Collaborate はシンプルですが、それゆえにものすごく強力で便利なものでもあるので Git などの外部管理にこだわらずに採用できるか考えてみると良いかもしれません
- Unity Collaborate ももっとオプションとか機能とか増やして欲しい…… Cloud Build に連携しなくていいので、もっとローカルなエリアで動いてくれたら嬉しい……
- 投稿日:2020-02-15T15:15:07+09:00
ゼロから始めるVR開発 ~実機でのテストまで~
はじめに
開発したことのない、Unity自体使ったことのない知識ゼロの私がVRアプリを開発する記録。
やっていて少しでも引っかかったところがあれば記載していきます。
自分がやったことの見直しのための記事ですが、何もわからない状態の人が参考になれば幸いです。開発環境
- Unity Hub 2.2.2
- Unity 2019.2.1f1
- Oculus Quest 64GB
- MacBook Pro(2017) 10.14.6
Unityのインストール
UnityHubを使うとUnityのバージョン管理ができるらしい。
とりあえずUnityの最新版をインストールした。OculusUnityのスタートガイド
スタートガイド
https://developer.oculus.com/documentation/unity/book-unity-gsg/まずは何をどうすればいいのかわからない状態だったので、とりあえずチュートリアルを何も考えず手順通りこなす。
私はOculusQuestのため、OVRManagerのインスタンスを変更した。
OVRManagerはOVRCameraRigインスタンスにアタッチされているのでTarget DevicesをQuestに変更する。チュートリアルをこなす
プレイヤーへのコントロールスクリプトの追加の際にPlayerControllerの名前についたファイルが存在しているため別の名前をつけた。
スクリプトの速度の設定を忘れないようにする。Playをすると以下のエラーが出た。
NullReferenceException: Object reference not set to an instance of an object
OculusSampleFrameworkUtil.HandlePlayModeState (UnityEditor.PlayModeStateChange state) (at Assets/Oculus/SampleFramework/Editor/OculusSampleFrameworkUtil.cs:43)
UnityEditor.EditorApplication.Internal_PlayModeStateChanged (UnityEditor.PlayModeStateChange state) (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:415)https://forums.oculusvr.com/developer/discussion/77966/nullreferenceexception-from-oculus-package
以下のサイトで見る限りは対処法は不明。問題の行のをコメントアウトしてひとまず誤魔化す。
一通りやってはみたものの作ったアプリをOculusに持って行って動かす方法は書いていなかったため対処方法を探す。開発モードをオンに
Oculusの初期設定の際にスマホにインストールしたOculusアプリから設定->OculusQuest->その他設定->開発者モードをオンに
初めての場合開発者登録が必要のため登録する。
充電に使うUSB-CケーブルでPCと接続すると許可ウィンドウがQuest側で出るので許可する。JDK・SDKのインストール
OculusQuestはAndroidベースなのでJDK・SDKをインストールする。
ビルドする
ビルドして続行してみたところ4つのエラーが出た。
BuildFailedException: The Vulkan Graphics API does not support XR in your configuration. To use Vulkan, you must use Unity 2019.3 or newer, and the XR Plugin Management.
1[T] oneInterfaces, System.Action
OVRGradleGeneration.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at Assets/Oculus/VR/Editor/OVRGradleGeneration.cs:104)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass15_0.<OnBuildPreProcess>b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:411)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List1[T] invocationOne, System.Collections.Generic.List
1[T] twoInterfaces, System.Action1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:391)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:187)
Vulkan Graphics APIは使えないようなのでOPenGLES3の優先度を上げれば消える。
Build Settingsのプレイヤー設定のその他設定から変更できる。
UnityException: No Android devices connected
Make sure your device is plugged in.
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:187)
アンドロイドの端末が接続できてねーぞ、とのこと。
開発者モードがオンになっているのを確認した上でもう一度USBデバッグの許可をしたら消えた。残り二つは上記2つのエラーを直したら消えたので省略。
動かしてみた
ひとまずチュートリアルのプロジェクトを実機にて動作確認することができた。
ビルドしたアプリはOculusのナビゲーション->ライブラリ->提供元不明のアプリから選択することで動作するようになった。その他参考になった記事
Oculus Quest に Unity で開発したアプリをいれる方法(Mac/Win)
はじめてのOculus Quest 開発 with Unity
最後に
次はユニティちゃんを動かしてみたい。
- 投稿日:2020-02-15T10:15:48+09:00
unity iosへのビルドエラーに関して(解決済み)
unityでビルドを試験的に行ったところエラーが出てしまい。どうにもなりませんでした。
エラー内容(一部省略)
1 Failed running/Application/Unity/省略../UnityLinker.exe
2 Exception 省略il2cpp..../UnityLinker.exe did not run properly使用Unity 2019.3.1 MacBook Air
解決策は、
① Unity のプロジェクト(ゲーム)をUnity(アプリケーション)フォルダ(デレクトリ)
に保存。② buildの保存先もunityのアプリケーション内に保存
私自身はプロジェクトをSDカード(外部)に保存していました。
やったこと
① 以前に作ったプロジェクトをassetからexport(この場合の保存場所はどこでもいい)
② Unityを外部ではなくMacbook自身に再インストール
③ 新しくプロジェクトを作成(保存先はそのUnityのフォルダ内にする←重要)
④ テストとしてiosをbuildしてみる(成功)
⑤ ①をassetからインポート
⑥ buildしてみる→成功(保存さきはそのUnityのフォルダ内←重要)