korechi’s diary

とあるVR/ARエンジニアのブログ

Google Daydream for Unityの開発環境を整える

Google DaydreamはAndroidiOS(主にAndroid)向けのVRプラットフォームです。(2016年秋に公開予定)

Daydream開発のためにGoogle
①ヘッドセット
②コントローラ
③アプリ
の3つの開発に取り組んでいるらしい。すげーな


特にコントローラが統一されるのは開発者としては非常に嬉しいんです。Cardboardは画面タップしかできないから制約が大きい。。

おそらくDaydream向けアプリはGooglePlayやAppStoreで簡単に公開できるようになるだろうから、最も普及するプラットフォームになると期待して手を出してみます!!


Daydream用アプリの開発にはadbUnityXcodeが利用可能みたい。けれどUnityが一番慣れているしなんとなくVR=3DだしUnityが良いっしょ!(単純)、ということでUnityで開発してみます。
三日坊主にならないようがんばるぞ!笑

それでは https://developers.google.com/vr/unity/ を参考に開発環境の整え方をまとめていきます。

Unityのインストール

まずは各自Unityを公式サイトからインストールしてください。
※Unityは5.2.1以上のものを用意する必要があるので最新版で良いかと

Google VR SDK for Unityのインストール

以下のコマンドをターミナルで叩きます。

git clone https://github.com/googlevr/gvr-unity-sdk.git

インストールすると以下の階層構造になっています。

gvr-unity-sdk
┣ GoogleVR
┃ ┣ DemoScenes
┃ ┣ Prefabs
┃ ┣ ***
┣ Samples
┣ GoogleVRForUnity.unitypackage   ←これを使う
┣ LICENSE 
┣ ThirdParty
┗ README.md

Unitypackageのインポート

Assets > Import Package > Custom Packageから、先ほどインストールしたSDK内のGoogleVRForUnity.unitypackageをインポートしましょう。
インポートすると、UnityのProjectフォルダ内にGoogleVRPluginsフォルダが追加されます。
そしたらGoogleVR > DemoScenes > ControllerDemo内のControllerDemo.unityを開けば、シーンが開始します!

iOS用にビルド

File > Build SettingsiOSを選択します。iOSビルド環境がUnityに入ってなかったら公式サイトからインストールしましょう。
対象をiOSに選択し、Build Settings の下にあるSwitch Platformを選択し、Buildを押せばXcode用プロジェクトがビルドされます。
f:id:korechi:20160711172220p:plain
けれどその前に、Player Settingを選択します。 そしてDefault OrientationをAuto Rotationに選択し、3つほどチェエクを外します(下参照)。これをやらないと、画面サイズが変なことになります。。
f:id:korechi:20160711173541p:plain そして本来はさらにOther Settings 内のBundle Identifierをうまいこと設定しないといけないんですが、Storeに公開しないならデフォルトのままで良いです。
そしてBuildを押します。これでXcode用プロジェクトが生成されるはずです!

iOSバイス上で動作

先ほどできたプロジェクトに*.xcodeprojectがあるので、それを実行します。(もちろんXcodeで)
f:id:korechi:20160711172627p:plain
そしてビルド対象を自身のiOSバイスに設定し、ビルドすればデバイス上にアプリケーションが生成されます。


これで無事にiOS実機デバッグが完了しました!

Androidビルド

Cardboard用アプリをAndroid端末向けにビルドするのは簡単です。
しかしDaydream用アプリを動かすには、AndroidNの入った端末(ディスプレイ機)とKitkat以降のAndroid端末(コントローラ機)が必要です。当然この2機種はbluetoothでつなげるので
https://developers.google.com/vr/concepts/dev-kit-setupを参考にすればできますが筆者はAndroidNの入った端末を持っていないので、今回の記事では触れないでおきます。
残念ですが、Daydream用アプリ制作はひとまず置いておいてCardboard用アプリ制作を行います!

GIMPプラグイン作成

GIMPプラグイン導入方法

ヘルプ → プラグインブラウザー を選択

サンプルプラグイン作成

作ったプログラムは以下に保存する

$ cd ~/.gimp-*.*/plug-ins
$ vim helloworld.py

Python を使用して GIMP 用のプラグインを作成するが非常に参考になった

要はpythonプログラムを作ってplug-ins下に配置してgimpを起動するとプラグインが機能する

このデモでは、Imageタブの中にHelloWorldというタブができてる

proxy配下でgitを使ったinstallコマンドがつかえない時の解決法

まず、最も簡単な解決法としては、

$ vim ~/.gitconfig

とgitconfigを開き

[http]
        proxy = http://proxy.example.com:8080
[https]
        proxy = http://proxy.example.com:8080

こう書いて保存する。
これでcloneはできるはず。

$ git config --list

で設定を確認できる。

これでgit cloneはできるはずだが、luarocksのように間接的にgit cloneを行う場合gitにアクセスできない場合がある。

これは、clone先のurlが

http://github.com/**

ではなく

git://github.com/**

となっているためである。(自分の場合はそうだった)

そのため、gitconfitに

[url "https://"]
        insteadOf = git://

と書き、すべてhttps://からcloneするようにすれば解決した。

Windowsのあれこれメモ

個人的な都合でWindowsを触る機会が増えたのでいろいろメモっておく

PATHの設定

スタート→コンピュータ→(右クリック)→プロパティ→システムの詳細設定→環境変数→PATHに追加
";"を追加し忘れないよう注意する

コマンドプロンプトから別のドライブへ移動

コマンドプロンプトを起動するとC:下のどこかで始まる(俺だけ?)
移動にはまずC:のrootまで戻り/dオプションをつけて別ドライブへ移動

cd ルートまで
cd /d D:

CentOS6.6にMongoDBをインストールしてテストしてみた

CentOS6.5にMongoDBをインストールする - Qiitaを参考にしました。

環境確認

まずは、CentOSのバージョンを確認する。(CentOS6も7にもMongoは対応してるっぽいけど一応)

$ cat /etc/redhat-release
-> CentOS release 6.6 (Final)

のように確認できた。またMongoは64bitにしか対応してないようなのでそれも確認

$ arch
-> x86_64

インストール手順

リポジトリの作成

# vim /etc/yum.repos.d/mongodb.repo

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

を書いてリポジトリを作成する

yumでインストール

# yum install -y mongodb-org

これを行うと以下のように5つのパッケージがインストールされる

================================================================================
 パッケージ                アーキテクチャ
                                         バージョン        リポジトリー    容量
================================================================================
インストールしています:
 mongodb-org               x86_64        2.6.12-1          mongodb        4.6 k
依存性関連でのインストールをします。:
 mongodb-org-mongos        x86_64        2.6.12-1          mongodb        6.9 M
 mongodb-org-server        x86_64        2.6.12-1          mongodb        9.1 M
 mongodb-org-shell         x86_64        2.6.12-1          mongodb        4.3 M
 mongodb-org-tools         x86_64        2.6.12-1          mongodb         90 M

トランザクションの要約
================================================================================
インストール         5 パッケージ

テスト

Mongoの立ち上げ

まずは起動するために

# service mongod start
-> Starting mongod:                                           [  OK  ]

と出れば無事起動している

シェルの起動

ターミナルにMongoを立ち上げた状態でmongoと入力すればシェルが立ち上がる

$ mongo
-> MongoDB shell version: 2.6.12
connecting to: test
> 

動作確認

> use test
switched to db test
> db.fish.insert({name: "マグロ"})
WriteResult({ "nInserted" : 1 })
> db.fish.find()
{ "_id" : ObjectId("5743eafd09dd5531de1012a6"), "name" : "マグロ" }
> db.dropbDatabse()
2016-05-24T14:50:06.260+0900 TypeError: Property 'dropbDatabse' of object test is not a function
> db.dropDatabse()
2016-05-24T14:50:11.306+0900 TypeError: Property 'dropDatabse' of object test is not a function
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin  (empty)
local  0.078GB
> exit
bye

C++を使ってMongoを操作

qiita.com ここが非常に参考になった。
ここもよい。 http://rest-term.com/archives/2948/

Macの同アプリ内でのウインドウ切り替え

例えばターミナルを二つ立ち上げている時、もう片方のウインドウに操作を切り替えたいとする。その時のショートカットの設定は、
キーボード -> ショートカット -> キーボード -> 次のウインドウを操作対象にする
を選んで好きなショートカットを割り当てる。自分はoption+tabにした
f:id:korechi:20160524134718p:plain

これはかなり便利!

Uniduinoを使ったUnityとArduinoの通信

大きく分けて2つの方法がある。一つはSerialPortを使う方法、もう一つはUniduinoを使う方法。
Uniduinoは20$必要ですが、その分非常に使いやすく手間も省けるので自分はUniduinoを使います。SerialPortを使った方法については SerialPort または Uniduino を使った Unity と Arduino を連携させる方法調べてみた - 凹みTips を参照してください。

それではUniduinoの使い方
1. UniduinoをAssetStoreからダウンロードする
2. Arduinoを開いて以下のようにプロジェクトを開いて焼き込む(Arduino側の設定はこれだけ、もしコンパイルが失敗したら、ポートの設定を確認すべき)
f:id:korechi:20160425120127j:plain
3. Unityを開いてUniduino/Prefab/Uniduinoをシーン上に配置(最初は、Window/UniduinoからInstall~を実行してUnityを再起動)
4. シーン内に適当なサンプル(ArduinoController)を配置し、適当なコード(ArduinoController.cs)を登録させる
f:id:korechi:20160425120530j:plain
5. コード内にArduinoと同じようなコードを記述する。以下参照

using UnityEngine;
using System.Collections;
using Uniduino;

public class ArduinoController : MonoBehaviour {

    private Arduino arduino;
    private int leg = 11;
    private int down = 12;
    private int up = 13;
    private int i = 0;

    void Start () {
        // インスタンスを取得
        arduino = Arduino.global;
        if (arduino == null) {
            Debug.Log ("arduino's instanse is null");
        }
        arduino.Setup (ConfigurePins);

        // コルーチンでループ
        StartCoroutine (Loop());
    }

    // Pinの設定
    void ConfigurePins()
    {
        arduino.pinMode(up, PinMode.OUTPUT);
        arduino.pinMode(down, PinMode.OUTPUT);
        arduino.pinMode (leg, PinMode.OUTPUT); 
    }

    private IEnumerator Loop()
    {
        while (i < 200) {
            arduino.digitalWrite(leg, Arduino.HIGH);
            yield return new WaitForSeconds(1);
            arduino.digitalWrite(leg, Arduino.LOW);
            arduino.digitalWrite(down, Arduino.HIGH);
            yield return new WaitForSeconds(1); 
            arduino.digitalWrite(down, Arduino.LOW);
            arduino.digitalWrite(up, Arduino.HIGH);
            yield return new WaitForSeconds(1);
            arduino.digitalWrite(up, Arduino.LOW);
            i++; 
        }
    }
}

このように、非常に簡単にArduinoをUnity上のスクリプトから動かすことができた。