スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Vive+Unity2017のSteamVR環境構築やその他ちょこちょこメモ

新しくプロジェクトを作成してViveの開発をしたくなったが、Unityやプラグインのバージョンによっては全然動かなかったりしたためちゃんと動作した環境のメモ。


Unity及びSteamVR、VRTKプラグインのインストール


Unity2018ではVRTKがうまく動かなかったりしたため、この記事を参考に全てのバージョンを古いものに変えて新しくプロジェクトを作り直した。

環境は上記リンクのものと全く同じです。
・Windows 10
・HTC Vive
・Unity 2017.4.2f2
・SteamVR plugin for Unity v1.2.3
・VRTK v3.0.1

SteamVRは最新バージョンがv2台になってしまい、VRTK3.0.1と互換性が無くなったためこちらよりv1.2.3を使用。

鏡・デスクトップ表示の実装


鏡はこちらの記事より。
書いてある通りでエラーも吐かずに出来ます。

デスクトップ表示はuDesktopDuplicationを使うことにより実装。
この環境では現状の最新v1.5.5が動作しなかったため、過去バージョンの1.5.2をインポートしたところ無事に動作。
スポンサーサイト

VRChatでミニゲームを作ってみる

はじめに


VRChatでゲームを作ってみるために段階的に試していることのメモです。

あくまで自分が忘れた時のためのメモのため乱雑です。



スクリプトが使えないVRCでどれくらいミニゲームが作れるかのテスト。

今回作ろうとしているゲームはマリオパーティ4の「フリーフリースロー!」





持てるオブジェクトの作成


調べたらすぐに出てくるため割愛。



ボールを跳ねるようにするためにPhysic Materialを付けていたが、

どうやらVRモードの時に片手で持ったものを離さずに持ち替えるとPhysic Material設定が剥がれるっぽい?

持てない物(壁や床など)に弾性設定を付けたほうが良さそう。





プレイヤーは通れないが物だけ通す壁


layer



元からあるレイヤーの設定を見ると、Pickupレイヤーはreserved系のレイヤーとはぶつからない様子。

壁をreservedレイヤーで作ることによってすぐに可能。



オブジェクトのリスポーン


一定座標以下になると全ての物がリスポーンするワールド設定は存在するが、意図的に指定のオブジェクトをもとの位置に戻すor座標を変える処理は存在しない?

Triggerを使い、自オブジェクトを消し新しくオブジェクトを生成することに。


trigger



トリガーの床を用意し、ボール側にトリガーをアタッチ。

Destroy,Spawnそれぞれに同じオブジェクトを指定。






ボタンで動くアニメーション


wikiの記事(回転するキューブ)およびリンク先の動画を参考にアニメーションおよびアニメーションコントローラを作成。

あらかじめアニメーションを作っておき、コントローラに組み込む。



anime1



そしてボタンに以下のようなトリガーを作成。

これによりボタンを押せばアニメーションが動くように。



button









ボールが壁を抜けている。

その他同期ズレなどの問題もあるため、まとめて後述する。



カウント


これが一番調べるのに苦労した点。

今回はボールがゴールに入った回数をカウントする。



スクリプトが使えない以上ゲーム内でのカウントは難しいため、VRC_WebPanelを利用し

SetWebPanelURIでオブジェクトからjavascriptを渡すことにより実装した。



今回使用したhtml
<html lang="ja">
<head>
<meta charset="utf-8">
<title>freethrow</title>
<script type="text/javascript">
var num1=0;
var num2=0;
function count(){
location.hash = '#' + Math.random();
num1++;
document.getElementById("count1").innerHTML = num1;
}
function count2(){
location.hash = '#' + Math.random();
num2++;
document.getElementById("count2").innerHTML = num2;
}
</script>
</head>
<body>
<center><span style="font-size: 20em;">
<div id="count1">0</div><div id="count2">0</div>
</span></font></center>
</body>
</html>

プログラミングは初心者のため付け焼刃のソースです…

innerHTMLを利用し、カウント関数が実行されるたびにページを書き換える。

これをWebPanelのスタートページに設定し、オブジェクトからリンクを送ることにつきカウント。

webpanel

Synchronize URIのチェックを入れるとワールドにいる人数分カウントが回ってしまうため、今回はチェックを外している。



今回はゴール内にトリガーオブジェクトを作り、ボールが入ったときにURIを送るようにした。

ボールごとにレイヤーを分け、どのボールが入ったかを判別している。

trigger

これによりball1が入った場合count1、ball2が入った場合count2がそれぞれ動作する。




ここまでの問題点


ほとんど全てが同期ズレの問題。

解決してないものを箇条書きにして解決策を考える。



ゴールアニメーション内のボールが折り返し時にすり抜けて落ちる


アニメーションの中に物理演算が入るオブジェクトを入れるのはあまり良くなさそう。


考えている解決策としては、

あらかじめ物理演算の無い4種類のボールをゴールの子に設置し、非アクティブ状態にする。

ゴールに入ったボールを判別、そのオブジェクトを削除し代わりにその見た目の子オブジェクトをアクティブにする。
見た目ではゴールに入ったボールが固定され一緒に動いているように見える。

というのが良さそう?

アクティブ時に動くトリガーもあるため、他の問題にも対処が効きそう。


ゴールを外れたボールが、同期ズレにより他の人にはカウントされる


いちばん悩んでいる問題。

ボタンを押した人と他の人では、どうしてもゴールの初動に時間差が発生してしまう。
そのため、自分の視点からは入ってなくても他の人には入っているように見えることがある。

カウントのズレを直すだけであれば、Synchronize URIをオンにした状態で「〇秒以内の連続入力は無効」とすればユーザー間の数字の差は解決するかもしれないが、同期ズレによるカウントも入ってしまうことになる。


考えうる解決策

・Synchronize URIを使用、ゲーム開始時に全員同期されてゴールした場合関数が何回実行されるかのカウント、〇秒以内に関数がその回数実行されたらカウントが回る
→ゲーム途中で人が増えたり減ったりした場合に対処が効かない。

・トリガーのオブジェクトを極力小さくする
単純に誤反応の回数を減らす。
もしこれで発生しなくなるなら万々歳。

Synchronize URIは使わないほうが安定しそうではある。


とりあえず作り続けてみて、また問題が出たりしたら記事でまとめてみます。

Unity&VRIKでMMDキャラを動かしてみる その1

はじめに


これは後々何かを忘れたときのために、自分が見返して思い出すためのメモになります。

てきとーに書き連ねていくのであしからず


SteamVRプラグインでViveコントローラーが反応してくれない


始めようとしたところいきなりこの壁にぶち当たった。

HMDは反応するがコントローラーが両方ともまったく反応してくれない。
VRTKプラグインをインストールしてサンプルを動かしてみたが、
それでもコントローラーは出てこない…

いろいろと検索して調べた結果、この症状が近いと思ったが、すでに無くなったバグであるらしい。
同じ解決法を試してみようとSteamVR_UpdatePosesをカメラに当てようとしてみたが、
バグ解消のためすでにパッチとして機能していなかった。


Unityのバージョンがいけないのだろうかと思い、
その時使っていた5.4.4から5.6.5にアップデートしてみたが症状は変わらず。
それならいっそと最新のUnity2017.3.0をインストールして試したところ、
VRTKのサンプルプログラムでコントローラーが表示された!

…とぬか喜びしたもののSteamVRのプラグイン自体が上手く動かず、断念。



結局原因が分からず解決しなかったが、1年前に作ったプロジェクトの
プラグインインポート状況なら普通に動作したため、
過去のプロジェクトに追加していく形で開発をすることに。


MMDのモデルをUnityへ&VRIKの設定



この記事を参考にしました。

そうだ、MMDのモデルをUnityに読み込もう - Traffic Jam
http://milk0824.hatenadiary.jp/entry/2016/06/06/224831

Unity+Vive+MMD+VRIKで、キズナアイちゃんになりきりVR
https://qiita.com/halne369/items/daadf0e00330a1019830



VRIKプラグインを突っ込んでもReferencesが反映されないし動かない!なんで??
って状態になって調べたところ、
モデルのAnimation typeをHumanoidにするのを忘れてました。設定しっかり。

conf.png


ここまで実装した動画が以下になります。
メインカメラをキャラの正面に配置して直接撮影。




リップシンク設定


主にこの記事を参考にしました。

Unity でリップシンクができる OVRLipSync を試してみた - 凹みTips
http://tips.hecomi.com/entry/2016/02/16/202634

基本この通りにやっていきますが、マイクの入力を自分の声ではなく
ゆかりねっとを通したVOICELOIDに変えるため、
プラグインのコードをちょっといじります。

(VOICELOIDの出力先をNETDUETTOにしています)


OVRLipSyncMicInputのコードを見ると、入力先デバイスを決定する記述は2箇所ありました
selectedDevice = Microphone.devices[0].ToString();
ここのデバイスを無理やり名前指定するのが良いと思われます
(デバイス数変える予定はないので数字だけいじりました)


また、ウィンドウが外れても動くように一部をコメントアウトしました
if (!focused)StopMicrophone();


ここまででひとまず完成。

ミュート解除してみてUnity内で聞くと謎のノイズまじりのハウリングが出てしまう…
どこかに原因がありそうだが一応は動いているため放置。時間があったら精査します



プロフィール

ぶりす

Author:ぶりす
ゲーム大好きな人。

カウンター
紹介ゲーム一覧
最新記事
最新コメント
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。