- 投稿日:2020-04-02T23:21:12+09:00
【超初心者向け】Unityのプロジェクトを、GitHub for Unityを使って超簡単にバックアップする方法
この記事の目的
- 「Gitって何」というレベルの人が、とりあえずGitを使ってUnityプロジェクトをバックアップできるようになる
- 想定としては非プログラマ(デザイナーとか、VRChatユーザとか)
- 想定ユーザは1人だけで、チーム開発ではない
- ここでいう「バックアップ」は次のことができる
- 今のUnityプロジェクトの状態を保存できる
- 操作をミスってぶっ壊したときに、直前のプロジェクトの状態に戻せる
- Gitの「むずかしい」機能は使わない
- ブランチ操作などはしない
今回使うもの
- GitHub for Unity
インストール手順
1. GitHub for Unityをダウンロードする
こちらから
GitHub for Unity
のunitypackage
をダウンロードしてください。
(アセットストアから導入しても可)2. バックアップしたいUnityプロジェクトにアセットを追加する
バックアップしたいUnityプロジェクトをUnityで開き、さきほどの
unitypackage
を追加してください。導入が完了すると、メニューの
Window
->GitHub
の項目が追加されています。3. 初期設定をする
Window
->GitHub
から、GitHub for Unity
のウィンドウを開きます。
初回起動時は裏でインストールが実行されるため、ちょっと待たされる場合があります。
ウィンドウが開けたら、
Setting
を選び、Name
と
適当な名前とメールアドレスでもOKです(プロジェクトをpublicに公開するなら、ちゃんとしたものを入力しておいた方がいい)。
4. プロジェクトをGit管理下に置く
Initialize
のタブを開き、Initialize a git repository for this project
のボタンを押します。
このボタンを押すとUnityプロジェクトに対して
Git
の初期設定が実行され、このプロジェクトでGit
が使えるようになります。5. 現状の状態で1回まずバックアップをとる
インストールした直後の状態で、まず1度バックアップを取ります。
(ちなみにGitの場合はバックアップを取る作業のことを「コミット」すると呼びます)
changes
のタブを開き、すぐその下のAll
を押します。
すべてのファイルにチェックが付いたことを確認してから、下の方のCommit summary
とCommit description
を入力してください。
Commit summary
: このコミットにつける名前Commit description
: このコミットでやった作業の詳細
summary
とdescription
は適当でも構いませんが、あとからバックアップを見直す時に困るのである程度分かるように入力しておくことを推奨します。すべて入力できたら、右下の
Commit to [master]
を押します。正しくコミットできたら、
History
タブにこのコミットが追加されています。導入は以上です。
使い方
現在のプロジェクトの状態でバックアップをとる
GitHub for Unity
を導入した状態でプロジェクトを操作すると、Projectビューにマークが付きます。これは、「このファイルはまだコミットされていない」という意味になります。
つまり「バックアップしていないファイルだよ」という表示になります。バックアップを取る場合はさきほどと同じく次の操作を行います。
changes
タブを開く- 上の方にある
Refresh
ボタンを押す- このコミットへ含めたいファイルにチェックを入れる
summary
とdescription
を入力するCommit to [master]
正しくコミットできたら、
History
タブにコミットが追加されています。コミットの頻度はどうしたらいいか
「区切りがいいタイミング」でコミットする(バックアップする)とよいでしょう。
たとえば「新しいアセットを追加した」「Prefabの設定値を変更した」など。「今日1日分の作業をまるごとコミットする」でも構いませんが、巻き戻した時に大量のファイルが戻ってしまいます。
適切な粒度でコミットするようにしましょう。直前のバックアップへ巻き戻す
間違えてファイルを消してしまったり、設定値がおかしくなってしまった場合に、直前のコミットの状態に戻すことができます。
changes
タブを開く- 巻き戻したいファイル/フォルダを右クリックして、
discard
を選ぶ
discard
すると削除したファイルは復活し、変更したファイルの設定は元に戻ります。注意点として、discardで巻き戻した設定をまた元に戻すことはできません。
保存したかったファイルを間違えてdiscard
してしまうと取り返しがつかないので、かなり注意する必要があります。おまけ:前回のバックアップをなかったことにしたい
バックアップしたはいいものの、ミスってたため「前回のバックアップ」をまるごとなかったことにしたい場合。
GitHub for Unity
からは、「バックアップの操作を打ち消す」という操作ができます。
History
タブを開く- なかったことにしたいコミットの履歴を右クリック
Revert
を押す
Revert
すると、「そのコミットの逆の操作」をしたコミットが生成されます。
これによって前回のバックアップを擬似的になかったことにできます。
(新しいファイルを追加したのなら、それを消す変更を追加することでプラスマイナスゼロにする)まとめ
GitHub for Unity
を使えば、とりあえず「バックアップする」「壊れた時に直前の状態に戻す」ということができるようになります。ただし、
GitHub for Unity
は必要最低限の操作しかできません。
なので、次のような複雑な操作は実行できません。
- 特定のコミットの状態に完全に戻したい
- 複数人で同時にプロジェクト編集したい
- 変更を残したままコミットだけなかったことにしたい
- 現在の状態を保持したまま、別の作業を並行して行いたい
これらの操作がしたくなった場合は、
Git for Windows
を導入した上で、他のGUIツールを使ってみるとよいでしょう。
(SourceTree
やGitHub Desktop
など。余力があるならコマンドラインでGit
操作できるとなおよい。)おまけ:サーバにバックアップを保存する
GitHub for Unity
を使えば、そのままGitHub
(サーバ)にバックアップを保存することができます。容量制限に注意
なお、
GitHub
は無課金では1GBまでしかサーバに保存できません。
また通信量も規制の対象になり、一ヶ月あたりに1GBまでしか通信できません。
(プロジェクト単位ではなく、ユーザ単位での制限なので大量のプロジェクトをアップロードするとすぐに達してしまう)もし制限を超えた場合はアップロードができなくなる点に注意してください(勝手に課金されたりはしません)。
そのため大きなプロジェクトをGitHub
にアップロードする際は注意が必要です。ちなみに、月$5でこの容量を
50GB
まで増やすことができます。
(容量を増やす場合は、ユーザ設定のBilling -> Git LFS Data -> Edit -> Add more data pack
)アップロード方法
1. GitHubアカウントを作る
GitHub
にアクセスし、新しいアカウントを作ります。2. Unity上でサインインする
GitHub for Unity
のウィンドウの右上にあるSign in
を押してGitHub
にサインインします。
3. リモートリポジトリを作る
GitHub for Unity
のウィンドウの左上の、Publish
ボタンを押します。
すると新しくリモートリポジトリを作る画面が出てくるので、名前などをつけてリモートリポジトリを作ります。
Make repository private
にチェックをいれると、自分だけがアクセスできるリモートリポジトリになります。
プロジェクトの内容を第三者に見られたくない場合は必ずチェックしてください。
リモートリポジトリができると、現在のプロジェクトの状態が自動でアップロードされます。
アップロード状況はブラウザからGitHub
を開くことで確認できます。
4. 定期的にサーバにアップロードする
リモートリポジトリの設定ができると、
GitHub for Unity
のウィンドウの左上のボタンが変わります。
Fetch
: サーバの状態をダウンロードする(反映はしない)Pull
: サーバの状態をダウンロードして、プロジェクトに反映するPush
: ローカルの状態をアップロードするコミットが終わったら
Push
するようにするとよいでしょう。アップロードしたプロジェクトファイルのダウンロード方法
たとえば「別のPCで作業をしたい」等となった時はサーバにアップロードしてあるプロジェクトファイルをダウンロードしてくる必要があります。
GitHubのダウンロードボタンは使えません
GitHub
にはアップロードしたファイルをZipでダウンロードするボタンがあります。
ここからZipファイルをダウンロードして解凍すれば保存したプロジェクトファイルが入手できます。
が、ダウンロードボタンからプロジェクトファイルをダウンロードした場合、音声や画像データが読み込めない状態になります。これは特定の拡張子のファイルは
GitHub
の別のサーバに保存されているからです。(Git LFS
という機能が使われている。)
アップロードに失敗しているわけではないので安心してください。正しい方法でダウンロードすればちゃんと復元できます。どうしたらいいの
一番簡単な方法は
GitHub Desktop
を使うことです。1.ダウンロードしてインストールする
2. GitHubにサインインする
起動したら
File -> Option -> Accounts
からGitHub
にサインインしてください。3. アップロードしたファイルをダウンロードする
File -> Clone repository...
を押す。ダウンロードしたいリポジトリを選び、保存先を選んで
Clone
を押す。
Git LFS
を初期化しますか?と聞かれたらInitialize Git LFS
を押す。
これで正しく画像や音声データを含んだ状態でプロジェクトがダウンロードできました。
4. Unityで開く
あとは普通にUnityで開けばOKです。
- 投稿日:2020-04-02T21:49:48+09:00
OpenVRでトラッキングしているコントローラの種類を判別する
はじめに
こんにちは、最近Indexコントローラを買ったZeniZeniです。
VRゲームをやっているとよく出くわすのですが、viveのコントローラで遊んでいるのにチュートリアルでのコントローラの説明がoculus touchで操作方法がわからない…という事態、できることなら全種類表示するか、今使っているコントローラに合わせて説明してほしいですよね。今回はUnityにおいて、今現在使用しているコントローラの種類を動的に判別する方法を紹介します。
動作環境
- Unity 2019.3.9f1
- SteamVR 2.5.0
実装方法
結論から入りますが以下のコードを実装します。
DeviceTypeDetecter.csusing UnityEngine; using Valve.VR; public class DeviceTypeDetector : MonoBehaviour { //defaultのやつにしておく public SteamVR_Action_Pose poseAction = SteamVR_Input.GetAction<SteamVR_Action_Pose>("Pose"); //取得したいデバイスが割り当てられている入力元(Left Hand等) public SteamVR_Input_Sources target; void Update() { if (Input.GetKeyDown(KeyCode.D)) { var deviceName = DetectUsingDeviceType(target); Debug.Log(deviceName); } } public string DetectUsingDeviceType(SteamVR_Input_Sources target) { CVRSystem system = OpenVR.System; uint index = poseAction[target].trackedDeviceIndex; //targetに設定されているデバイスが存在しないとき-1が返ってくる if (system == null || index == -1) return null; ETrackedPropertyError error = ETrackedPropertyError.TrackedProp_Success; //第2引数に入れるETrackedDevicePropertyという列挙型で、取得したい情報を選べる uint capacity = system.GetStringTrackedDeviceProperty( index, ETrackedDeviceProperty.Prop_ModelNumber_String, null, 0, ref error); //targetのデバイスの名前が取得できなかった時 if (capacity <= 1) { Debug.LogError("<b>[SteamVR]</b> Failed to get Model Number for tracked object " + index); return null; } var buffer = new System.Text.StringBuilder((int)capacity); system.GetStringTrackedDeviceProperty( index, ETrackedDeviceProperty.Prop_ModelNumber_String, buffer, //bufferにデバイスの情報が書き込まれる capacity, ref error); return buffer.ToString(); } }これを適当なゲームオブジェクトにアタッチします。
インスペクターだとこんな感じです。
ゲームを実行し、コントローラがトラッキングされた状態でDキーを押すとコントローラの名前がコンソールに出力されます。
このとき出力されるコントローラの名前ですが、GetStringTrackedDeviceProperty
関数の第2引数に入れるETrackedDevicePropertyという列挙型の種類によって、微妙に異なる名前が返ってきます。
ETrackedDevicePropertyには大量に種類があり、コントローラの名前だけでなくバッテリー情報や使用しているトラッキング方法などの情報も取得することができます。
この中でコントローラの種類を判別することができるものは3種類あり(実はもっとあるかもしれませんが調べるのがつらかったのでとりあえず3種類説明します)、各コントローラとそれによって出力される値は以下の表の通りです。
(その他のコントローラについてはご自身で調べてみてください。)
後はこれらの値を用いてよしなに分岐処理を入れるだけです。
余談
Prop_RenderModelName_Stringによって参照される値は、SteamVR_RenderModelという関数内でコントローラのモデルをUnity内に表示するために使われています。
コントローラのモデルはどこから持ってきているのだろうかと調べたところ、例えば左手のindexコントローラならば
\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\indexcontroller\resources\rendermodels
フォルダ内に大量のobjファイルが入っており、ここからロードしていたことがわかりました。
参考資料
- 投稿日:2020-04-02T20:03:00+09:00
Unity新規学習メモ
ショートカットキー
効果 コマンド プロジェクトの上書き保存 ⌘ + S プロジェクトの別名保存~ ⌘ + ⇧ + S --- --- [パン](画面移動)モード Q パン(平行移動) ⌥ + ⌘ + ドラッグ パン(回転移動) ⌥ + ドラッグ [移動]モード W [回転]モード E [拡大縮小]モード R [Rect Tool]モード(移動回転拡大縮小全部(2D用なんでもツール?) T [移動回転拡大縮小]モード(3D用なんでもツール?) Y オブジェクトに属性を付与
◆Add component → Rigidbody → Use Gravity(デフォルトON)
設定したオブジェクトに対して重力による動きが加わる。後のGUI操作は書くのが面倒に・・・
[Unity2Dチュートリアル]
で爆弾避けゲームをなぞって作成、最後にプレイヤー移動を左右矢印キーで、っていうのを自分で付加してやったが、UnityはGui操作による開発が基本になりそうなので、感覚で覚えるしかないな・・・。あと、なんとなくMacBookノートではやりにくい。Windowsデスクトップで大きい画面見ながらやる方が良さそう。あと、サイトでも進めてたが、ノートのトラックパッドじゃやりにくい、マウスがあった方がやっぱりいい。すぐサボるからノート持って自習室行くけど。コードの記述は随時ググって調べよう。なんとかなりそうな気はする。
- 投稿日:2020-04-02T19:36:15+09:00
Blender2.82で液体シュミレーションについて
はじめに
Blender2.82が公開後、液体シュミレーションをしようとすると、
項目が変わっていて混乱したので調べました。液体を流すだけならこうすればいい!
配置
・モンキー(なんでもいい)
・正方形(モンキーを囲むように配置)
モンキーの設定
「物理演算プロパティ」→「液体」→「タイプ」をフローに設定
「フロータイプ」を液体、フローの挙動をジオメトリに設定
正方形の設定
「物理演算プロパティ」→「液体」→「タイプ」を”ドメイン”に設定
正方形の設定タブ→データをベイク、待つ
正方形のメッシュタブ→メッシュをベイク、待つ
アニメーション再生で液体シュミレーションが可能
ベイクに時間を短縮する
初期設定ではベイクに時間がかかりすぎるので、解像度をいじります
分割の解像度を24に設定する
分割の解像度を24~60とした時の変化
まぁ当たり前に細かく滑らかになりますね。おわりに
テスト時は解像度を下げて、本番だけ解像度を上げてベイクという流れが一般的だと思います。
また、別のシュミレーションもいじったら記事にしたいと思います。
- 投稿日:2020-04-02T17:03:57+09:00
Unity+ARFoundationでiOS用ARサンプルを動かす
Unity+ARFoundationでiOS用ARサンプルを動かす
1. 開発環境
- MacBook Pro (macOS Catalina 10.15.4)
- Unity 2019.3.7f1
- XCode 11.4
- iPad Pro 11 inch 第2世代 Wi-Fi+Cellular LiDARも搭載!
2. ARFoundationの導入
arfoundation-samples (GitHub)よりクローンを取得します。
ここで紹介する内容は、Update to ARFoundation 4.0.0-preview.1以降あたりのコミット分のクローンとしました。
これをMacのローカルドライブに展開します。ここでは、~/Documents/Unity/arfoundation-samples-master
に展開しました。3. Unity Project を開きビルド
上で展開した
~/Documents/Unity/arfoundation-samples-master
を Unityで開きます。
AR関係パッケージの確認
まず念の為、ARFoundationで必要なパッケージが導入されているか確認します。[Window]-[Package Manager]を開きます。
赤色で囲んだ、AR関係のpreview.1 - 4.0.0
があればOKです。
Bundle Indentifierを変更
[Edit]-[Project Settings...]
でプロジェクト設定を開き、その中のPlayer
タブを選択します。
Bundle Identifier
がそのままでは、このあとのXCodeでのビルドが通らないので、ユニークな識別コードに変更します。
ビルド
[File]-[Build Settings...]
でBuild Settings
ウインドウを開きます。
Scenes In Build
でビルド対象のシーンを1つ選択します。ここではまずScenes/SimpleAR/SimpleAR
を選択します。
Platform
には、もちろんiOS
を選択します。
Build
ボタンを押し、XCode用のプロジェクトを書き出すフォルダを指定します。ここでは、このプロジェクトのフォルダの下にiOS
という名前のフォルダを作成して指定します。4. XCodeでビルドとiPadへ転送
上で保存したプロジェクトフォルダ
iOS
の下にARFoundation
というフォルダがあり、その中のXCodeプロジェクトファイルUnity-iPhone.xcodeproj
をXCodeで開きます。
そして、iPadをMacBookに接続しておきます。
Signing
で次の設定を行います。
-Automatically manage signing
をチェック
-Team
には、自分のApple Developper Accountを指定する
デプロイ先のiPadを右上のリストで選んで再生ボタンを押すと、iPadにプログラムが転送されます。
5. iPadでの実行結果
iPadにプログラムが転送されると、しばらくして "Made with Unity"のロゴが表示されてプログラムが起動します。
机と壁にiPadを向けると、なにやら平面を認識した結果がAR表示されました。画面上をタップすると、キューブも表示されました。
6. 今後やってみたいこと
Unityのサンプルプロジェクトには、今回試した"SimpleAR"というシーン以外にもたくさんのサンプルシーンがあります。それらも順次試したいのですが、たくさんあるシーンを「UnityのBuild Settingsで選んではビルド→XCodeでもビルド→iPadへ転送」と繰り返さなければならないので面倒です。シーン選択用のメニューをUnity上で作ってやろうかと思います。
とりあえず3次元情報を取得して認識していそうなサンプルプログラムは動きました。あとはやっぱり、生の3次元点群を取得して、iPadを完全な3Dスキャナとしていろいろ活用したいところです。特にこの新型iPad Pro には LiDARが搭載されているのですから!ソースをこれから詳しく追っていきます。
参考文献
大変参考になりました。ありがとうございます。
- UnityでiOS向けのARアプリを開発する方法 ( AR Foundation + ARKit-XR-Plugin 導入編 )
- 投稿日:2020-04-02T11:17:34+09:00
FuelPhpとUnity間でWWWFormの値を取得
Unity側
WWWForm form = new WWWForm(); if (userID != "") { form.AddField("userID", userID); } if (token != "") { form.AddField("token", token); } if (stageId != "") { form.AddField("stageId", stageId); } ※何かしら処理(ヘッダー追加したり色々) yield return www.SendWebRequest();↓↓↓↓↓↓↓
FuelPhp側
$stageId = Input::post('stageId'); // ログ出力 Log::info('Application started (with $stageId = '.$stageId.')', 'action_index()');Input::Postで取得、キーを指定して受け取る
参考URL
http://fuelphp.jp/docs/1.7/classes/input.htmlキーを指定しない場合は連想配列で取得できる
(試してないがWWWFormのDictionaryを全部取得できると思われる)
※エラーになったので後で考える$post = \Input::post(); $stageId = $post['stageId'];