20200402のUnityに関する記事は6件です。

【超初心者向け】Unityのプロジェクトを、GitHub for Unityを使って超簡単にバックアップする方法

この記事の目的

  • 「Gitって何」というレベルの人が、とりあえずGitを使ってUnityプロジェクトをバックアップできるようになる
    • 想定としては非プログラマ(デザイナーとか、VRChatユーザとか)
    • 想定ユーザは1人だけで、チーム開発ではない
  • ここでいう「バックアップ」は次のことができる
    • 今のUnityプロジェクトの状態を保存できる
    • 操作をミスってぶっ壊したときに、直前のプロジェクトの状態に戻せる
  • Gitの「むずかしい」機能は使わない
    • ブランチ操作などはしない

今回使うもの

  • GitHub for Unity

インストール手順

1. GitHub for Unityをダウンロードする

こちらからGitHub for Unityunitypackageをダウンロードしてください。
(アセットストアから導入しても可)

2. バックアップしたいUnityプロジェクトにアセットを追加する

バックアップしたいUnityプロジェクトをUnityで開き、さきほどのunitypackageを追加してください。

unitypackage.png

導入が完了すると、メニューのWindow -> GitHubの項目が追加されています。

3. 初期設定をする

Window -> GitHubから、GitHub for Unityのウィンドウを開きます。
初回起動時は裏でインストールが実行されるため、ちょっと待たされる場合があります。
menu.png

ウィンドウが開けたら、Settingを選び、NameEmail欄を設定してください。
適当な名前とメールアドレスでもOKです(プロジェクトをpublicに公開するなら、ちゃんとしたものを入力しておいた方がいい)。
setting.png

4. プロジェクトをGit管理下に置く

Initializeのタブを開き、Initialize a git repository for this projectのボタンを押します。
Initialize.png

このボタンを押すとUnityプロジェクトに対してGitの初期設定が実行され、このプロジェクトでGitが使えるようになります。

5. 現状の状態で1回まずバックアップをとる

インストールした直後の状態で、まず1度バックアップを取ります。
(ちなみにGitの場合はバックアップを取る作業のことを「コミット」すると呼びます)

changesのタブを開き、すぐその下のAllを押します。
すべてのファイルにチェックが付いたことを確認してから、下の方のCommit summaryCommit descriptionを入力してください。

  • Commit summary : このコミットにつける名前
  • Commit description : このコミットでやった作業の詳細

summarydescriptionは適当でも構いませんが、あとからバックアップを見直す時に困るのである程度分かるように入力しておくことを推奨します。

すべて入力できたら、右下の Commit to [master] を押します。

first commit.png

正しくコミットできたら、Historyタブにこのコミットが追加されています。

history.png

導入は以上です。

使い方

現在のプロジェクトの状態でバックアップをとる

GitHub for Unityを導入した状態でプロジェクトを操作すると、Projectビューにマークが付きます。

mark.png

これは、「このファイルはまだコミットされていない」という意味になります。
つまり「バックアップしていないファイルだよ」という表示になります。

changes.png
(差分が出ているファイルにマークが付いている)

バックアップを取る場合はさきほどと同じく次の操作を行います。

  1. changesタブを開く
  2. 上の方にあるRefreshボタンを押す
  3. このコミットへ含めたいファイルにチェックを入れる
  4. summarydescriptionを入力する
  5. Commit to [master]

正しくコミットできたら、Historyタブにコミットが追加されています。

addSphere.png

コミットの頻度はどうしたらいいか

「区切りがいいタイミング」でコミットする(バックアップする)とよいでしょう。
たとえば「新しいアセットを追加した」「Prefabの設定値を変更した」など。

「今日1日分の作業をまるごとコミットする」でも構いませんが、巻き戻した時に大量のファイルが戻ってしまいます。
適切な粒度でコミットするようにしましょう。

直前のバックアップへ巻き戻す

間違えてファイルを消してしまったり、設定値がおかしくなってしまった場合に、直前のコミットの状態に戻すことができます。

  1. changesタブを開く
  2. 巻き戻したいファイル/フォルダを右クリックして、discardを選ぶ

discard.png
discardすると削除したファイルは復活し、変更したファイルの設定は元に戻ります。

注意点として、discardで巻き戻した設定をまた元に戻すことはできません
保存したかったファイルを間違えてdiscardしてしまうと取り返しがつかないので、かなり注意する必要があります。

おまけ:前回のバックアップをなかったことにしたい

バックアップしたはいいものの、ミスってたため「前回のバックアップ」をまるごとなかったことにしたい場合。

GitHub for Unityからは、「バックアップの操作を打ち消す」という操作ができます。

  1. Historyタブを開く
  2. なかったことにしたいコミットの履歴を右クリック
  3. Revertを押す

revert.png

Revertすると、「そのコミットの逆の操作」をしたコミットが生成されます。
これによって前回のバックアップを擬似的になかったことにできます。

revert2.png
(新しいファイルを追加したのなら、それを消す変更を追加することでプラスマイナスゼロにする)

まとめ

GitHub for Unityを使えば、とりあえず「バックアップする」「壊れた時に直前の状態に戻す」ということができるようになります。

ただし、GitHub for Unityは必要最低限の操作しかできません。
なので、次のような複雑な操作は実行できません。

  • 特定のコミットの状態に完全に戻したい
  • 複数人で同時にプロジェクト編集したい
  • 変更を残したままコミットだけなかったことにしたい
  • 現在の状態を保持したまま、別の作業を並行して行いたい

これらの操作がしたくなった場合は、 Git for Windowsを導入した上で、他のGUIツールを使ってみるとよいでしょう。
SourceTreeGitHub Desktopなど。余力があるならコマンドラインでGit操作できるとなおよい。)

おまけ:サーバにバックアップを保存する

GitHub for Unityを使えば、そのままGitHub(サーバ)にバックアップを保存することができます。

容量制限に注意

なお、GitHubは無課金では1GBまでしかサーバに保存できません。
また通信量も規制の対象になり、一ヶ月あたりに1GBまでしか通信できません。
(プロジェクト単位ではなく、ユーザ単位での制限なので大量のプロジェクトをアップロードするとすぐに達してしまう)

もし制限を超えた場合はアップロードができなくなる点に注意してください(勝手に課金されたりはしません)。
そのため大きなプロジェクトをGitHubにアップロードする際は注意が必要です。

ちなみに、月$5でこの容量を50GBまで増やすことができます。

image.png
(容量を増やす場合は、ユーザ設定のBilling -> Git LFS Data -> Edit -> Add more data pack

アップロード方法

1. GitHubアカウントを作る

GitHubにアクセスし、新しいアカウントを作ります。

2. Unity上でサインインする

GitHub for Unityのウィンドウの右上にあるSign inを押してGitHubにサインインします。
singin.png

3. リモートリポジトリを作る

GitHub for Unityのウィンドウの左上の、Publishボタンを押します。
publish.png

すると新しくリモートリポジトリを作る画面が出てくるので、名前などをつけてリモートリポジトリを作ります。

Make repository privateにチェックをいれると、自分だけがアクセスできるリモートリポジトリになります。
プロジェクトの内容を第三者に見られたくない場合は必ずチェックしてください。
SugoiGame.png

リモートリポジトリができると、現在のプロジェクトの状態が自動でアップロードされます。
アップロード状況はブラウザからGitHubを開くことで確認できます。
RemoteRepository.png

4. 定期的にサーバにアップロードする

リモートリポジトリの設定ができると、GitHub for Unityのウィンドウの左上のボタンが変わります。

pushpullfetch.png

  • Fetch : サーバの状態をダウンロードする(反映はしない)
  • Pull : サーバの状態をダウンロードして、プロジェクトに反映する
  • Push : ローカルの状態をアップロードする

コミットが終わったらPushするようにするとよいでしょう。

アップロードしたプロジェクトファイルのダウンロード方法

たとえば「別のPCで作業をしたい」等となった時はサーバにアップロードしてあるプロジェクトファイルをダウンロードしてくる必要があります。

GitHubのダウンロードボタンは使えません

image.png

GitHubにはアップロードしたファイルをZipでダウンロードするボタンがあります。
ここからZipファイルをダウンロードして解凍すれば保存したプロジェクトファイルが入手できます。
が、ダウンロードボタンからプロジェクトファイルをダウンロードした場合、音声や画像データが読み込めない状態になります。

これは特定の拡張子のファイルはGitHubの別のサーバに保存されているからです。(Git LFSという機能が使われている。)
アップロードに失敗しているわけではないので安心してください。正しい方法でダウンロードすればちゃんと復元できます。

どうしたらいいの

一番簡単な方法はGitHub Desktopを使うことです。

1.ダウンロードしてインストールする

image.png
ここからダウンロードしてインストールしてください。

2. GitHubにサインインする

起動したらFile -> Option -> AccountsからGitHubにサインインしてください。

image.png

image.png

3. アップロードしたファイルをダウンロードする

File -> Clone repository... を押す。

image.png

ダウンロードしたいリポジトリを選び、保存先を選んでCloneを押す。
image.png

Git LFSを初期化しますか?と聞かれたらInitialize Git LFSを押す。
image.png

これで正しく画像や音声データを含んだ状態でプロジェクトがダウンロードできました。

4. Unityで開く

あとは普通にUnityで開けばOKです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OpenVRでトラッキングしているコントローラの種類を判別する

はじめに

こんにちは、最近Indexコントローラを買ったZeniZeniです。
VRゲームをやっているとよく出くわすのですが、viveのコントローラで遊んでいるのにチュートリアルでのコントローラの説明がoculus touchで操作方法がわからない…という事態、できることなら全種類表示するか、今使っているコントローラに合わせて説明してほしいですよね。

今回はUnityにおいて、今現在使用しているコントローラの種類を動的に判別する方法を紹介します。

動作環境

  • Unity 2019.3.9f1
  • SteamVR 2.5.0

実装方法

結論から入りますが以下のコードを実装します。

DeviceTypeDetecter.cs
using 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();
    }
}

これを適当なゲームオブジェクトにアタッチします。
インスペクターだとこんな感じです。
bandicam 2020-04-02 20-34-17-709.jpg

ゲームを実行し、コントローラがトラッキングされた状態でDキーを押すとコントローラの名前がコンソールに出力されます。
このとき出力されるコントローラの名前ですが、GetStringTrackedDeviceProperty関数の第2引数に入れるETrackedDevicePropertyという列挙型の種類によって、微妙に異なる名前が返ってきます。
ETrackedDevicePropertyには大量に種類があり、コントローラの名前だけでなくバッテリー情報や使用しているトラッキング方法などの情報も取得することができます。
この中でコントローラの種類を判別することができるものは3種類あり(実はもっとあるかもしれませんが調べるのがつらかったのでとりあえず3種類説明します)、各コントローラとそれによって出力される値は以下の表の通りです。
bandicam 2020-04-02 21-54-52-611.jpg

(その他のコントローラについてはご自身で調べてみてください。)

後はこれらの値を用いてよしなに分岐処理を入れるだけです。

余談

Prop_RenderModelName_Stringによって参照される値は、SteamVR_RenderModelという関数内でコントローラのモデルをUnity内に表示するために使われています。
コントローラのモデルはどこから持ってきているのだろうかと調べたところ、例えば左手のindexコントローラならば
\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\indexcontroller\resources\rendermodelsフォルダ内に大量のobjファイルが入っており、ここからロードしていたことがわかりました。
bandicam 2020-04-02 21-41-54-394.jpg

参考資料

OpenVR Documentation

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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デスクトップで大きい画面見ながらやる方が良さそう。あと、サイトでも進めてたが、ノートのトラックパッドじゃやりにくい、マウスがあった方がやっぱりいい。すぐサボるからノート持って自習室行くけど。

コードの記述は随時ググって調べよう。なんとかなりそうな気はする。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Blender2.82で液体シュミレーションについて

はじめに

Blender2.82が公開後、液体シュミレーションをしようとすると、
項目が変わっていて混乱したので調べました。

液体を流すだけならこうすればいい!

配置

・モンキー(なんでもいい)
・正方形(モンキーを囲むように配置)

モンキーの設定

「物理演算プロパティ」→「液体」→「タイプ」をフローに設定
「フロータイプ」を液体、フローの挙動をジオメトリに設定

正方形の設定

「物理演算プロパティ」→「液体」→「タイプ」を”ドメイン”に設定
正方形の設定タブ→データをベイク、待つ

正方形のメッシュタブ→メッシュをベイク、待つ

アニメーション再生で液体シュミレーションが可能

ベイクに時間を短縮する

初期設定ではベイクに時間がかかりすぎるので、解像度をいじります

分割の解像度を24に設定する
7.png
分割の解像度を24~60とした時の変化
13-min.png
まぁ当たり前に細かく滑らかになりますね。

おわりに

テスト時は解像度を下げて、本番だけ解像度を上げてベイクという流れが一般的だと思います。
また、別のシュミレーションもいじったら記事にしたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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以降あたりのコミット分のクローンとしました。
image.png
これをMacのローカルドライブに展開します。ここでは、~/Documents/Unity/arfoundation-samples-masterに展開しました。

3. Unity Project を開きビルド

上で展開した ~/Documents/Unity/arfoundation-samples-masterを Unityで開きます。
image.png

AR関係パッケージの確認

まず念の為、ARFoundationで必要なパッケージが導入されているか確認します。[Window]-[Package Manager]を開きます。
赤色で囲んだ、AR関係のpreview.1 - 4.0.0があればOKです。
image.png

Bundle Indentifierを変更

[Edit]-[Project Settings...]でプロジェクト設定を開き、その中のPlayerタブを選択します。
Bundle Identifierがそのままでは、このあとのXCodeでのビルドが通らないので、ユニークな識別コードに変更します。
image.png

ビルド

[File]-[Build Settings...]Build Settingsウインドウを開きます。
Scenes In Buildでビルド対象のシーンを1つ選択します。ここではまずScenes/SimpleAR/SimpleARを選択します。
Platformには、もちろんiOSを選択します。
image.png
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にプログラムが転送されます。
image.png

5. iPadでの実行結果

iPadにプログラムが転送されると、しばらくして "Made with Unity"のロゴが表示されてプログラムが起動します。
机と壁にiPadを向けると、なにやら平面を認識した結果がAR表示されました。画面上をタップすると、キューブも表示されました。
image.png

6. 今後やってみたいこと

Unityのサンプルプロジェクトには、今回試した"SimpleAR"というシーン以外にもたくさんのサンプルシーンがあります。それらも順次試したいのですが、たくさんあるシーンを「UnityのBuild Settingsで選んではビルド→XCodeでもビルド→iPadへ転送」と繰り返さなければならないので面倒です。シーン選択用のメニューをUnity上で作ってやろうかと思います。

とりあえず3次元情報を取得して認識していそうなサンプルプログラムは動きました。あとはやっぱり、生の3次元点群を取得して、iPadを完全な3Dスキャナとしていろいろ活用したいところです。特にこの新型iPad Pro には LiDARが搭載されているのですから!ソースをこれから詳しく追っていきます。

参考文献

大変参考になりました。ありがとうございます。
- UnityでiOS向けのARアプリを開発する方法 ( AR Foundation + ARKit-XR-Plugin 導入編 )

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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'];
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む