Unityとは(VRコンテンツ開発をしたい人へのご紹介)

はじめに

Wikipediaを参照すると、Unityは以下のように説明されます。

Unity(Unity3D)は、Unity Technologies(日本法人はユニティ・テクノロジーズ・ジャパン株式会社)が開発・販売している、IDEを内蔵するゲームエンジンである。主にC#を用いたプログラミングでコンテンツの開発が可能である。PC(Windows、macOS)だけでなくモバイル(iOS、Android)やウェブブラウザ(WebGL)、家庭用ゲーム機(PlayStation 4、Xbox One、Nintendo Switch等)といったクロスプラットフォームに対応しており、VR/AR/MR機器向けのコンテンツ開発にも対応している。

正しいのですが、この説明で理解できるのはすでに開発経験がある方だと思います。
この説明を、Unityを触ったことがなくても、ある程度の解像度を以て理解するためにこの文章を書きました。
よかったら参考にしてくだされば幸いです。

また、VRコンテンツ開発においてもUnityは強力なツールとなります。
そちらに興味がある方もぜひ、参照していただけたら嬉しいです。

よろしくお願いします!

ゲームエンジンとは?

ゲームエンジンとは、ゲーム開発において必要な機能の多くを、簡易的に実装可能なアプリケーションです。
厳密には間違っているかもしれませんが、大まかにこのように理解していただいて大丈夫です。
ゲームエンジンとは説明されますが、他にも建築や産業、もちろんアニメーションや映画など、幅広い分野で用いられます。

一般に、ゲームはコンピュータ上で動作します。コンピュータ上で動作するゲームを制作するには、
コンピュータが理解できる形式で命令を渡さなければなりません。
この命令に相当するのが「プログラム」と呼ばれるものです。
これを書くことをプログラミングと言います。

命令の例を見てみましょう。

(画像出典 : https://gatten.me/supermariorun-jumptips )

有名なマリオのジャンプシーンです。
このシーンの中に存在するロジック(設定された命令)だけに着目してみましょう。
これを達成するために必要な命令は大まかに以下です。(なっがいので読み飛ばしていいです)

  • コントローラのインプットとマリオの動作の対応付
  • マリオの横向き移動が、加速度をもって行われるようにする設定
  • 砂埃が起こるタイミングの設定
  • マリオのジャンプの軌道の設定
  • マリオと地面がすり抜けないようにする設定
  • クリボーの動作の設定
  • クリボーと地面がすり抜けないようにする設定
  • クリボーとの接触検知
  • クリボーと接触する場合、接触の仕方による分岐の設定
  • 上方向からの接触であれば、クリボーを倒した処理
  • 上方向以外からの接触であれば、マリオが倒された処理
  • マリオの移動に合わせて、ステージが左に進行する設定
  • ステージが左に進行するよりも遅く、背景画像が左に移動する設定
  • etc.

ここで挙げたのはゲーム内の「ロジック」のみですが、他にもグラフィックスの作成、サウンドの設定など、
他にもたくさんのやるべきことがあるわけです。
ちょっと気後れしちゃいますね・・・

この大変な作業を簡略化するために、ゲームエンジンが活躍します。
ゲームエンジンのUnityをつかえば、上記の作業の大半はドラッグアンドドロップを繰り返すことで達成できます。
プログラミングなしにゲームの大部分を制作できるようになるわけですね。
ちなみに、VR開発においてもドラッグアンドドロップで達成できる部分は多く、VRで何かを見るためのコンテンツであれば、プログラミングなしでコンテンツを制作できます。
(参考文献 (1)

Unityでできることについて、もしかしたら以下の動画が参考になるかもです。

ただし、より自由度の高いロジックをコンピュータに伝えるためには、プログラミングが必要になります。
まずは大まかに、標準機能だけで達成可能な部分を概観し、その後プログラミングに手をだすのが良いと思います
(余談ですが、マリオのジャンプは完全な放物線じゃ無いらしいですよ!)

VRコンテンツ開発とUnity

VRコンテンツ開発において、ゲームエンジンは強力なパートナーです。Unityはマルチプラットフォーム対応(PS4, Switch, iPhoneなど、様々なデバイス上で動作するコンテンツを制作できる)のゲームエンジンであると説明をしましたが、対応するプラットフォームにVRデバイスも含まれています。つまり、UnityでVRコンテンツが開発できるというわけです。

VRコンテンツ制作は一般に以下のものから構成されると思います。

  1. グラフィックスの作成
  2. サウンドの設定
  3. ロジックの作成

1. グラフィックスの作成

VR空間は3DCGで構成されます。3DCGを作成するためには、基本的に専用のソフトウェアが必要です。
有名所だとblender, maya, cinema4dなどなど。UT-virtualではblenderを使う人が多いですね。
3DCGの作成は基本的にプログラムが必要ありませんので、絵を描くように、彫刻を彫るように3DCGが作成できます。
3DCGのテクスチャ(表面の絵柄の部分)も作成できますが、この作成にもまた別のツールを使うこともあります。

先程のマリオのワールドも、すべて3DCGによって構成されています。(VRっぽい写真↓)

(画像出典 : https://gigazine.net/news/20171123-mario-first-person-shooter/

ただ、VRコンテンツを作るには3DCG制作ツールから学ばなくてはいけない…という訳では無いです。
UnityではUnity Asset Storeというプラットフォームが展開されており、ここで多くの3DCGを得ることができます。
無料のものも多く、ほんとにいつもお世話になっております……という感じです。
ですので、Asset Storeでとりあえず3DCGを探し、得た3DCGをUnityの中で配置するだけで、VRワールドが完成します。
どうしても見てみたかった景色、一度VRで作ってみてしまうのはどうでしょうか?

Asset Storeで提供されているものにどうしても納得がいかないならば、潔くblenderを始めましょう!
既存の3DCGを少し調整できるだけでも、大変有効な場面が多々ありますよ。

2. サウンドの設定

VRコンテンツにおいてサウンドは無くてはならない存在です。環境音はユーザへ「自身がVRワールドにいる」という実感を増強し、そして一つ一つの効果音は、その効果音を発生させる行為への実感を形成します。

Quest2を始めとするVRデバイスは、主に視聴覚に特化したバーチャルリアリティ提示装置です。このデバイスを用いることで従来のコントローラでは難しかった身体的な表現方法やインタラクション方法が可能になります。しかし一方で、十分な触覚フィードバックが得られないことも多いです(ボタンを押したのに反力が返ってこない、テニスラケットも剣も振り心地が同じ、など)。触覚の制限を補うためにも、VRでは適切な「音」による実感の形成(ボタンを押したときの「カチッ」という音の再生、テニスラケットと剣で振るときに風の音のバリエーションをつけるなど)が非常に重要になりますね。

3. ロジックの作成

以上の2つの工程を以てすれば、とりあえずVR空間を構築することはできます。世界の創造ができます。
私は今でも覚えています。初めて電車の内装を作り上げ、その中にVRで飛び込んだ時のこと。
車窓から空を見上げ、暖かさすら覚える日の光を前に、静かな車内で「電車の中にいる」という実感を噛み締めていました。

しかし、作り上げたワールドは、完全に静止しています。
完全に静止した世界を前に、もしあなたが私と同じなら、こんなことを思うかもしれません。

 電車には動いてほしい
 どうせなら走り続けてほしい、永遠に
 車内から流れる景色が見たい
 走り続ける電車と同様に、終わらない景色を見ていたい
 窓の外には、電車と並走する忍者がいてほしい ← ???

これらのロジックを実装するのがプログラミングです。
UnityではC#というプログラミング言語を用いて、ロジックを実装することができます。
とんでもなく個人的な意見ですが、VRコンテンツ開発こそがプログラミングを一番楽しめる場所です。
やっているのはただのパラメータのやり取りですが、これが重力操作に変化したり、ビルを崩壊させたりと、
世界を再設定できるわけです。これがあまりにも楽しい。

ロジックの作成を積み上げることで、VRゲームの制作や、職業訓練用VRアプリの制作へと繋がります。
よければぜひ挑戦してみてください。

ちなみに以下に私が1年のときに作った、VRコンテンツ処女作の動画を貼っときます。

Unityの学習について

部内Scrapboxの「Unity独学者になるために」と題したページに詳しくは言及してありますが、いくつか抜粋して紹介しましょう。

Unityは学習教材が豊富です。日本語記事がたくさん出ており、
公式のサイトでもわかりやすい学習教材が無料で公開されています。
まずはUnityをダウンロードし、何か一つチュートリアルをやってみることをおすすめします。
(ぼくはLEGOのチュートリアルを取り組みました)

また、僕が常におすすめしているのがUnity Learnという公式の学習サイトです。
全編英語ではありますが、徹底した前提情報の共有や、マウスの一クリックごとにどの操作をするべきかを
画像付きで指示していたりと、とんでもなく親切なサイトです。しかも無料。すごい。
Unity初心者分科会では、このUnity Learnをみんなでやる会を、5月下旬から6月頭に予定しています。

最後に、ChatGPTに質問しまくりましょう。ChatGPTはプログラムの作成にとてつもなく強いです。
わからないプログラムがあれば、まずChatGPTに投げて、コードではなく文章で説明してもらいましょう。
自分が初心者であることを伝えればとてもわかり易く解説してくれます。
ただし、ChatGPTが説明に使う言葉は理解していなければなりません。
そのために、まずはUnityのチュートリアルから取り組み、ある程度の語彙を獲得した後に、
ガンガン質問するのがいいと思います。

ChatGPTでわからなくてもRintaroGPTが答えます!!!!!!いつでもどうぞ!!!

最後に

長くなりましたが、以上がざっとしたUnityの説明になります。
ちょっとでも内容が伝わったなら嬉しいし、実際にはじめてみたいとなったなら最高です。
わからないことは何でもいつでもサポートします。要望もいつでも投げてね!
ぜひあなたもUnity!!

文章: Rintaro