スキップしてメイン コンテンツに移動

UnityでのVR歩行スクリプト紹介

念願の夢、自作VRでの歩行



と言いつつ今回紹介するのは歩行と言っていいのか。

動画有るんで、良ければ再生とチャンネル登録お願いします。



まずは目次。

1.UnityでVRを作り、自由に歩きたい
2.GameObjectの構成紹介
3.スクリプトの紹介

このようになります。

1.UnityでVRを作り歩きたい!

まず、UnityでVRを作る中で、

「自分の作った世界を歩きたい!」

となりました。

まあ、せっかくですからね。

そんな訳で悩みに悩んで数か月。(実働では30時間位だろうけど)

なんとか簡単な物が完成しました。

ぶっちゃけネットで調べても中々ちゃんと動くスクリプトって見つからないので、2018/12/10日時点で、自分が作ったものを載せておきます。
(既に誰か作ってたら、すまんな。)


2.GameObjectの構成




ざっくりとこんな感じです。

Playerの下に、動くカメラとVR用のシステム、それに8方向の矢印それぞれという感じです。

矢印の中身は、スクリプトが各方向用の数字になっているので、そこだけ違います。

後に書くスクリプトと合わせてご覧くださいな。

この構成上、視線を動かした時に動くものがMainCameraだけなので、Playerや各矢印は回転しません。

ただ、プレイヤーのRigidBodyで回転を止めるチェックを入れていないと、物にぶつかった拍子に回転し続けます。(2枚目参照)


3.スクリプト紹介 (スクリプトのコピー用は一番下です。)


まずは、移動量の一括管理スクリプトです。

わざわざ8方向全て書き換えるのが面倒なので、front = 0.05fの0.05を書き換えるだけにします。

注意点としては、staticを使ってどこからでも読み書きできるので、他のスクリプトで数字を書き換えない事。

frontが上下左右。nanameが45度方向になります。

naname = front*0.7fとしてるのは、上下左右と移動量を合わせるためです。基本的に書き換える事は無いと思います。



矢印のスクリプトです。

視線の認識をした二つの「public void enterPointer」と「public void exitPointer」で認識。

startで先程の変数管理スクリプトから、上下左右用のfrontを設定するか、斜め用のnanameを設定します。

後は、if(time >= 1)内で、1秒以上視線が当たっている時、Update毎にプレイヤーのポジションを追加すると言う状態です。

実際たどり着いてみれば、何の事も無い簡単なスクリプトで行けてしまいましたね。


ずっと自分は、一つの矢印を使い、trasform.forwardで組もうとしていたので、こんな単純な事を見失っていました。

それとforwardは書いたスクリプトを付けたオブジェクトのZ方向に進みます。
意外と迷う事だと思いますので、今回は使いませんが書いておきます。


さてここまで、VR上で歩行に近いシステムの紹介をしました。

どうぞVR制作にお使いくださいな。

それでは、最後までお読み頂きありがとうございました!

今後kou0128もVR制作に力を入れていきますので、応援よろしくお願い致します。

また見てね!


スクリプト紹介

HensuuKanri.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HensuuKanri : MonoBehaviour {

public static float front = 0.05f;
public static float naname = front*0.7f;

}


ScriptFront.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptFront : MonoBehaviour {

private bool counter; //カウンタ
private float time; //経過時間
public GameObject Player1;
private float x;

// Use this for initialization
void Start () {
counter = false;
time = 0;
x = HensuuKanri.front;
}
// Update is called once per frame
void Update () {
if (counter) {
time += Time.deltaTime;

if (time >= 1) {
Player1.transform.position += new Vector3 (0.0f,0.0f,x);
}
}
}

public void enterPointer(){
Debug.Log ("Enter Pointer");
counter = true;
}

public void exitPointer(){
Debug.Log ("Exit Pointer");
counter = false;
time = 0;
}

}


ScriptFrontRight.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptFrontRight : MonoBehaviour {

private bool counter; //カウンタ
private float time; //経過時間
public GameObject Player1;
private float x;

// Use this for initialization
void Start () {
counter = false;
time = 0;
x = HensuuKanri.naname;
}
// Update is called once per frame
void Update () {
if (counter) {
time += Time.deltaTime;

if (time >= 1) {
Player1.transform.position += new Vector3 (x,0.0f,x);
}
}
}

public void enterPointer(){
Debug.Log ("Enter Pointer");
counter = true;
}

public void exitPointer(){
Debug.Log ("Exit Pointer");
counter = false;
time = 0;
}

}

コメント

このブログの人気の投稿

3DCADでゲーム用の銃を作っていく ~活動報告190925~

3DCADのFusion360を使って、銃の3Dモデルを作ります。 どうも、kou0128です。 昨日、思ったよりもガチャゲーの制作に時間がかかる事が判明し、VRの制作に戻ります。 まずは、3DCADでモンスターを撃つ銃のモデルを作っていきます。 使うのはFusion360という3DCADソフトです。 作ってる途中の画像じゃなく、いきなり原型が出来てしまってますが・・・ 使い方はを細かく紹介するブログと動画は、また作ります。 さて原型を作りましたが、もう少し銃っぽさを出していきます。 グリップ部分チェッカリングを付けていきます。 実際の拳銃でも滑り止めについていることが多いし、平面な部分を減らしていくことでのっぺり感を減らせるんじゃなかろうかという感じです。 グリップのチェッカリングと、スライドの分割溝を付けることで、一気にのっぺり感が減りました。 ただ、今回作ったモデルはゲーム中にサイト覗きっぱなしなので、サイドのデザインは関係ないという。 やっぱり作るならクオリティにこだわりたいじゃないですか。 今後の練習と思えば、全然苦になりません。 サイドにデカールを貼ってみました。 簡単に絵を張り付ける機能も標準で搭載されているので、3D上でモデルとステッカーのあわせが試せるという使い方が出来ます。 3Dプリンタでモデルを出して、プリンターでシールを印刷すれば実物で再現できそう。 うーん、やっぱり3DCADでモデル作ると3Dプリンタで出してみたいという思いにもなります。 やっぱり買おうかなぁ・・・・ 閑話休題 Windows10搭載のペイント3Dで色を塗ってみました。 これでテクスチャデータが書き出せたら、神ソフトなのですが試してみた感じ、全然上手い事行きません。 やっぱりBlenderで色を付けるしかないですね・・・ そんな訳でBlenderに取り込みます。 BlenderのUV展開で色を付けることできないかなぁ・・・と以前から考えてますが、何故かペイント機能が出ない。 というか、そもそもUV展開された状態が...

SL230~リアブレーキ&シフトペダルの調整~

今回は以前より自分のライディングポジションに合わなかった、 リアブレーキペダル&シフトペダルの位置調整をしていきます。 まずは、リアブレーキの調整からしていきます。 はい、調整後です。 調整方法はいたって簡単です。 この金色のナットの位置調整をして終わりです。 ね?簡単でしょ? 流石に詳しく説明をします。 1. まず、下のねじの山を確認し、金色のナットとステン(?)のナットが近づく方と離れる方を確認します。 2. でペダルを下げたい場合は、近づく方向に回し、上げたい場合は離れる方向に回すだけです。 説明終わり。 リアブレーキペダルの調整は恐ろしく簡単でした。 注意点としては、 1. 電気をONにしてブレーキを踏んだ時、ブレーキーランプが点きっぱなしにならない事に確認する。(点きっぱなしだと、「整備不良」でお巡りさんに捕まるよ!) 2. ブレーキを踏んでいない時に、ブレーキパッドとブレーキディスクが当たってないか確認する。 この二つを確認して、試し乗りして問題なければ終了です。 これで、長距離でも疲れにくくなりましたね。 さて、次はシフトペダルの調整をしていきましょう。 シフトペダルの調整は本来、この 二つのナットの位置を変えて調整しますが、今回は、 元の接続部のとこから変えていきます。 それでは説明を。 1. まず、シリコンスプレーを吹いて、ねじを緩めます。 2. シフトペダルは横方向に遊びが有るので、そのまま取り外し。 3. ここから位置を決めながら、少しづつ角度を変えていきます。(かなり大きく変化するので良い位置を見つけるのは難しいよ) 4. で、位置が決まったらねじを付けて固定です。(締め過ぎ注意、なめたら詰みだよ!) で、あとは試し乗りして気に要らなけりゃ、変えてまた試し乗りという流れですね。 これでシフトペダルの調整は終了です。 自分がした感じだとブレーキペダルは簡単でしたが、シフトペダルは少し面倒かなという印象です。 今回自分がしたときは、...

「このカードを語りたい」第2回 クラヤミノツボ DARK MEMORY CONTAINER【デュエマ】

どうもkou0128改め、kouhei0128です。 「このカードを語りたい」第2回の今回は、なんかダメそうな見た目だなぁと思ってたら本当に禁忌レベルの使われ方になった、 クラヤミノツボ DARK MEMORY CONTAINER このカードについて語って行きたいと思います。 1.性能よりも前にまず見た目が危なそう。 このカードを見て、皆様はどんな印象を持たれましたか? 見た目・名前から「なんかDARK MATERIAL CONPLEXに似てるなぁ」そうは思いませんか? とは言え性能で見ると、あのカード程の高いパワーも持っていなければ、効果も3色5マナの割には強制2ドローと、シールド追加時に墓地から蘇生出来る効果です。 「シールド追加ってコスト高いカードが殆どだし、出した上で2ドローだから、まあそんなに大した事無いだろう」と、そんな風に考えた時期がありました。 2.ちゃんと性能全部が駄目だった このカードが出た王道Wの第2弾時点ではそれほど相性の良いカードは発見されていませんでした。 しかし、王道W第3弾にこのカードが入ってました。 前回語ったこのカード、「アンリミテッド・アヴァラルド 〜地獄帰りの騎士〜」です。 これまでのカードプールでは、墓地にクラヤミノツボを持っていく方法はエマージェンシータイフーンなど軽量なカードが有りましたが、蘇生効果を発動する為のシールド追加手段に乏しかったのが現実でした。 しかし、アンリミテッド・アヴァラルドは3ドロー2捨てして、シールド追加。 つまり3ドローした時点で、手札にクラヤミノツボが2枚存在するなら、2捨てで墓地に置くことでクラヤミノツボをシールド追加時に2体蘇生出来ます。 いや、ダメだよ。 色も全く同じなので、公式も想定済みのコンボかもしれませんが、この2体蘇生から闇王ゼーロを使うループに入るデッキが大暴れしているのは、皆様も承知の事でしょう。 特にクラヤミノツボのツボ自身が出た時に強制2ドローを持っている為、2体蘇生した段階で手札0でも、4ドローでゼーロ+闇3枚が揃ってしまえば闇王ゼーロを代替えコストを払って使うことが可能です。 余りにも闇王ゼーロの為のカードと言わんばかりの性能をしています。 これは運営の想定通りの動きなのでしょうか? この記事を書いてる最中にもハンデスを軸...