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の調整

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

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

VR:パーティクルシステムとエフェクト

keita_nakamoriです。

前回、レイの使い方を学んだので、今回はレイ対象にパーティクルシステムを適用してみようと思います。

レイで対象を検知したときにパーティクルシステムを適用しながらカウントダウンし、さらにカウントダウンが終わったらオブジェクトExplosion.prefabで爆発エフェクトをかけるという手順です。

KillTarget スクリプト

物騒なスクリプト名ですが、やっていきましょう。

Targetを設定する。

爆破したいオブジェクトをGameControllerのインスペクターにドラッグしましょう。

後述しますが、パーティクルシステムとKillEffectも合わせてドラッグすると最終的に下記のようになります。

パーティクルシステムを設定する。

ヒエラルキー>Create>Effects>Particle Systemと開くとParticle Systemが作成されるので、それをGameControllerのインスペクターにドラッグしましょう。

killEffectを設定する。

Standerd Asset>Particle Prefabs>ExplosionをGameControllerのインスペクターにドラッグしましょう。

 

VR:レイキャスト

keita_nakamoriです。視線と地面オブジェクトとの交点を検出するスクリプトを書いていきましょう。

ポイントは下記スクリプトのコメントへメモっておきました。

LookMoveTo スクリプト

当該スクリプトは、前回やったWalkTargetと同様にWalkTarget2というオブジェクトをAIThirdPersonControllerが追跡するように、walkTarget2へアタッチします。

よって、名称もLookMoveToという追跡対象っぽいスクリプト名にします。

 

VR:AIThirdPersonContllor.prefabをランダムに動かす

keita_nakamoriです。

standerdAssetsのAIThirdPersonContllor.prefabの使い方を学習する過程で、C#スクリプトの書き方、変数をインスペクターパネルから操作する方法について学んでいきます。

手順

  1. AIThirdPersonContllor.prefabをシーンに適当に配置します。
  2. 追跡目標Targetを変数として持っているので、Empty Objectを新規生成しTargetとしてアタッチします。
  3. Empty Objectの名称をwalkTargetに変更しましょう。
  4. C#スクリプト RandomPosition.csを新規作成し、walkTargetにアタッチしましょう。
  5. 以降、RandomPosition.csの中身を作っていきます。

RandomPosition.cs スクリプト作成の考え方

  1. SetRandomPosition()を作成:walkTargetのtransform.positionにランダム生成した座標を代入することで、追跡目標Targetの位置を時間変化させます。
  2. RePositionWithDelay()を作成:上記SetRandomPosition()を実行するとともに、位置変更のインターバルを設定します。
  3. Start ()を作成:上記RePositionWithDelay()をコルーチンとしてゲーム開始とともに呼び出します。
  4. あとで、位置変更インターバルをインスペクターパネルから微調整できるように、時間をパブリック定義しておきます。public float waitingTime = 5.0f;
  5. void update();メソドは今回必要ないので消しておきましょう。
 

Python:HIOKI8870のcsvデータをpandas.DataFrameに読み込む方法

使用するモジュール群

あとでmatplotlibでグラフを作ったりするので、あらかじめインポートしておきます。

HIOKI8870のcsv生データを読み込む関数

単純には読み込めません。エラー回避のポイントは以下の通り。

  • names (columnの名称)をあらかじめ指定し、列数を固定すること。
  • 日本語が入っているためencodingをshift-jisに指定すること。
 

関数の使い方

関数名:read_hioki(file_addr)

HIOKI8870のcsv生データを読み込み,整形したデータフレームを返す関数です。

引数はfile_addrのみ。読み込むcsvファイル名を絶対パスまたは相対パスで指定するだけです。(文字列で)

file_addr:HOKI8870のcsv生データ

返り値dfは、純粋にロギング条件を除去した、純粋な測定データ部分のみをPandas.DataFrameとした、データフレームです。

おわりに

以上で、データフレームが作成できましたので、あとはnumpyなどで内部処理を行った後に、matplotlibで可視化すると良いです。

Python:ImageMagick install

おばんです。圧倒的かずまなぶです。( `ー´)ノ

アニメーションするグラフを作るときに、jupyternotebook では


%nbagg
import matplotlib.pyplot as plt
import matplotlib.animation as animation

と、モジュールをインポートして

ani = animation.FuncAnimation(fig, plot, interval=100, frames=100)
ani.save("output.gif", writer="imagemagick")
plt.show()

というふうにアニメーションさせた後、保存します。

このとき、アニメーションを保存するためには、imagemagickが必要になりますので、
インストールのやり方をメモしておきます。

mageMagick のインストール

いろいろインストール方法を調べましたが最も簡単なのは、インストーラーを使うことです。

windowsであれば

http://www.imagemagick.org/script/download.php#windows

ImageMagick-7.0.8-68-Q16-x64-dll.exe を入れました。

それ以外ではこちらから選んでください。

http://www.imagemagick.org/script/download.php

 

ImageMagick-7.0.8-28-Q16-x64-dll.exe をダウンロードして、実行するだけです。

以上

HoloLense:折り紙の続き #5

https://docs.microsoft.com/ja-jp/windows/mixed-reality/academy

アカデミー

こんばんは Keita Nakamori です。

折り紙の続きをやっていきます。

今日はUnity2017.4.20f2でやってみます。

インストールからやっていきました。

はまりどころ1   PIN コードはどこだ!?

一通り折り紙を配置してVSに吐き出したあと リリース-x86-デバイスでホロレンズへ書き出そうとしたところPINを要求されました。

20分くらい探したところ セッティング>アップデート&セキュリティ>For developers ずーっと下にスクロールしてDevice discovery のPairボタンをおすと出てきました。これはつらいです・・・

はまりどころ2

cursorオブジェクトを配置しWorldCursor C#をaddし、開いたところ、まずMicrosoft NET 4.6.1をインストールしろと出ましたので、従いました。

これがまた結構時間がかかる、フリーズしたかと思いました。はっきりいってオニですな。

いや なにかがおかしい.ファイルを開くたびに VSをインストールしているような挙動を示しています。これがおかしくないというのなら、なんなんでしょ。

追記:

解決方法としては、とりあえずPCを再起動した後、再びC#のスクリプトを開こうとすると、同じようにNETなんちゃらのインストールを促されるのですが、ここで、「インストールしない!!」が正解でした。

はまりどころ3

なんかおかしいのでいったんPCを再起動しUnityを立ち上げたところ、さっきまで作っていたオブジェクトたちがいなくなってしまいました。

ここは最初につくったOrigamiシーンをダブルクリックすると復活しました。

はまりどころ4

リリース-x86-デバイスでホロレンズへ書き出そうとしたところ「配置ができてない」とかいう警告が出ました。メニューの中に「Origamiの配置」というのがあったので、これを最初にやってからリリース-x86-デバイスをやるとHoloLenseに書き出しができました。

はまりどころ5

今日は前回に引き続き

  1. RAYを飛ばしてオブジェクトに干渉させる
  2. ボールをタップすると重力で落ちる
  3. 音声認識で最初に戻る
  4. オブジェクトを好きな場所に移動させる。
  5. 金平糖みたいなオブジェクトが爆発する。

をやってみましたが、まともに動いたのは1,2だけ。いろいろありますなあ。