Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1
目次
1.研究の背景と目的 1.1.背景と目的 1.2.VRについて 1.2.1.VRとは 1.2.2.VRと ARの違い 1.3.Unity とは 2.研究計画 2.1.役割分担 3.現状 3.1. 基本操作を理解するため作成したゲームアプリ 3.1.1.Unity画面構成 3.1.2.ステージの作成 3.1.3.プレイヤーの移動 3.1.4.ランダム移動と衝突判定 3.1.5. 使用した主なイベント関数 3.2.マウスによるオブジェクトのドラッグ移動 3.3.オブジェクトの自動位置調整 4.今後の課題 5.参考,引用
2
1.研究の背景と目的 1.1.背景と目的 現在 VRは,医療,自動車,教育,宇宙産業など様々な業界で活用されている. 例えば,医療では,VRを診療療法で用いる[1].ルイスヴィル大学の精神科医は,社会不安や
飛行恐怖症などを持つ患者の認知行動療法に VRを利用する.その一つに演説のシミュレーションがあり,これは患者がさまざまな規模の聴衆にさまざまな仮想会場で,まず気が散る要因は加
えず話し,段階的に携帯電話の音や,聴衆からの野次などの注意をそらす潜在的要因を追加して
いき克服するものである. 自動車では,VRを試作車の確認で用いる[2].半導体メーカーの NVIDIAは,試作車の確認を
VRで行えば,場所の制約から解放されると謳っている.現在自動車メーカーは,試作車をコンピューター上で作っており,その試作車の品質を確認するため大型のディスプレイを導入し評価
を行っているが,そうしたディスプレイは一部のオフィスにしか導入されていないので,そこに
行かなければならない.そこで,それを VRヘッドマウントディスプレイ(HMD)に置き換えれば,没入感は大型のディスプレイと変わらないので,場所を選ばず試作車の評価ができるわけで
ある. 宇宙産業では,VRをトレーニングで用いる[3].米航空宇宙局(NASA)では宇宙飛行士育成プ
ログラムにおいて,VRを利用している.このトレーニングは,無重力状態の国際宇宙ステーションで働く難しさを体験するもので,現実世界とヴァーチャルの世界を同期させ,壁のネジを締
める動作や,人から荷物を受け取ることも可能になっている.さらに,NASA は現在「OnSight」という火星表面をシミュレートするソフトウェアを開発し,実用化を目指している.これは,探
査機が火星でどのように振る舞うかをシミュレーションし,探査機の遠隔操作でメリットを生む
ものである. 英国の投資銀行 Digi-Capitalの調査によると,2016年における,VRと ARを合わせた世界ビジ
ネス規模は,約50億ドルとなる見通しで,2020年には1500億ドル規模に拡大する.また Digi-Capitalによると,ここ最近はテクノロジー企業が VR,ARの分野に積極的に投資を行っている[4].
例えば,米 Facebookは,2014年に VRのヘッドマウントディスプレイを手掛ける米 OculusVRを買収したことや,米 Googleは AR技術を使った「Google Glass」を手掛けているほか,VR,ARの新興企業米Magic Leapに出資していることがあげられる. 本研究では,近年注目を集めている VR向けアプリを Unityというエンジンで開発することを
目的とする.
1.2.VRについて 1.2.1.VRとは
VRは virtual reality(バーチャルリアリティ)の略で,仮想現実や,人工現実感とも言われている.virtualとは,日本語では「仮想」,「現実ではない別の空間」という意味で,realityとは,日本語では「現実」,「私たちが経験するもの」という意味である.
VRは,人間の感覚器官に働きかけ,現実のように感じられる環境を人工的に創り出す技術で
ある.
1.2.2.VRと ARの違い VRが目の前にある実際の場面から離れ,完全にデジタル世界の中に身を置くという技術であ
るのに対し AR(Augmented Reality)は,目の前の現実の場面にデジタル情報を重ね合わせ表示する点である. 1.3.Unityとは
Unityとは,「総合開発環境」を内蔵し,複数のプラットフォームに対応したゲームエンジ ンである.ゲームエンジンというのは,コンピュータゲームのソフトウェアの主要な処理を代 行するソフトウェアの総称である.Unityはオブジェクトに物理演算を付加し,プレイしながらリ アルタイムで編集できる.スクリプトを書く際のプログラミング言語には C#,UnityScript,Booを 使用することができる.UnityScriptは JavaScriptを元にモデル化された Unity独自設計の言語に なっている.本研究は C#を学習するために C#を使用しプログラミングする.
3
2.研究計画
5月 Unityでのアプリ作成の流れを「Unity5入門」を読み理解 6月 Metasequoiaを使用し,3Dモデル作成 7月 Unityでアプリを作成し,C#のイベント関数を学習 8月5日 卒業研究中間レポートの提出 8月20日,21日 大阪キャンパスのオープンキャンパスで使用する ARアプリの完成 9月 遂行機能障害の調査と BADSの動物園地図検査のアプリケーション開発開始 1月 卒論制作 2月 卒業研究発表会
2.1.役割分担 Unityの開発を藤井と協力し研究を進めている.私は VR向けアプリケーション,藤井は AR向
けのアプリケーションの開発を目指している.週一回のミーティングで技術や情報を発表するこ
とで,直面している問題をアドバイスし合い課題を解決している.例としては,私は Unityでシーン移動した際のオブジェクトの位置情報の保持・継承に悩んでいたが,藤井の研究課程で得た
知識を基にアドバイスしてくれ,無事シーン移動した際でも位置情報が失われないスクリプトを
完成.また,藤井が ARで表示させたモデルの移動のスクリプトに悩んでいたが,私のアドバイスで無事解決し,ARで表示させたモデルが移動するスクリプトを完成させた.
3.現状 はじめに Unity の基本機能で簡単なゲームを作りながら,unity エディタの簡単な使い方を理解し,目
標とするアプリを開発するため,知識を徐々につけている.[5]
3.1.基本操作を理解するため作成したゲームアプリ Unityの基本機能,使い方,スクリプトについて理解することを目的とし,ボールを転がして
黒い球から逃げながら赤い球を捕まえるゲームアプリを作成した. 3.1.1Unity画面構成
Unityを起動すると以下の図1のような画面が表示される.
図1 Unity のインターフェース
Unity の画面は図1の番号のように5つに分けられる. ① シーンビューといい,制作中のゲーム世界が表示され,自由な位置,角度から眺めることができる.
4
② ゲームビューといい,カメラを通して見えるゲーム画面が映っている.実際にゲームを作成して出 力した際にゲームがどう見えるのかをこのビューから確認することができる.
③ インスペクタービューといい,シーン内で選択中のオブジェクトが持つ属性を表示し,編集すること
ができる.属性には座標やメッシュといった見た目上のものから,衝突判定や物理制御に関するパ
ラメータなどもある. ④ ヒエラルキービューといい,現在選択されているシーン内に配置されているすべてのオブジェクトが
格納されている.各オブジェクトの階層構造を確認,編集することができる.モデル や図形などの素
材をヒエラルキービュー内に追加することでシーン内にオブジェクトとして配置する こともできる. ⑤ プロジェクトブラウザといい,制作中のプロジェクトに含まれるシーン,スクリプト,グラフィック,サウン
ドなどのデータがファイル単位で表示される.
3.1.2.ステージの作成 まず,地面を作成する.Hierarchy View の Create から3D Object > Plane を作成する.作成 した Plane
の Position を(0,0,0)に,Scale を(2,1,2)にする. 次に,壁を作成する.Hierarchy View の Create から3D Object > Cube を作成し,作成 した Cube の
Position を(-0.5,0.5,-9.5)に,Scale を(19,1,1)にする.作成した Cube をコピーし,Position と,Rotation を変
え壁として配置する.
図2 Plane と Cube の作成
3.1.3.プレイヤーの移動
まず操作するプレイヤーを作成する.今回はボールを操作するので,Hierarchy View の Create から3D Object > Sphere を作成する.
次に物理演算のコンポーネントを追加する.コンポーネントとはオブジェクトを構成する部品のことであ
り,コンポーネントにより稼働させ,他のオブジェクトに影響をあたえることができる. まず,Sphere を選択し,Inspector View の Add Component から Physics > Rigidbody を追加する.これ
により物理演算の機能が追加され,Sphere オブジェクトが落下する. 最後にプレイヤーである Sphere を操作するためのコンポーネントを作成する.Unity の標準で用意され
ていないものは自身で作成する必要があり,C#や UnityScript で記述できる. まず,Sphere を選択し,Inspector View の Add Component から New Script を選択する.本研究では
C#を学習するため,New Script から CSharp を選択し Create する. 以下 Sphere にアタッチしたスクリプト using UnityEngine; using System.Collections; public class PlayerMove : MonoBehaviour {
5
//物理演算で動く度に呼ばれる処理 void FixedUpdate() { // 入力をxとzに代入 float x = Input.GetAxis("Horizontal"); //Horizontalは左右矢印キー float z = Input.GetAxis("Vertical"); //上下矢印キー Rigidbody rigidbody = GetComponent<Rigidbody>(); //押す力を上昇(7倍) x = x * 7; z = z * 7; // rigidbodyのx軸(横)とz軸(奥)に力を加える rigidbody.AddForce(x, 0, z); } } これにより Sphere はキーボードの上下左右キーを押すことで,その方向へ力が加わり操作が可能とな
る.
3.1.4.ランダム移動と衝突判定 前述したプレイヤー以外の黒と赤の球はランダムで移動し,衝突したときにイベントを起こすことにした. 以下ランダム移動のスクリプト void FixedUpdate(){ float x = Random.value; //x軸 ランダム(0~1.0の値) float z = Random.value; //z軸 Rigidbody rigidbody = GetComponent<Rigidbody>(); x = (x * 10 - 5) * 3; z = (z * 10 - 5) * 3; rigidbody.AddForce(x, 0, z); } Random.valueで返されるのは0から1.0の値なので(x * 10 - 5) の計算で-5から5の範囲にしている. 以下衝突判定のスクリプト void OnCollisionEnter(Collision hit) { if (hit.gameObject.CompareTag("Player")) { イベント; } } これは Playerという名前のタグがついたオブジェクトと衝突したときにイベントを起こすスク
リプトである.
3.1.5.使用した主なイベント関数 現在までに使用した Unityのイベント関数は「Start」,「Update」,「FixedUpdate」,「Awake」,「OnMouse」,「OnColliosionEnter」,「OnDestroy」である.「Start」は Updateが呼び出される前のフレームで呼び出される関数であり,スクリプト内で1回のみ呼び出される.「Update」は1frame(画像の描画単位)ごとに呼ばれる.ただし,描画の間隔は処理能力に依存するため一定ではな
い.「FixedUpdate」は,固定のインターバルで呼ばれる関数で,デフォルトでは0.02秒毎に呼ばれる.「Awake」は,スクリプトがロードされたときに呼ばれる.「OnMouse」はマウスによって
6
呼び出される.現時点では「OnMouseDown」,「OnMouseDrag」,「OnMouseUp」を使用したことがあり,順に,マウスの左ボタンが押されているとき,マウスをドラッグしたとき,マウスの左
ボタンが押され戻るとき呼ばれる.「OnColliosionEnter」は,3.1.4の衝突判定のスクリプトのように,OnColliosionEnterをアタッチしたオブジェクトが指定したあたり判定を持つオブジェクトに衝突したときに呼び出される. 図3はイベント関数の呼び出し順をフローチャートにしたもので,このフローチャートから,使用した7つのイベント関数を呼び出される順に並べると,Awake → Start → FixedUpdate → OnColliosionEnter → OnMouse → Update → OnDestroyとなる.
図3 関数呼び出し順フローチャート[6]
7
3.2.マウスによるオブジェクトのドラッグ移動 下記アタッチしたスクリプト
using UnityEngine; using System.Collections; public class MouseDrag : MonoBehaviour { //Vector3は,与えられた x,y,z 成分で新規のベクトルを作成する private Vector3 screenPoint; private Vector3 offset; void OnMouseDown() { //カメラから見たオブジェクトの現在位置を画面位置座標に変換 screenPoint = Camera.main.WorldToScreenPoint(transform.position); } void OnMouseDrag() { //ドラッグ時のマウス位置をシーン上の3D空間の座標に変換する
Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint); //オブジェクトの位置を変更する transform.position = currentPosition; } } オブジェクトをクリックしたときのスクリーン上のマウスの座標を,Unityの世界座標に変換
し,ドラッグしたときにマウスにオブジェクトがついていくように移動させている.つまり
WorldToScreenPointは,ワールド座標をスクリーン座標に変換している.Unityのワールド座標とは,3D 空間内の座標のことであり,スクリーン座標とは,解像度と一致し,画面左上が0である. このスクリプトにある transform.positionは,transform.position =;の形で,代入した位置座標へ
アタッチしたオブジェクトを移動させる.
3.3.オブジェクトの自動位置調整 マウスのドラッグでモデルを移動させるものを,指定の範囲内にモデルが移動すると自動で位
置を修正するようにする.3.2のスクリプトに private static Vector3 pos; と,void OnMouseUp() を追加し,OnMouseDrop() 内に pos = currentPosition;を追加する.そして void OnMouseUp()に posの座標はオブジェクトを置いた位置の座標となるので,if文で範囲内の座標にオブジェクトを置いた場合,指定した場所へ移動させるとする. 下記 if文の例 if (-0.5 <= pos.x && pos.x < 0.5){ if (-0.5 <= pos.z && pos.z < 0.5) transform.position = new Vector3(0, 0, 0); if (0.5 <= pos.z && pos.z < 1.5) transform.position = new Vector3(0, 0, 1); if (1.5 <= pos.z && pos.z < 2.5) transform.position = new Vector3(0, 0, 2); }
4.今後の課題 現在,BADS遂行機能障害症候群の行動評価のうちの動物園地図検査を VRアプリにしようと考えている.動物園地図検査は紙とペンで行っており評価することしかできない.VRすること
8
で現実に近い状態になり,遂行機能障害の方のリハビリテーションにも効果が期待できるのでは
ないかと考えているが,現状分からないため,今後,遂行機能障害及び高次脳機能障害について
調査することが必要である.
5.参考,引用 [1] The Wall Street Journal 「治療ツールとしての仮想現実」
< http://jp.wsj.com/articles/SB12416273766489574789704581260381354176842 > (2016/8/03 アクセス)
[2] Car Watch 「プロ向け VRが,自動車の試作や自動車ディーラーの展示を変える」
<http://car.watch.impress.co.jp/docs/event_repo/gtc2016/752489.html > (2016/8/03 アクセス) [3] mogura VR 「ハイブリッド・リアリティによる NASAの宇宙飛行士育成プログラム.VRで宇宙の作業環境を再現.」 <http://www.moguravr.com/nasa-hybridreality/ > (2016/8/03 アクセス)
[4] Digi-Capital 「Augmented/Virtual Reality revenue forecast revised to hit $120 billion by 2020」
<http://www.digi-capital.com/news/2016/01/augmentedvirtual-reality-revenue-forecast-revised-to-hit-120-billion-by-2020/#.V53tAmzsI0T> (2016/7/27 アクセス)
[5]荒川巧也・浅野祐一 「Unity5入門-最新開発環境による簡単3D&2Dゲーム制作」
SBクリエイティブ出版 (2015) [6] Unity 「Unity マニュアル」
<http://docs.unity3d.com/ja/current/Manual/index.html> (2016/8/2 アクセス)