2019年9月25日水曜日

[Unity][Android][OculusQuest] 形態素解析MeCabを使ってみる

業務多忙につき更新が滞っていますが、おかげでネタが溜まってきました・・・

さて、本題です。

形態素解析といえば、MeCabが有名です。
OculusQuest(Android)で動かせないかなあと試行錯誤していたらようやく動いたので、
手順を紹介しておきます。

手順は以下の通りです。

■試した環境
・Unity 2018.4.1f1
・Oculus Quest

■実施手順
1. NMecabをダウンロードする
 NMeCabは、MeCabのエンジン処理を.NETで書き直してくれてたオープンソースです。
 Windows用にDLLが格納されていますが、今回はソースを使います。
 最新バージョンはNMecab0.07となります。(2019/9/25現在)
 https://ja.osdn.net/projects/nmecab/

2.プロジェクト設定を行う
 NMeCabのソースを使う為に以下の設定を行います。
 ①.NET4 を使用するように設定する
 ② Allow unsafe Code にチェックする

3.ソースと辞書ファイルを配置する
 ① UnityのAssetsフォルダに以下のフォルダを作成します。
  ・ Assets/NMecab
  ・ Assets/StreamingAssets/NMecab

 ②1.でダウンロードした圧縮ファイルの中にあるファイルを格納していきます。
  ・NMeCab0.07\src\LibNMeCab を Assets/NMecab 下にコピーします。
   

  ・NMeCab0.07\dic\ipadicの直下にあるすべての辞書ファイルを Assets/StreamingAssets/NMecab下にコピーします。
  

4.プログラムから呼び出す
 Androidの場合、StreamingAssetsに配置したファイルを読み込み場合、WWWを使って読み込む必要があります。そうなるとNMeCabのソースを変更しないといけなくなるので辞書ファイルは一旦Android端末へコピーしてからそのファイルを読み込むようにします。

 以下のスクリプトを作成して実行してみましょう。
  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using NMeCab;
using System.IO;


public class MecabTest : MonoBehaviour
{

	void Update()
	{
	}

	void Start ()
	{

	    //端末へMecabの辞書ファイルをコピー
	    CopyFile(Application.streamingAssetsPath + "/NMeCab", Application.persistentDataPath, "char.bin");
	    CopyFile(Application.streamingAssetsPath + "/NMeCab", Application.persistentDataPath, "dicrc");
	    CopyFile(Application.streamingAssetsPath + "/NMeCab", Application.persistentDataPath, "matrix.bin");
	    CopyFile(Application.streamingAssetsPath + "/NMeCab", Application.persistentDataPath, "unk.dic");
	    CopyFile(Application.streamingAssetsPath + "/NMeCab", Application.persistentDataPath, "sys.dic");

	    //Mecabの読み込み
	    param = new MeCabParam();
	    param.DicDir = Application.persistentDataPath;


	    //テスト
	    SetKeyWord("今日はとても良い天気ですね。");

	}

	/// 
	/// copy dictionary file.
	/// 
	/// void
	/// from path
	/// to path
	/// copy file name
	void CopyFile(string from, string to, string fileName) {
	    string path = from + "/" + fileName;
	    string toPath = to + "/" + fileName;

	#if UNITY_EDITOR || UNITY_IPHONE
	    FileInfo file = new FileInfo(path);
	    file.CopyTo(toPath, true);

	#elif UNITY_ANDROID
	    WWW www = new WWW (path);
	    while (!www.isDone) {
		}

	    File.WriteAllBytes (toPath, www.bytes);
	#endif
	}



	/// 
	/// Shows the key word.
	/// 
	/// The key word.
	/// Sentence.
	public void SetKeyWord(string sentence) {
	    MeCabTagger tagger = MeCabTagger.Create(param);
	    MeCabNode node = tagger.ParseToNode(sentence);

	    while (node != null)
	    {
	        if (node.CharType > 0)
	        {
				//名詞のみ抽出
	            if (node.Feature.IndexOf ("名詞") >= 0) {
	                Debug.Log ("名詞:" + node.Surface);
	            }
	        }
	        node = node.Next;
	    }
	}
}



具体的な使い方は、本家のソースを参考にしてください。








2019年9月9日月曜日

[OculusQuest][App] バスルーム ver1.0 リリース

人形の間2が時間かかりそうなので、ちょっとしたホラーを作ってみました。

ストーリー的には、人形の間へ遊びに行ったその日の夜こと。深夜2時にシャワーを浴びていると家のチャイムが・・・



■遊び方
・手の操作はなく、視点のみです。
・プレイ時間は3分前後のショートストーリです。
・音量は少し大きめにしてプレイしてください。

■ダウンロード
https://drive.google.com/open?id=1rllwx36__DzlORZXC46EBdgF_ZvsYiqe
※Sideloadなどでインストールしてください

感想などコメントいただけると、次への活力となりますので是非



2019年9月5日木曜日

[OculusQuest][Unity] 人形の間2開発中その1

「人形の間」が意外と好評のようでしたので、次へと繋げるためにみなさんの声をメモっておこうと思います。

・めちゃくちゃ怖かった、、途中何度か飛び上がった
・片手間に作ったレベルじゃない完成度だろw
 センスあるなー
 途中叫んじまったよw
 マジで投げ銭するからもっといろいろ作ってくれ!
・めっちゃ怖すぎた 俺もこういうお化け屋敷系作るわ
 人形の顔を覗き込めるところがさすが6DoFって感じだった
・すでにリアルなお化け屋敷レベルだよ
 VR体験型アトラクションにしてもお金が取れるんじゃない? と思う
 こういうのが家で手軽に楽しめるって素晴らしい
 欲を言えば、タッチコンで手に燭台を持っていて照らした方向が明るくなる(四隅が暗い方が怖そう)とか、人形の顔を覗き込むとニーッと笑うギミックとかほしいかな
・無理無理無理
 なんなん?この不気味なBGM?
 最初の場所からほんの少し動くだけでギブだったわ。。。
 男のくせにVRゲーセンの脱出病棟で甲高い悲鳴を上げたのはこの俺です
・いやいやいや、お化け屋敷よりビビるわw
 12時間で作ったってやべーな、クオリティ高い!
・まじで12hなの?
 ヤバいヤバい
 気力あるならお化け屋敷verまってるわ
・ホラーとVRの相性がえぐいなーw
 ガチで進めない怖さ
・やってみたけど最初の襖出たところから動けなかった
 他の人にやらせる前にやっときたいけど真昼間でも怖すぎたわ
・最初のふすまを開けたときに
 バイブレーションがきてビビって進めなくなった…チキンすぎる
・ホラーゲーはまあ余裕だけどお化け屋敷は無理な
 腰抜けなんだが、もう最初のふすま開けたところから
 暗闇が本能的に怖くて足がすくんで動けなくなったわ
 鼻の下の隙間意識したり音量下げたりこすいことやって
 何とか最後までみたけど、Rift初期に話題になった井戸の奴とか
 Face your Fears、Wilson’s heartなんか話にならんレベルで怖い
 暗さ、照明、通路のみせかたとかオーソドックスなお化け屋敷の
 構成要素抑えてるから、これ苦手な人は本気で無理な人居ると思う
・日本人形やってみた
 一度に表示できるオブジェクトの制限とかあるのかな?
 近距離で人形見てると横の湯呑や銅鏡?や雛あられなんかが
 見えたり消えたりする事があるね
 あと、人形の着物のスソを覗いてガッカリした
・お化け屋敷のやつ、riftにある「citysape vr」に似た恐怖感があった。
・お化け屋敷、怖すぎて自分では動けないから
 遊園地のトロッコ式みたいに自動で進むバージョンも欲しい
・うちの家族にお化け屋敷やらせてみたら、特に驚くこともなく進んですぐ戻ってきたわ
 DVDレンタルしてホラー映画一人でほぼ全部見てるし、ホラー耐性ありすぎたわ
 自分もビビったけどなんとかクリアできたわ
・もっと怖いモードも実装してくれw
・ネタバレ増えてきたので慌ててプレイしたけど怖かったー!
 開発スキルより構成のうまさがすごい。
 実はこれ系のプロでしょ??
・人形の間をプレイしていた時
 鼻の隙間から何か動く物が見えた気がして全身が総毛立った
 慌ててQuest外したけど部屋の中には何もいない
 気のせいだということにして忘れようとしたのだが・・・
 それ以来だ
 Questをかぶると決まって嫌な視線を感じるようになったのは
・人形の間、老眼のせいか夜目が利かなくて
 暗すぎて道がわからなくなる
 順路の矢印みたいなのを付けてもらえると助かります

やっぱりもっと怖さを増そうかなと、建物をリフォーム&人形のクオリティーをアップ中です。

お人形さんの恐怖度も増していきますが、やっぱり手を使った仕掛けを入れていきたいなと思います。

粛々と作成中!!


2019年9月3日火曜日

[OculusQuest][Unity] Oculus Integration for Unity-1.40が出ました!

Oculus Integration 1.39がバグだらけでどうしようもなく困っていたのですが、ようやく1.4がリリースされました。
https://developer.oculus.com/downloads/package/unity-integration/

新機能

  • Oculus Quest Mixed Reality Toolsパッケージの更新
  • OVRManagerに遅延コントローラーの更新追加しました現実世界と仮想コントローラーの動きの間の待ち時間を短縮するために、レンダリングの直前にコントローラーのポーズを更新します。
  • OVRManagerのUse Recommended MSAA Levelの動作を更新しました現在、この設定はデフォルトで有効になっています。
  • OVRDisplay.RecenteredPose:クエストでサポートされるようになりました。イベントは、ユーザーが再登録するたびに送信されます。
  • Oculus Questサポートのヘッドトラッキングマニフェストフラグを使用してAndroidManifest.xmlファイルを手動で生成する要件を削除しました。OVRManagerのターゲットデバイスのリストに「Oculus Quest」を追加するだけで、マニフェストファイルが更新されます。

統合の変更

  • 以下を含むOculus Unity Integrationを1.40に更新しました。
    • Audio Spatializerを1.40に更新しました
    • Lipsync統合を1.40に更新しました
    • プラットフォーム統合を1.40に更新しました

バージョン固有の既知の問題

このセクションでは、サポートされているUnityバージョンの既知の問題について詳しく説明します。
Unityバージョン
既知の問題点
2018.2
Unity 2018.2のすべてのバージョン
  • (モバイル)AndroidBuildSystemを内部に切り替えるか、Gradleプロジェクトをエクスポートし、build.gradleファイルのSigningConfigを変更してv1SigningEnabled = true、v2SigningEnabled = falseを含める必要があります。
2018.2.20f1
  • (モバイル)2018.2.20f1でロードすると、一部のゲームオブジェクトが暗く表示される場合があります。この問題を回避するには、2018.2.19などのUnityの別のバージョンでプロジェクトをロードします。


Unityの一般的な既知の問題

このセクションでは、特定のバージョンに関連付けられていないUnityの既知の問題について詳しく説明します。問題は、最も密接に関連する主題ごとにグループ化されています。
件名
既知の問題点
団結
  • Vulkan APIは現在、UnityでのOculus開発ではサポートされていません。Unityエディターでビルドエラーを受け取った場合プレーヤー設定の「グラフィックAPI」リストから「Vulkan」を削除する必要がある場合があります
  • Unityには、あるVRカメラを別のVRカメラにペアレント化するとトラッキングが2回繰り返されるという既知の問題があります。回避策として、それらをGameObject階層の兄弟にします。
ウィンドウズ10
  • Windows 10でRiftをターゲットにしているときに、Unity Editorで長いUIストールまたはパフォーマンスの低下が発生する場合は、Windows Updateを実行して、Windows 10の最新バージョンを使用してください。
  • Oculusランタイム1.17+およびWindows 10 + Creators Updateを使用したすべてのUnityバージョン:この組み合わせにより、非VRプロジェクトであっても、エディターで誤ったWM_DEVICECHANGEレポートが生成されます。多くのユーザーは影響を感じませんが、特定のUSBデバイスに接続しているユーザーは、エディターが応答しなくなり、タスクマネージャーから終了する必要がある場合があります。軽減するには、公開テストチャネルで利用可能なベータ版ランタイムに更新してください。現在、UnityおよびMicrosoftと永続的なソリューションに取り組んでいます。
リフト
  • Guardian System API:ovr_SetBoundaryLookAndFeelは現在、呼び出しが行われたときにHMDが装着されていない場合(たとえば、開始時)に有効になりません。
  • 透明なVRコンポジターレイヤーは現在、複数レイヤーのオクルージョンをサポートしていません。
  • Mixed Reality Captureの場合、ZED CameraユーザーはSDKバージョンを2.3.1以降にアップグレードする必要があります。以前のバージョンには互換性がありません。
モバイル
  • Unityの既知のバグにより、戻るボタンを使用してユニバーサルメニューを入力し、アプリケーションに戻ると、モバイルアプリケーションのパフォーマンスが低下します。特に、マルチスレッドを使用するアプリケーションやCPU使用率が高いアプリケーション、およびS7(ヨーロッパ)およびS8(グローバル)電話に影響します。このバグは、Unityバージョン2017.3.0b9、2017.2.0p3、2017.1.2p4、および5.6.4p2で修正されています。
  • ユニバーサルメニューからフォーカスに戻るとき、またはホームダイアログに戻るときにクラッシュするため、ユーティリティ1.11.0を使用しないでください。
  • シングルパスステレオレンダリングが有効になっていると、特定の場合にプロジェクトのビルドが失敗し、「「モバイル/バンプ詳細ディフューズ」のシェーダーエラー」というエラーメッセージが表示されます。詳細については、高度なレンダリング機能のシングルパスステレオレンダリングセクションの「既知の問題」を参照してください
  • (Gear VR)サムスンの携帯電話(Gear VR HMDで使用)などのMali GPUで入力属性値をピクセルシェーダーに直接渡すと、ちらつきや左目/右目の不一致が発生する可能性があります。これは、ARMドライバーがそのような「揮発性」データを明確に対象とし、そのデータを最適化しようとするため、意図せずに問題が発生するためです。回避策は、元の値の修正バージョンを何らかの方法で使用しようとすることです。たとえば、入力値aをシェーダー値bに直接渡す代わりに、b = a + 0.0001を設定します。これにより、ドライバーがbを異なる方法で処理できなくなります。
とりあえず、いろいろと修正されているようなので使ってみようと思います。
LoadSceneができるようになっているといいな・・・