HoloLense:久しぶり

久しぶりにホロレンズをかぶりました。

Keita_Nakamori です。

ツール関係のセットアップ

マイクロソフトアカデミーを見てみると、おすすめのUnityバージョンがUnity 2018.3.10f1に上がっていましたので改めてインストール。

MRツールキット Mixed Reality Toolkit (MRTK V2) for Unity のほうもV2(バージョン?)になっているので合わせてダウンロード

ダウンロードして、どうするかは忘れました・・・

Unityプロジェクトを作りましょ

プロジェクト名:MR_test_001

場所:C:\Users\Public\Documents\Unity Projects

メインカメラのMR化

ヒエラルキー>メインカメラ

背景を透明にしましょ:ClearFlags=ソリッドカラーにします。

Background=全部ゼロで真っ暗な透明にします。

Clipping Planes=デフォルトはあ0.3ですが0.85にします。少し遠めですね。

シーン名をMainにしてセーブしましょ。

プロジェクトの設定

エデット>プロジェクトセッティング>クオリティは

Very Lowにします。ホロレンズのCPUはしょぼいので、軽くしてスピード重視ということです。

エデット>プロジェクトセッティング>プレイヤーは

ウィンドウズマークを押して、XR Setingsのバーチャルリアリティサポートにチェックをいれて、SDKにWindows Mixed Realityを選択します。

次に、(こんなんあったかな?)Configuration>Scripting BackendをIL2CPPかから.NETに変更します。意味はわかりません。

オブジェクトをシーンに追加してビルド

cubeをシーンに追加しました。

ホロレンズをかぶって、windowsstoreからHolographic Remoting Playerをダウンロードして実行。

IP address   192.168.0.125   とでました。

次、ホロレンズエミュレーターでやってみようということで、ダウンロードして実行しました。

  • HoloLensEmulatorSetup.exe

UnityメニュのWindowの下にエミュレータという項目が出るはずですが、出てこないのでUnityを再起動。

でてこないので、目を凝らすとXRとあったのでここを押したら、この中にEmulatorがありました。

警告:あなたはVRサポートセッティングを使用できるようにして、なおかつMRをデバイスに追加すべし。エミュレータを使えるようにね!

ほうほう、なにかが足りないらしい・・・。

でも、今日はホロレンズが目の前にあるのだから、エミュレータじゃなくていいよね!やめた!

ここまでで1時間か ぐぬぬぬ・・・

USBで直接つないでビルド

File>build Setting でビルドしましょう

platformはUniversal Windows Platform 通称 UWPです。知らないとはまりますw

Target DeviceをAny DeviceからHoloLensに変更して、DebuggingはUnity C# Projectsにチェックを入れます。

あ、スイッチプラットフォームの位置がUnity2017から変更されてますね。スイッチしましょう。

これでビルドできると思いきや、Buildボタンがアクティブにならない・・・

警告:.NETはインストールされていません。なぬ~~~

AndroidSDKとJDKはいじってないから、ここかなあ。

Edit>Preferences>External Tools です。親切にもDownloadボタンが横にあるので押してみます。

  • android-studio-ide-182.5314842-windows.exe

これがダウンロードされたらインストールを実行しましょう。

C:\Program Files (x86)\Android\android-sdk に入りました。

JDKのほうはなぜかチェックが外れていたので、embeddedしました。

C:\Program Files\Java\jdk1.8.0_161\ です。

これでビルドできると思いきや、まだまだBuildボタンがアクティブにならない・・・

警告:.NET 4.xがインストールされていない。

じゃあ、インストールしましょうと思いきや、もう入っているよとの警告・・・

矛盾している・・・

さらにビルド画面には.NETは無理よ。IL2CPPを推奨します。とのことなので、プレイヤーセッティングの.NETに設定したところを再びIL2CPPに変更しました。矛盾していますね。

そしたらBuidボタンがアクティブになりました。なんで!!

そしてビルドしたファイルを入れるフォルダですが、これはユニティフォルダの中に入れてはならないという前回の経験から、上の階層に戻り。

C:\Users\Public\Documents\App_builded に入れました

MR_test_001.sln さてこれ、どうしましょ?

そうそう、ダブルクリックで実行するとVisualStudioが立ち上がるので、デバイスリリース x86 するんですよね。

とおもいきや、なんかVisual Studio Enterprise 2017のインストールが始まってしまいました。まあついていきましょう。

無事インストール完了・・・とおもいきや、Microsoftアカウントを求められたので入力したら、試用期間終了のオシラセ・・・はあ?

??????????????????????????????

今日はやばい。

なんもできん。

あと1時間半で何ができるか・・・。

完全に仕切り直し

分からないので、PC自体を変えてやっていきます。

Unity は2017.4.15f1です。いつもの感じでいけるか!

VRセッチングして.NETにして

ホロレンズをUSBでPCにぶっさして。

MR_test_001.sln をダブルクリック!

VS2017が立ち上がり

リリース x86 そしてデバイスで GO!!

しばらくたってから

プログラム ‘[1888] MR_test_001.exe’ はコード -1 (0xffffffff) で終了しました。

いけた!なんてこった!

とりあえず大急ぎでUNITYちゃんを出してみました。

本日はもうこれ以上なんもできません!帰りますw

ズコーーーーー!!

 

 

 

 

Python:テンポラリーファイルとテンポラリーディレクトリの作成

使用するモジュール :tempfile

import tempfile でインポートできます。

テンポラリーファイルの作成

一時的にテキストなどを保存して、処理が終わったら自動的に消すか残すか選択できます。

テンポラリーディレクトリの作成

こちらも一時的にディレクトリを作成して、処理が終わったら自動的に消すか残すか選択できます。

おわりに

いろんなソフトウェアを使うとテンポラリーファイルが溜まっていくと言われてますが、こういうことなんですね。自動的に消えないようにしたときは、しっかり自分でディレクトリとファイルを消すようにしないといけませんね。

消し方はこちら。ファイル操作

import os

os.remove(path)

os.rmdir(path)

ディレクトにファイルが入っていると消せないので、まるごと消す場合はこちら。

import shutil

shutil.rmtree(path)

Python:ファイル操作 os pathlib glob shutil

ファイル操作を行うためのモジュールは

  • os:ファイル、ディレクトリの作成、削除
  • pathlib:パス指定でファイルを作成(タッチする)
  • glob:ファイル名のリストを出力する
  • shutil:ファイルをコピーする。まるごと削除する

がありますので基本機能を使ってみます。

 

あとは、必要に応じてググりましょう。大事そうなものは追記していきます。

Python:ファイル操作 os

 

Python:csvを操作する

csvファイルを作成する

 

csvファイルを読み込む

 

Python:txtファイルを作成、開く、読み込む、上書き、追記

python script を実行しているときに、何かしらを.txtファイルや.csvファイルとして保存したいデータがあると思います。

.txtファイルを新規作成して、なにかしらを書き込んで保存するところまでやりましょう。

これを再度呼び出して追記します。

今度は、ただ読み込んでみます。

もっといい方法があります with構文

f.close()する必要がありません。

一行づつ読み込むこともできる

while True → f.readline() → if break

2文字ずつ読み込むこともできる f.read(chunk)

文字を調べる f.seek

f.tell() 現在位置を確認する

f.read(1) 現在位置の値を確認する

f.seek(5) とかで現在位置を移動する

f.read(1) 現在位置の値を確認する

この繰り返し作業でいろいろ操作していく

VR:Daydreamコントローラをクリックしてオブジェクトを出現させる

Keita_Nakamoriです。

前回、予め上空に配置したボールに対して、重力と反発係数を定義して、跳ねるボールたちを実装しましたが、今回は、任意のタイミングでブロックを空間に召喚しようという試みを致しました。

ヒエラルキー

GvrController群を使っていきます。説明:google公式サイト

下記のユニティパッケージをダウンロードしました。

GoogleVRForUnity_1.190.1.unitypackage

何かしらユニティプロジェクトを開いている状態で先程ダウンロードしたunitypackageファイルをダブルクリックすると、インポートが始まります。

インポートが終わったら、下図のようにヒエラルキーにGvrController関連を配置しましょう。Assets>GoogleVR>Prefab の中にあります。

GvrControllerMain

コントローラーの状態を管理するメインモジュールです。

(ユニティではモジュールはプレハブという扱いなんですね。)

GvrControllerInputをコンポーネントとして持ち、google VRコントローラーAPIへのメインエントリーポイントとして機能します。

GvrEventSystem

DayDream コントローラーがユニティイベントシステムを使用できるようにするためのモジュール(プレハブ)。通常のユニティイベントシステムから代替して機能するようになります。

GvrPointerInputModuleコンポーネントを含んでいて、こちらもユニティ標準のStandaloneInputModuleから代替されます。

GvrEditorEmulator

プレイモードの時に、ヘッドセットの動きをキーボードとマウスで代替できるようにするためのモジュールです。以前から設置していたものです。

Alt+マウス:周囲を見渡す

Ctrl+マウス:顔を傾ける

GvrInstantPreviewMain

ユニティ上でプレイモードにしたとき、スマホの画面へVR化した表示をし、さらにさらにその中で、物理的なDaydreamコントローラーを使用できるようにする機能をもつコントローラーです。

windows10デスクトップ上のタスクバー右端アイコンからBlueToothを有効にして、物理Daydreemコントローラーとのペアリングを有効にしておきます。

が、私のは動きませんでした。他になにかしらやらないと行けないようです。

別の方法として、GvrEditorEmulatorと同じようにゲーム実行中に

Shift+マウス移動 でポインターを動かすことができます。

GvrControllerPointer

ヒエラルキーでメインカメラの下層に配置することになっています。

画面上にコントローラーオブジェクトを表示します。

コントローラーの見た目を変更することもできます。

いろいろ方法があります。

1.コントローラープレハブそのものを変更する。

2.GvrControllerPointerの中にControllerVisual (3Dオブジェクト)があるので、これをお好みの3Dオブジェクトに変更する。

私はとりあえず、デフォルトで行きます。ゲームの場合は剣とか杖とかにするとカッコ良くなるでしょう。

このなかのGvr Arm Modelが若干くせもので、持っているポインターとVR上では結構ずれています。気持ち悪いので、微調整しましょう。デフォルトでは近すぎてポインター本体を見ることも困難なので、少し離しました。

スクリプト:Summon.cs

任意の3Dオブジェクトを任意の座標に召喚するスクリプトを作成しました。

インスペクタ上で 召喚したい3Dオブジェクトと召喚したい位置を定義します。

召喚したい位置については、Daydreamコントローラーの指し示す方向に定義しました。次項を参考にしてください。

召喚する位置の設定

Daydreamコントローラーの指し示す方向に定義します。

ヒエラルキーにGvrControllerPointer > Laser > reticle  がありますので、このreticleをSummon.csスクリプトのsummonPositionに代入しましょう。

ヒエラルキーからドロップインします。

以上です。では、ビルドしてヘッドセットをかぶってみましょう。

創造神になった気分にしばらく浸れます\(^o^)/

VR:重力で落下し、床でバウンドするボールを作成する

Keita_Nakamoriです。

物理エンジンを使ってみます。

重力で落下し、床でバウンドするボールを作ってみました。

コンポーネントの追加

3Dオブジェクトのスフィアを作成し、インスペクタパネルにスフィアコライダ(球状の衝突定義)とリジッドボディを追加します。

コライダ(衝突)と 反発係数の定義

スフィアコライダのマテリアルにはスタンダードアセットのBauncyをいれて、Bauncyの反発係数を0.8に修正し、ちょっとづつ跳ねなくなるようにしました。

半径Radiusは0.5をいれました。これはお好みのサイズにします。

リジッドボディで重力の定義

リジッドボディでは重力の使用にチェックを入れます。

今回は質量と抵抗の値はデフォルトにしました。

VR:目視カーソルの作り方

Keita_Nakamoriです。

視線を対象に合わせるときに、補助的なカーソルを目の前に表示させたいと思います。

ヒエラルキーには一人称視点のプレハブとして作っておいたMe My Self Eye と その下の カメラオブジェクトであるMainCamera があります。

今回はさらにMainCameraの下にキャンバスオブジェクトとしてReticle Cursorを作成し、さらにその下にRaw Imageを入れます。

このRaw Imageの中に、スタンダードアセットのテクスチャのcursor_grabをアタッチします。

かんたんですね。

VR:UI Canvasを使ってみる

keita_nakamoriです。

何かしらのテキスト情報をVR空間上に表示させておきたい時に、ユーザーインターフェースとしてCanvasというものを利用できます。

  1. ヒエラルキーにUI>CanvasをCreateしましょう。
  2. Canvasの下にUI>Imageを入れましょう。白くします。
  3. もうひとつ、Canvasの下にUI>Textを入れましょう。文字を書きます。

では、調整をしていきます。

Canvasの調整

初期値はとんでもなく巨大なので、小さくしましょう。

Imageの調整

アンカーはストレッチにしておきましょう。

カラーは若干透明にしておくとカッコいいです。

Textの調整

こちらもストレッチしておきましょう。

テキストに任意の文字を書けば完成です。