原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】流体ポータルシステム と 非ユークリッドトンネル

 

f:id:Karvan:20200525002153g:plain

 

猿か

成功体験に味を占めたのか毎日のように扇動的なハッシュタグがTwitterのトレンド入りしてくることにウンザリしている皆さんこんにちは。よっぽど「~に抗議ます」って言葉が好きなんでしょうね。無駄に吠える猿。

 

さて、まるで数学の問題のようなタイトルですが、これは最近購入したUnityアセットの名前です。Google先生に日本語訳をお願いするとこんな感じの名前になる。

"Fluid Portals System & Non-euclidian Tunnels"

assetstore.unity.com

 "Portal"とついていることから察しの言い方は気づくかもしれませんが、これはPortalシステムを簡単に導入できるアセットで、今回はこのアセットについて紹介したいと思います。

 

Portal的システム

特に説明する必要もないぐらい「Portal」というギミックは同名のゲームの存在で有名かと思いますが、その仕様を一言で説明すると「どこでもドア」的なもの、と言えます。

「Portal」は二つの空間を繋ぐゲートとなり、Portal越しに互いの世界を覗き見ることができるし、Portalをくぐり抜けることで両空間を行き来することができるシステムです。

 

この「Portal」をUnityで実現する手法については色々なブログで取り上げられていますが、大抵は同じ手法で説明されています。

曰く、Portal的システムを構築するには以下の3つの処理が必要らしい。

 

  1. 相手側の世界を表示する
  2. こちら側の視点と相手側の視点を連動させて動かす
  3. 相手側の世界へ移動させる

 

例えばAとBの二つの空間があったとして、AのエリアにPlayerがいるとします。そして、Player側の映像はMainCameraで撮影されているとします。

一方、BのエリアにもCameraを設置します。しかし、こちらの映像はゲーム画面に直接映すのではなくA側のPortalに設定されているRenderTextureに表示させます。

f:id:Karvan:20200526215508p:plain二つのCameraは連動しておりPlayerに合わせてMainCamraが動くと、BエリアのCameraも同じように動きます。

MainCameraが上を向くとBエリアのCameraも上を向き、Playerが前後左右に移動するとそれに合わせてどちらのCameraも動きます。

 

そして、PlayerがPortalに接触(Collider内に侵入)するとPlayerをMainCamraと共にBエリアのPortal位置へ移動させます。

f:id:Karvan:20200526215615p:plain

この時、B側のCameraは無効化され、逆にA側にMainCameraと連動したCameraが設置されます。

 

手法だけ聞くと簡単そうに思えますが、いざ実装しようとすると意外と面倒くさいです。

 というのも、カメラの動きを連動させるにも互いのPortalの向き(方向)を考慮しないといけないし、Playerを相手世界へ移動させるにも違和感のないスムーズな移動をさせるにはPortalに対する進入角度と退出角度を合わせる必要がでてきます。

そこで今回紹介するアセット「Fluid Portals System & Non-euclidian Tunnels」の登場です。

 

Fluid Portals System & Non-euclidian Tunnels

前置きを長々と説明しましたが、それもこのアセットではセットアップ等の作業が殆どいらずに済む為、特に書くことがないからです。

 Fluid Portals Systemを使ってPortalシステムを実現する手順は以下の3つ

 

1.Prefabs配下にある「portals_back_and_forth」をシーン内に配置

f:id:Karvan:20200526220004p:plain

 

2.子オブジェクトのportal_one, portal_twoを双方向で移動させたい位置に置く

f:id:Karvan:20200526220037p:plain

 

3.Prefabs配下の「Player(dg_simpleFirstPersonController)」をシーンに配置

 

以上になります。各Prefabをシーンに配置するだけ。もし、導入するシーンにCameraが既に設置されている場合は3.の工程は不要です。その代わり

  • Cameraに"MainCamera"のtagを設定する
  • Portalで移動させるPlayerのオブジェクトに"Player"のtagを設定する

上記二つの設定を行う必要があります。

また、CameraはPlayerオブジェクトの子オブジェクトであることが望ましいみたいです。(そうでないとPortal移動時に変な回転が起きる)

 

前置きの中で説明したMainCameraと連動させるCamera等はゲームPlay時に自動的に生成される為、こちら側での設定は不要です。

ただ、Portalを同じシーン内に複数個設置する場合はPortalSetupコンポーネントのGroupID欄にIDを設定する必要があります

f:id:Karvan:20200526220354p:plain

 

試しにA,Bの部屋を作ってそれぞれにPortalを設定しました。

f:id:Karvan:20200526220427p:plain

オレンジの部屋(Room-A)にある青いポールはPlayerです。

 

この状態で動かしてみるとこんな感じ、奇麗にPortalシステムが実現されていることが分かります。

f:id:Karvan:20200525002318g:plain

 

実はこのアセットの導入から上の動画を撮るまで一時間もかかっていません。

ドキュメントが全て英語で簡単な説明しかない、かつ設定手順はYoutubeを見ないけない、と不親切な点もありますが、先程も紹介したように殆ど設定不要で導入できるし、何よりPortal間の移動、表示がスムーズで違和感のないPortalシステムを作ることができます。

 

製作中のゲームでPortalシステムを使う事を考えている方はこのアセットの導入を検討されてはどうでしょうか。

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。