🔰

VRCのワールドを作ってみよう

2024/12/01に公開

こんにちはteam411のぬか喜びの庭です。

この記事は2024team411アドベントカレンダーの初日(2024/12/1)の記事です。
team411のアドベントカレンダーはこちらをご覧ください。

メタバースとは?

さて 皆さんはメタバースという言葉を聞いて何を思い浮かべますか?
そもそもメタバースという言葉に馴染みがない方もいらっしゃると思います。

メタバースとは英語で超越という意味の「meta」と宇宙という意味の「universe」を組み合わせた造語で、インターネット上に作られた仮想空間において交流やサービスを楽しむ場所です。

広義的な意味にはなりますが、Minecraftやfortniteもメタバースと言えます。MinecraftやFORTNITEはゲーム寄りのメタバースのためゲーム型メタバースとも呼ばれます。

もちろんゲーム型メタバースもメタバースの一種なのですが、(この言い方が良いかは置いといて)「ザ Metaverse」といいたくなるようなメタバースはSNS型メタバースです。

SNS型メタバースに分類されるメタバースで有名なものは「VRChat」や「Cluster」、「ZEPETO」あたりが有名ですね。私はVRChatとClusterでのワールド開発経験があります。

なおメタバースは最近注目度が上がっており、渋谷区公認のバーチャル渋谷(Cluster)だったり、イオンによるメタバースイオン(REV WORLDS)等の大企業によるメタバース空間の提供も増えてきました。

そんなメタバースですが、自分自身でワールドを作成することができます。 やったね!

VRCについて

さてそんなメタバースですが、今回はVRChatに焦点を当てていきます。VRChatは略称VRCです。本記事では以降VRChatのことをVRCと表記します。

ところでぽまえら、現実じゃできないケモミミ少女をモフモフしたり、自分自身がケモミミ少女になってモフモフされたり、仮想空間の中で夢の中の世界に入ったり、自分自身が操縦席に座って飛行機を操縦したりしてみたいかーーーー???

VRCならできるぞー!!

VRCはコミュニティ人口も非常に多く、ワールドも非常に多い最高のコミュニティだぜ。

VRCはPCまたはHMD(ヘッドマウントディスプレイの略、meta quest等)で起動できる。しかも無料!入れないなんて選択しないよね??

VRCにおけるコンテンツ作成

そんなVRCですが、自分で作成したコンテンツをアップロードできることが人気の理由の一つです。
アップロードできるコンテンツは次のものです。

  • アバター
  • ワールド

どちらもunityを用いてアップロードします。アップロード等の説明は後々行います。

アバターアップロード

VRCではアバターをアップロードできます。自作してもよし、boothで買ったアバターを改変してもよし。

もちろんVRC内のアバター展示ワールドでゲットできるサンプルや、無料アバターを利用してもいいですが、好みのアバターがあったらboothで買ってアップロードすることも一つの手です。

アバターはblenderとunityを用いて作成するのが一般的です。

ワールドアップロード

お待たせしました。ここからが本題です。
VRCではワールドをアップロードすることができます。
もちろん見た目重視のワールドを作成してもいいです。この場合blenderでモデリングしたものをunityで配置してアップロードするだけです。
しかし、それだけで終わってしまうのは甘えだ。
ワールドには何かしらギミックをつけたいですよね。インタラクティブなワールドを作成したいですよね。簡単なものだと、特定のボタンを押したらワープするとか、特定のボタンを押したら物が出てくるとかetc...

そんなときはUdonを使用しましょう!!!!(食べ物じゃないよ)

ワールド制作

Udonの話をしましたが、ワールド制作の手順を1から説明します。Udonは後回しです。ただし環境構築の詳しい方法は解説しません。

VRCのワールドはunityを通してアップロードします。つまりunityがないとお話になりません。
まずはunityをダウンロードしましょう。unityのバージョンですが、この記事を書いている2024/12/01時点でVRCが推奨しているunityのバージョンは2022.3.22f1なのでこのバージョンを推奨とします。

もちろんunityは素晴らしいゲームエンジンなのでこれだけで小規模なゲームを作ったり、多少の物理演算をしたりはできますが、unityのみをインストールしてもVRCとつなぐことができません。VRCとつなぐためにVRChat Creator Companion(略称VCC)をインストールする必要があります。以降VRChat Creator CompanionはVCCと表記します。

VCCをインストールし、unityと繋げたらプロジェクトを作成できるようになります。
では早速ワールドを作成していきましょう
右上のCreate New Projectを押してください。
以下のような画面になります。

さて今回ワールド制作です。一番左上のUnity 2022 World Projectを選択しましょう。
Project NameとProject Locationは任意の場所です。
選択が終わったら早速create projectをしてみましょう。
次のような画面が出てきます。

右上のOpenProjectを押すとunityが起動します。起動には時間がかかりますが待ちましょう。
起動したら次のような画面になります。

物は試しです。 ここに正方形を2つ出してみます。

さてこれで実際にDebugしてみましょう。

うーん無味乾燥したワールドですね。
実際これでも「メタバース」のワールドとして機能はしています。ただ面白くないだけです。
ここから面白いワールドにするためにギミックを追加していきます。VRCにおいてギミックを追加するためには 「Udon Node Graph」 というノードをつなげるタイプのプログラミングをするか、「Udon Sharp」 という言語を用いて記述するかどちらかが必要です。

今回はUdon Sharpを用いて記述していく方法を紹介します。
Udon Sharp 聞いたことないよって皆さん。 安心してください。中身はほぼC#です。ただリストが使えないとか二次元配列が使えないとか一部制約がある代わりにVRCAPIを利用できます。

では実際に記述してみましょう。まずUdon Sharpオブジェクトを作成します。

作るU#スクリプトはHelloWorldとしてみましょう。
作成すると下の画面のようになります。

C#スクリプトも同時に生成されました。我々が書くのはC#スクリプトのほうです。VCCが勝手にU#に変換してくれます。 やったね!
ここでC#とは?となる方がいるかと思います。Javaに似た言語でオブジェクト指向が使われています。

Hello World

ではボタンを押したらDebug用のLogにHello Worldを出力するプログラムを作ってみましょう。

HelloWorld
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class HelloWorld : UdonSharpBehaviour
{
    void Start()
    {
        
    }

    public override void Interact(){
        Debug.Log("Hello World");
    }
}

こちらを片方のオブジェクト 名前をButtonAとした正方形にアタッチしてみます。ButtonAは見やすくするために赤色に変更しておきました。

さて実際に動かしてみましょう。

先ほどと違って正方形にカーソルを当てると青く光り始めました。
実際に押してみましょう。

出ました「Hello World」の文字が。

基本はunityにおけるC#と同じです。unityを使ってきた方ならすぐになれると思います。

さてUdonSharpを使うとVRCAPIをいじれるといいました。実例を見せましょう。

今回はボタンを押したらワープするギミックを作ってみましょう。Warpという名前のUdonSharpScriptを作成してください。

Warp
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class Warp : UdonSharpBehaviour
{
    void Start()
    {
        
    }
    
    public override void Interact(){
        VRCPlayerApi player = Networking.LocalPlayer;//VRCPlayerAPIを利用して、ボタンを押したユーザーの情報をplayerという変数に入れる。
        Vector3 teleportPos = new Vector3(transform.position.x, transform.position.y , transform.position.z-5f); // 自身の位置にzが5引かれた位置をteleportPosに代入
        Quaternion teleportRot = transform.rotation; // 自身のquaternionをteleportRotに代入
        player.TeleportTo(teleportPos, teleportRot);//テレポートする。
    }
}

これを実際にもう片方の正方形にアタッチしてみましょう。ちょっと後ろの方向にワープさせられます。

VRCAPIを利用すれば、座らせたり、prefabを出現させたり、playerの名前をとってきたりetc...いろんなことができます。

ただU#は使用人口が少ないからか全然記事がありませ――――ん涙。

公式のリファレンスが比較的読みやすいのでにらめっこしましょう。

さてこんなものでteam411の初日のアドベントカレンダーは終了です。

team411ではプロジェクト以外にLabで勉強をすることが可能です。
team411Labの中でVRやメタバースを勉強する部門があります。
目標としてはIVRCというコンテストに作品を出すことです。
興味がある方はぜひteam411にお越しください。

明日はKanaruさんの個人的Gitテンプレート完全版(予定)です。明日もぜひご覧ください。

Discussion