2021/03/19 VR・XVL
前回、弊社が開発中のVRコンテンツとその開発の進め方についてご紹介させていただきました。
今回からその中での事例や弊社がどの様に対応したかを、2回にわたって具体的に紹介していきたいと思います。
以下の図は進めるなかで苦労した部分やポイントとなる部分をステップ順にピックアップしたものです。
各ステップの内容について順番にご紹介していきます。
①モデルの変換
今回のテーマがEVバイクで走行することをテーマとしていたため、そもそものEVバイクの3Dモデルが必要でした。
EVバイクのモデルに関しては3DCADのデータがあり、そちらを利用することを考えておりましたがUnityに3D CADデータをインポートする際には、多くの場合データ形式の変換が必要となります。
今回は弊社内のシステムを用いることでobj形式やfbx形式に変換することにより、Unityにインポートすることができました。
CADデータをインポートする際は変換の手段を事前に検討する必要があります。
②モデルの配置
一般的なゲームなどでは当たり前ですが、2Dでも3Dでも壁に当たったらキャラクターが止まってくれます。
キャラクターがなぜ止まれるかというと、実は接触したかどうかの判定をプログラムが行っているからです。
これを当たり判定と呼びます。
そのため、3Dモデルをただ配置しただけでは床をすりぬてしまいますし、壁に当たってもそのまますり抜けてしまいます。
Unityではその当たり判定をするために、コライダーと呼ばれる接触センサーのようなものを設定します。
コライダーがあることにより、コライダー同士が接触したことを認識できるようになり、いろいろなものにぶつかる様になります。
設定自体はとても簡単なのですが、意外にもここで苦労する方は多いんじゃないかと思います。
というのもコライダー同士が食い込み気味になった状態で配置していると、ものすごい勢いでモデルが飛んでいってしまうことがあります。
弊社が開発を進める中でも、3Dモデルが飛んだり回ったりしておりましたが、位置や重さをうまく調整することで落ち着きました。
Unityではゲーム内に配置するオブジェクトを総じてゲームオブジェクトと呼び、コライダーの様にゲームオブジェクトに紐づけて利用するプログラムをコンポーネントと呼びます。
③プログラミング(オブジェクトのコントロール)
モデルが配置出来たら、C#言語を用いたプログラムによりゲームオブジェクトを制御していきます。
UnityではMonoBehaviour(モノビヘイビア)というクラスで定義された関数を用いることで様々な処理を実行していきます。
Unity上でゲームオブジェクトを動かすためには、単純に座標を変更していく方法と、物理的な移動を発生させる方法があります。
弊社では物理的な移動を発生させる方法を採用し、MonoBehaviourで定義された、addForceと呼ばれる関数を用いてEVバイクを動かしています。
addForceを使ってゲームオブジェクトを動かすにはRigidbodyと呼ばれるコンポーネントを付与する必要があります。
Rigidbodyはゲームオブジェクトに物質としての重さやゲームオブジェクトが受ける空気抵抗の強さなどを設定できるコンポーネントです。
Rigidbodyでの設定値とaddForceで与える力の強さ等によりリアルな加減速の具合を表現できます。
弊社の中でもまだ使いこなせているわけではなく、まずは動かしてみて、それっぽい動きになる様に数値を調整していきました。
最初のうちは全く動かなかったり、いきなり天文学的な速度を記録したりと調整にとても苦労しました。
UnityではaddForceの様にゲームオブジェクトを制御するためのC#プログラムのことをスクリプトと呼びます。
以上、今回は①~③までご紹介させていただきました。④以降は次回でご紹介させていただきます。
第3回記事はこちらから閲覧できます。
弊社では3Dスキャンやリバースエンジニアリングといったサービスも行っております。
現在この様な技術とVR技術を掛け合わせたサービスも検討しております。
何かお悩みをお持ちでしたら、お気軽にご相談ください。