カテゴリー別アーカイブ: Unity

Oculus Goこれいいですねえ(その3)PCへミラーリング

標準

Android Mirroring to PC (using Vysor)

元記事はこちらの方です

Oculus Goの画面をPCにWirelessでミラーリング表示する

Oculus Goの開発環境は出来ている前提で

1.コマンドプロンプトで On Command Pronpt

(adb.exeまでのPath) adb shell ip addr

で接続IP一覧が出る。必要なのは、wlanなので、wlanのところを読むか、最初から以下のコマンドでwlanを取り出す

or you can use this command for getting internet address

>adb shell ip addr show wlan0

192.168.1.x  が表示される。get your ip ( 4 digital numbers divided by dot )

2.TCP/IP用のポートを開く

adb tcpip 5555

3.USBケーブルを抜く disconnect USB cable

4.TCP/IP でつなぐ connect by tcp/ip

adb connect 192.168.x.x (Oculus GoのIPアドレス)

5.接続できているか確認する

messageが connected to 192.168.x.xとなっていればOK

 

上手くいかないときは、下記を試してみる

adb disconnect
adb connect 192.168.x.x:5555
adb devices

Vysorの設定

ChromeブラウザにVysor(バイザー)を追加する。

約4000円で広告の出ない、Vysor Proにアップデートできるので、そうする。

これでミラーリング完成

これの導入により、USBケーブルで接続しなくても、ビルドしたアプリをインストールできるようになった(お得感^^)

adbの使い方(Oculus公式サイトにも出ていました)

広告

Oculus Go(これいいですねえ)その2-開発

標準

Oculus Goのタッチパッドで玉転がし

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallMove : MonoBehaviour {
  Rigidbody rb;
  float xmove, ymove;
  public float speed;

// Use this for initialization
void Start () {
  rb = GetComponent<Rigidbody>();
}

// Update is called once per frame
void FixedUpdate () {

#if UNITY_ANDROID && !UNITY_EDITOR
  xmove=OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad).x;
  ymove=OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad).y;

#else
  xmove = Input.GetAxis("Horizontal");
  ymove = Input.GetAxis("Vertical");

#endif
  rb.AddForce(xmove * speed, 0.0f, ymove * speed);

 }
}

Unity ProBuilderでVR空間を作る

標準

こちらの動画解説を参考に

1.Unity2018.1.1f1 パッケージマネージャー

Windowメニュー→Package Manager→AllタブにProBuilderが見つかるのでインストール

2.アセットストアから

①PolyBrush

②ProGrids

をダウンロードインポート

3.ToolsメニューからProGrids ウィンドウを選択

「グリッド表示、非表示」、「吸着オンオフ」などがアイコンで表示されるメニューが出てくるが、ひとまずクローズ

4.ToolsメニューからProBuilderウィンドウを選択

重要なメニューなので、左側に吸着させておき、右クリックでアイコン表示モードにしておくとよい。

また中央上に表示される小さなウィンドウは、選択切り替えアイコン(オブジェクト、点、線、面)。

5.ProBuilderize でプリミティブ3Dオブジェクトを編集可能に

①面選択、ギズモを引っ張って拡張

②Shiftを押してギズモを使うとポリゴンが増える(Extrude)

③ホール選択、ホールを埋める、点を離す、点をマージする、点をつなげる

6.中に入る

①法線を逆転する FlipNormal

②全体を照らすライトを消し、ポイントライトを部屋の中央に配置する

③パースペクティブ表示で、右クリックWASDでウォークスルー可能

7.プリミティブから作る樽

①シリンダーを選択(8角形)

②線選択→エッジループ選択→ベベル

③選択した線に対し、垂直に一周カット

④頂点カラーモードになっているので、Alt+クリックでオプションを出し、パレットを選択、パレットを開く。(面ごとに色塗り可能になる)

⑤面をリング状に選択

⑥同じ色で選択

⑦面の拡張

8.きのこ

①8角シリンダーを横1カット(高さ方向セグメントを1に)で細くつくる

②頂点面を選んで拡張しながら形をつくる

③頂点8点を Collaspe Vertexを使って、一点中央にマージ

9.葉っぱ ポリゴン

①ProGridsのメニューを開き、グリッドのスナップ設定を0.1にして表示、吸着オンにする

②Blueprint Leaf1(葉っぱの形の図面)を表示し、下の点からポリゴンを描く

③厚さを0.01(1cm)にする

④サブディバイド ポリゴンツールを2回適用

⑤PolyBrushツールを使う

⑥3つの葉っぱを120度づつの間隔に回転して並べ、マージして一つのオブジェクトにする

10.樹木

①四角のシリンダーから、上面を少し回転させたり傾けたりしながら、拡張(Control-E)していく。

②アイコスフィアの葉っぱを、点ノーマル方向で彫刻する。

③中心がずれている場合は、Center Pivotのアイコンをクリック

④すべてに基本マテリアルをつけたのち、頂点カラーで色をつける

⑤ひとつにマージ。。。(していないかもしれない)

センスが問われていて、センスよく出来たかというと微妙

11.リフト~UV編集の練習

①4,1,1の大きさのCubeを作成

②ベーシックマテリアルをつける

③上下線4本を選び、0.5のベベル

④上下面を選び、線選択、0.2のベベル

⑤上面を選び、マテリアルの2番目、リフト用のテクスチャを選択

⑥UV展開

⑦シーンビュー上でUV変更できるアイコンツールを使う

12.島を作る

①下書きに従って、ポリゴンシェイプを作成し、高さを8mに持ち上げる

②下の面を選んで、拡大。島の斜面が45度程度になるように

③三角ポリゴン化

④細分化

⑤大きめのブラシでなでる

Oculus Go!!! (これいいですねえ)-その1

標準

期待せずに(?)ポチッたOculus Goですが、かなり良い感じなので、テンション上がっています。

さっそく開発サイトを探っていきましょう。

(1)Oculus公式サイトの確認

Develop→モバイルSDKのセクションに、「Mobile Development with Unity and Unreal」ページがあるので、そこからスタート

1)Unity5.1以降、既にOculus開発がビルトインされている。プレイヤーセッティングのところをクリックするだけである。

これかな?→たぶん違いますね^^; android buildしないといけないのでした
→ビルドプラットフォームをandroidにする

Unity5用のunitypackageを用意してあるので、そちらをダウンロードするほうがよさそう。

開発に有効なスクリプト、シーン、プレファブが含まれているとのこと。

2)ダウンロードページに飛ぶ (2018/5/20現在1.25.2バージョン)名称は、Oculus Utilities for Unity

このユーティリティパッケージには、最新のOculus OVRPluginが含まれている。

(有効Unityバージョンは、Compatibility and Version Requirements こちらで確認)

  • 5.6.5p4
  • 2017.1.3p3
  • 2017.2.2p3
  • 2017.3.2f1
  • 2017.4.1f1
  • 2018.1.0f1

(2)開発環境整備

>>>>認識させるまで<<<
こちらの方(目玉Pさん)のPDFを参考に

①android開発環境を作る

Android Studio 2018/5/22現在>
Download Android Studio

3.1.2 for Windows 64-bit (758 MB)
→インストールが完了したら、コンフィギャー(右下の歯車アイコン)から、SDKマネージャーを起動→インストールされているandroidプラットフォームを確認
API Level19以上をすべてチェック(Level 19はGear VR用)
SDK Toolsタブで、LLDBGoogle USB Driverにチェック

②Unityプロジェクトにandroid SDKのフォルダ場所を記述

①が完了したら、Unity→Edit→Preferences→External Toolsで、Android SDKの場所を記入
(たいていは、C:\Users\(ユーザ名)\AppData\Local\Android\sdk)

③Oculus開発者登録

Oculus Goの接続
Oculus公式サイトで開発者登録
Oculus Go設定に使ったスマホから、Oculus設定→その他設定→開発者モードをオンにする

④JDKのインストール

JDKのインストール
(JDK8 8u171をインストールした)

⑤UnityプロジェクトにJDKのフォルダ場所を記述

完了後、ふたたびUnityのUnity→Edit→Preferences→External Toolsで、JDKの場所を記入

(たいていは、C:\Program Files\Java\jdk1.8.0_171)
※JAVA-HOMEの設定に関して
https://www.javadrive.jp/start/install/index4.html

⑥Oculus Go開発者モードの認識

コマンドプロンプトで、
>cd C:\Users\xxxx(user)\AppData\Local\Android\Sdk\platform-tools
>adb devices
コマンドを実行する
デーモンがスタートし、接続されているandroidデバイス(ここではOculus Goのこと)の
デバイス番号と、それが認識されているかどうかがリスト表示される
こちらの指示に従う

⑦Oculus Utilities for Unityパッケージからサンプルをビルド

ビルドできた!

 

(3)自前アプリをOculusGoで走らせるまで

上記までの作業で、Oculus Goが認識されているので、adb installコマンドが使える

 

adb install /path/to/your.apk

(上書きは)
adb install -r アプリ.apk
Oculus Goでは、ライブラリ中に「不明なソースアプリ」として表示される
(開発者モードで入っている必要あり)

開発パッケージ名が前と同じだと、インストールエラーになる?

(4)Unity VR Sampleの試し

Oculus_GoでUnity_VRサンプルを動かしてみた」さんを参考に

Watson Unity Assistant (旧

標準

元記事>「Watson×Unity!初心者でもできる、VR 空間で Unity ちゃんとおしゃべりアプリ!」

https://www.ibm.com/developerworks/jp/cloud/library/unity/

新しいUnity-SDKに対応させるときのメモ。

旧 Watson Conversation →新 Watson Assistant

大きく変更がないならば、こちらの方のアドバイスに従って、SampleAssistant.csの書き換えで対応する。

インスペクターに入力するVersion Dateは、https://www.ibm.com/watson/developercloud/assistant/api/v1/curl.html?curl#list-examples

このあたりを見ると、出てくる (APIのバージョン)
2018/4/21では、2018-02-16だそうであるので、入力は、2018-02-16

===========

//WatsonAssistant.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using IBM.Watson.DeveloperCloud.Services.Assistant.v1;
using IBM.Watson.DeveloperCloud.Connection;
using IBM.Watson.DeveloperCloud.Utilities;

public class WatsonAssistant : MonoBehaviour
{
 #region PLEASE SET THESE VARIABLES IN THE INSPECTOR
 [SerializeField]
 private string _username;
 [SerializeField]
 private string _password;
 [SerializeField]
 private string _url;
 [SerializeField]
 private string _versionDate;
 [SerializeField]
 private string _workspaceId;
 #endregion

private Assistant m_Conversation;
 private string m_Input = "おはよう";

// Use this for initialization
 void Start()
 {
 // Create credential and instantiate service
 Credentials credentials = new Credentials(_username, _password, _url);

m_Conversation = new Assistant(credentials);
 Debug.Log("User: " + m_Input);

m_Conversation.VersionDate = _versionDate;

// Message
 Dictionary<string, object> input = new Dictionary<string, object>();
 input.Add("text", m_Input);
 MessageRequest messageRequest = new MessageRequest()
 {
 Input = input
 };
 m_Conversation.Message(OnMessage, OnFail, _workspaceId, messageRequest);
 }

 void OnMessage(object resp, Dictionary<string, object> customData)
 {
 if (resp is Dictionary<string, object>)
 {
 Dictionary<string, object> dic_resp = (Dictionary<string, object>)resp;

foreach (object o in (List<object>)dic_resp["intents"])
 {
 Dictionary<string, object> dic_intent = (Dictionary<string, object>)o;
 Debug.Log("intent: " + dic_intent["intent"] + ", confidence: " + dic_intent["confidence"]);
 }

Dictionary<string, object> dic_output = (Dictionary<string, object>)dic_resp["output"];
 string res = "";
 foreach (object o in (List<object>)dic_output["text"])
 {
 res += o.ToString();
 }
 Debug.Log("response: " + res);
 }

}
 private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData)
 {
 Debug.Log("SampleConversation.OnFail() Error received: " + error.ToString());
 }

// Update is called once per frame
 void Update()
 {
 }
}