VRヘッドセット（HMD）持っていなくてもNeosVRプログラミング：3D豆腐をブン回す

この記事は[「NeosVR reso Advent Calendar 2020」](https://qiita.com/advent-calendar/2020/neosvr_reso)、および[「NeosVR Advent Calendar 2020」](https://adventar.org/calendars/5277)の4日目です

昨日は、@kazu0617 さんの[「Logixを用いた外部データの取得と活用（パンツパッチから）[HTTP GET String]」](https://qiita.com/kazu0617/items/665633f4c32827f49e32)、および @FLICK さんの [「波紋【基礎練習】」](https://qiita.com/FRICK/items/b4e1597f5218ae571a05)でした

---

NeosVRから現実世界に干渉し、生活や仕事をより良いものへと改変していくコミュニティ[「NeosVR reso」](https://neosvr.connpass.com/)のオーガナイザー、[piacere](https://twitter.com/piacere_ex)です
ご覧いただいて、ありがとうございます :bow:

NeosVRは、VRヘッドセット（HMD）を持っていないと、使ったり、プログラミングすることができないVRプラットフォームだと思われていますが、実は、HMD無しで、ばっちりプログラミングができます

それを体験していただけるような「3D豆腐をブン回す」までのプログラミングコラムを書いてみました

なお、コラム中で作った3D豆腐は、番組の後、みんなで美味しくいただきました（ウソです）:yum:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/63614c86-0d32-fd9e-0037-05be271b9f15.png)

# NeosVRにログインする

まず、NeosVRをプレイするには、[Steam](https://store.steampowered.com/about/)のインストールと、Steam内からのNeosVRのインストール、そして[NeosVRアカウント登録](https://account.neosvr.com/)を済ませておいてください

NeosVRを起動すると、下記のような画面が表示されます…真ん中に表示されているウインドウは、「ダッシュメニュー」と言います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/c328969c-a0b0-a65c-762f-fc555fb0fd43.png)

何もボタンを押さず、マウスをコロコロと移動させると、NeosVR内で自分の向いている方向が変えられるので、左右や上下を見回してみてください

このマウス移動で向きを変えると、画面上下左右中央の赤いポチも移動し、コレがボタン等に重なるとフォーカス状態になるので、そこでマウスの左クリックをすると、ボタン押下やテキスト入力選択ができます（以降、このフォーカスして左クリックすることを「クリック」と略します）

ダッシュメニュー左上の「匿名」と書かれた左下にある「ログイン」に赤ポチを重ねて、クリックすると、下記ログイン画面が表示されるので、先ほど登録したNeosVRアカウントのユーザ名／パスワードをキーボードで入力し、「記憶する」チェックをクリックし、「ログイン」ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/0763c138-5af0-a005-9b37-3af8e1650091.png)

すると、ログインが行われ、ダッシュメニュー左上にあった「匿名」が、ユーザ名に変わったり、その配下のユーザ情報が更新されます（一緒に背景も変わりますが、コレは人によりけりなので、下記と同じ背景にならないことはあります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/0f6b3a81-4f4f-7e31-df25-8d25924bbce0.png)

# ログイン直後の自分の姿を鏡で見る

ダッシュメニュー下側の「ホーム」を先ほどまで見ていましたが、3つ右にある「インベントリ」をクリックすると、「Essential Tools」と「Neos Essentials」の2つが出てくるので、「Neos Essentials」をダブルクリックし、更に「Mirror」をダブルクリックすると下記画面になるので、右から3つ目のアイコン「Local Mirror」をダブルクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/86755c84-de3c-2b33-1711-aacd63081895.png)

すると、ダッシュメニューの手前に、下記のような黒い板が出てきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/c4a25f02-f23d-f4d7-a1a3-f66235ffee2a.png)

この黒い板の下側に「Mirror (Local)」と書かれた場所があるので、コレをクリックすると、ログイン直後の自分の姿を鏡で見ることができます（ココで見えているHMDと手しか無い状態がアバター設定前の自分の姿です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/91291736-3646-5131-c7c2-3fba516e34a0.png)

なお、下側に「Mirror (Local)」が見えない場合は、鏡が裏返っているので、黒い板を右ドラッグしながら、Ctrlキーを押しっぱなしでマウスホイールを回して、鏡を表まで回転させてください

# 音声の設定をする

ダッシュメニュー下側の「設定」をクリックすると、様々な設定をする画面が出るので、右側にある「音声入力デバイスを選択」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/c484e33b-3bcf-aa90-4349-a43f0f4b3f66.png)

すると、音声入力デバイス選択と、マイクのテストが出てくるので、コレでマイクが音声を拾えるよう調整してください（今回は、マイクで会話しませんが、今後、NeosVR初心者案内デー等のイベントに参加したり、他プレイヤーとお喋りするときに、ここの設定が重要になります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/13b52f10-73ad-2742-ee6b-f016cba8ed47.png)

# ローカルPCの画像をロードする

ダッシュメニュー下側の「ファイルブラウザ」をクリックすると、ナント、あなたのローカルPCの中身が、NeosVR上で見れてしまいます … フォルダ移動して、適当なpng等の画像ファイルをダブルクリックしてみると、「画像インポーター」でどの画像フォーマットでインポートするか聞かれるので、「イメージ／テクスチャ」をクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f12a5fdb-8c50-dfb9-f720-0ed2b5af285b.png)

すると、NeosVR内に、画像ファイルが取り込まれます … NeosVRが、タダVRで遊ぶだけのVRプラットフォームでは無い感じが、ジワジワと伝わってきたのでは無いでしょうか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/195f5520-c188-8010-b970-57c96d234fd6.png)

# 「DevToolTip」…VR内オブジェクトを作るツール

それでは、NeosVRプログラミングを行う上で大事なツールを2つご紹介します

1つ目は「DevToolTip」と呼ばれる、VR内オブジェクトを作ったり、変更するツールで、これはインベントリの「Essential Tools」配下にあるため、「(back)」を2回行い、「Essential Tools」に入り、右下から3番目のアイコン「DevToolTip」をダブルクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/b85de4e5-b01a-b96a-8260-d45f73c8647f.png)

すると、DevToolTipがNeosVR内にロードされます … 使い方は、後ほど説明するので、いったん放置しておいてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/87f021fa-3b5e-21a3-bf2f-bd670193c01b.png)

# 「LogiXTip」…VR内プログラミングをするツール

2つ目は「LogiXTip」と呼ばれる、VR内プログラミングをするツールで、これはHMD向けのものはDevToolTipと同じ階層にありますが、HMD無し向けのものは、「Essential Tools」-「Community Tools」-「DesktopUtils」-「Tools」配下の右から2番目のアイコン「LogiXTip v5.0」をダブルクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/bb25c68e-338e-4d0c-a34d-d26180fb7a1e.png)

すると、LogiXTip v5.0がNeosVR内にロードされます … 使い方は、後ほど説明します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/72e98d9b-faa7-9631-dc8d-ec02dcb49209.png)

# DevToolTipで3D豆腐を作る

まずはDevToolTipで、3D豆腐を作ってみますが、ダッシュメニューは邪魔になるので、Ctrl+Spaceキーで非表示にしてください（再度、Ctrl+Spaceキーを押せば表示されます）

DevToolTipにフォーカスしている状態で、右ダブルクリックするとDevToolTipを装備をすることができ、この状態で「C」キーを押すと、「New」が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/a24bb470-de29-4c2d-922b-8c57f771faa1.png)

「3Dモデル」をクリックすると、下記表示になるので、「ボックス」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/582b0700-6b33-cb52-cbbf-99a8e2cb39ce.png)

すると、緑の線が目の前に出てきますが、コレは、3D豆腐の内部に入っている状態です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/ec48c1df-b97c-2795-eb1c-b8dc8eed9663.png)

「S」キーを押し続け、後ろに移動すると、目の前に3D豆腐が見えてきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/bf2ab327-84e7-8804-2424-eded18c59275.png)

3D豆腐を右ドラッグしながら、Ctrlキーを押しっぱなしでマウスホイールを回すと、3D豆腐を横回転でき、Altキーを押しっぱなしでマウスホイールを回すと、3D豆腐を縦回転できるので、手動でクルクル回してみてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/4f084f72-69ac-f692-e9e6-2568da6c39eb.png)

# 「インスペクタ」で3D豆腐の内部情報を出す

3D豆腐を右ドラッグしながら、「i」キーを押すと、3D豆腐の「インスペクタ」が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/5ced43e5-d10f-52e6-78c0-e19925f2438b.png)

インスペクタ左上の「●Box」の文字部分をダブルクリックすると、インスペクタ右側に、3D豆腐の内部情報が表示されます（ここの扱い方は、別コラムで今度ご紹介します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/76875404-abd4-b0dc-3afd-eccbe61f1296.png)

この後、このインスペクタをLogiXTipで使います

# LogiXTipではじめてのNeosVRプログラミング

では、いよいよ、NeosVRプログラミングです

まずは、何も無いところで右ダブルクリックで、DevToolTipの装備を外し、LogiXTip v5.0を右ダブルクリックで装備し、「c」キーを押すと、「LogiX Nodes」が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/58dd9a05-bd2b-91bc-b7e1-b4e27e6f218b.png)

「LogiX Nodes」の「Input」をダブルクリックすると、下記画面になるので、「T」をダブルクリックします … すると、「Pack in-place」と書かれた文字の上が、「T」に変化します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/68e01049-5819-cec2-4dc8-d4bc3b3b1107.png)

この状態で、何も無いところでダブルクリックすると、「T」の板が出現します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/d5588b9b-921c-dee0-d123-b91e8126467a.png)

このT板の右にある水色からドラッグすると、水色の線が伸びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/a6dc43b0-d300-7735-1b85-3dcf86e71103.png)

伸ばした後、マウスホイールをクリックすると、数字がパカパカ変わる板が出てきますが、コレは、NeosVRで経過した時間、つまりタイマーを表示しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/84c8ea5f-174c-00c3-7d96-b6076cd3d209.png)

このようにLogiXでは、板の右から水色の線を出して、その板の持つ情報を引き出したり、板同士を連結させることができます

# タイマーをsinに繋げて±1の間を繰り返させる

それでは今度は、板同士の連結をやってみましょう

「LogiX Nodes」を「(back)」で戻り、「Math」をダブルクリックし、左ドラッグで下にスクロールさせると、下記画面になるので、「sin」をダブルクリックし、何も無いところでダブルクリックすると、「Sin」の板が出現します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/557ae9b8-e014-19aa-41b2-220b1b0f3365.png)

T板の右の水色からドラッグで引っ張り出し、Sin板の左の水色でドラッグを離すと、板同士が連結します

更に、Sin板の右の水色からドラッグで引っ張り出し、マウスホイールクリックすると、タイマーをsinで処理した結果の板が出てきて、±1の範囲の数値がパカパカ変化します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/4b4c155a-9991-2976-7e24-d23cffb6f4c0.png)

NeosVRでのプログラミングは、こんな感じで、板を繋いで、データ変換や判定をしていきます

# タイマー+sinで3D豆腐をグルグル回す

「LogiX Nodes」を「(back)」で戻り、「Operators」をダブルクリックし、左ドラッグで下にスクロールさせると、下記画面になるので、「Pack xyz」をダブルクリックし、何も無いところでダブルクリックすると、「Pack xyz」の板が出現するので、その左に3つある水色全てにSin板の右の水色からドラッグで連結します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/8641c640-a8cc-3587-fc55-326cdb8e0469.png)

Pack xyz板は、左の上から、x／y／zの各座標を意味していて、Pack xyzは、この3つの座標を束ねる動きをする板です

次に、3D豆腐のインスペクタ左上の「●Box」の文字部分を、「L」キーを押しながらクリックすると、下図のようなカラフルな帯（「スロット」と呼びます）が出現しますが、コレは、3D豆腐の情報を操作するためのものです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/bc848538-151d-39c9-6faa-c69aab180fe0.png)

このスロットの「Position」に向けて、Pack xyz板の右の水色からドラッグし、Positionの上でドラッグを離します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/2fd26d0b-bdfb-d139-ab22-d8c83d69810a.png)

すると、Pack xyz板とスロットのPositionが連結します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/1404b0a9-0918-3511-80c6-bc84b44a8474.png)

同時に、3D豆腐が、xyz軸を斜めにユラユラと勝手に移動するようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/ce501ec7-a0b2-365d-1263-66ed05baa223.png)

これは、Pack xyzのx／y／zの各座標に、タイマー連動して±1の範囲で変化するSinの値が連携され、NeosVRのx／y／z座標の-1～+1の間を3D豆腐が行ったり来たりする挙動となっています

このような感じで、NeosVRでは、VR内オブジェクト情報をプログラムで変化させることができ、これはPositionだけで無く、オブジェクトの大きさや回転、色といったものにも適用できますし、sinで-1～+1の間を巡回する以外のもっと複雑な動きをプログラミングすることが出来ます

# ここまでの手順はHMDでも出来る？

もちろん、できます

マウス移動はHMDの向き、つまり顔の向きと同じように動き、クリックや右クリック、それらのドラッグ等は、ハンドコントローラで再現できます

そのため、HMD無しの状態で、上記のようなNeosVRプログラミングを覚えても、HMDで応用が効きます

ちなみに私は、HMD無しの状態で、1ヶ月半ほど、このNeosVRプログラミングに慣れ親しんだ後、HMDを入手しましたが、特に違和感無く、HMD有のNeosVRプログラミングへとスイッチできました

# ここまでの操作のおさらい＋α

上記で解説したHMD無しの操作は、[「NeosVR日本語Wiki」](https://neosvrjp.memo.wiki/)の下記URLに「デスクトップモード」として操作一覧がまとめられています
https://neosvrjp.memo.wiki/d/%a5%ac%a5%a4%a5%c9#content_1_2

以前、[NeosVR reso](https://neosvr.connpass.com/)で開催したイベント[「VRヘッドセットが無い方／使わない方限定のNeosVRプログラミング入門」](https://neosvr.connpass.com/event/196608/)では、この一覧を元に、今回コラムの目次と似たような構成／時間割で、下記4レベルに分けて、NeosVR内でのHMD無しプログラミング解説に利用させていただきました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f685f761-bb1f-14c6-a21e-8e04536a3f88.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/7bff7048-8397-1ec7-bc65-677cdbf91b50.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/cea6e1b6-6439-f0d3-c494-bd468d2a7b79.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/b482e284-c395-4a4d-8ebe-726500960a8c.png)

[「VRヘッドセットが無い方／使わない方限定のNeosVRプログラミング入門」](https://neosvr.connpass.com/event/196608/)開催時の様子は、こんな感じで、NeosVRでワイワイ楽しみながら、今回コラムと同じようなプログラミング実習をしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/ba64bd64-06eb-4ba6-3b27-648b748ba549.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/9493642d-575a-d5d6-99ad-66a262761374.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/102d8a3b-1cb6-45ad-bb49-9ea44a92da4b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/4c6de968-5a8a-5cbb-8670-3aeb4e544bb6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f1c0a2ea-136e-2e10-fc44-6327178b333e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/b41b1d2a-be97-7662-c2c0-f82f47982287.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/a7ec2995-8cd9-9228-c1bd-0089c34970d9.png)

# 最後に

このコラムを読んで、VRヘッドセット（HDM）を持っていなくても、NeosVRプログラミングができることを知っていただき、今後、伸びていくであろうVRプログラミングの世界観に触れてみたいという方が1人でも増えたら幸いです:laughing:

あと、NeosVRを始めたばかりの方でも、下記URLからお気軽にNeosVR reso Advent Calendarにご参加ください💁

https://qiita.com/advent-calendar/2020/neosvr_reso
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/8877faae-995b-b28b-77c8-3afa0025eda7.png)](https://qiita.com/advent-calendar/2020/neosvr_reso)

# p.s.このコラムが、面白かったり、役に立ったら…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/67568d54-6584-ad33-77c7-b3b3afe70287.png) や ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f5b819ef-d655-ef72-294c-b1a9d2c5b563.png) にて、どうぞ応援よろしくお願いします:bow:

---

明日の記事は、@kmizuno0211 さんの[「NeosVRと5Gがもたらす未来の音楽の希望『Revolution No.10』」](https://note.com/kmizuno0211/n/n3edd5e70798f)および @rhenium_vrc さんの[「お気に入りComponentを紹介する」](https://qiita.com/rhenium_vrc/items/aa271c844acf291ae711) です