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

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

【Unity】3Dオブジェクトの上にuGUIを表示させる

寒の戻り

講談社が主催しているゲームクリエイター向けのDiscordに参加したけれど会話についていけずにただ眺めているだけの皆さんこんにちは。とりあえず自己紹介と作品紹介は頑張って投稿しました、反応はあまりないけど。

ただ、Discordに投稿された記事を眺めていると「こんなにもゲーム作りに情熱を注いでいる人がいるんだ」と層の厚さに驚くばかりで、交わされている会話内容も技術的な物から広報プラン的な内容まで多岐に渡っていて勉強になります。

私的にはちょっと腑抜けた状態というか、毎回unity1weekに参加する時には作品を制作→投稿するだけでなく、ブログで制作期間中の振り返り記事や作品の中で使用したアセットや技術的手法についての記事を書くまでを一区切りと考えているので、その作業全てが終わってしまった現在は「寒の戻り」とでもいうか、ゲーム制作熱がちょっとした小康状態となっているので、これからまた心を燃やしてモチベーションを上げていきたいと思います。

 

オリジナリティ

そのDiscordで気になった話題があって、それは「制作中のゲームの画面デザインが某有名ゲームに類似している事についてパブリッシャー等々から指摘されることが多い、どうしたら良いか」という相談、寄せられた意見としては「某有名ゲームのフォロワー(に見える)的作品は数多いから変えたほうが良い」というものが多かったのですが、私的には「それで製作者の個性が表現されるのであればそのままで良い」と考えます。

某ゲームに似てるからといってデザインを変えたところで、結局何かしらのゲームと類似点を指摘されるのは避けられないし、何より「真似してやろう」と思って作っているわけでもないのだから、似ているからと言って作品の中に製作者のオリジナリティが無いとか、否定されるべきとか、という批判は的外れで考慮する問題ではない、と思うからです。

製作者が「これが自分のゲームです」と胸を張って言えるのなら、既存のゲームに似てる似てないといった問題を考慮し過ぎる必要はないと思います。

(それでソフトの売上が上がるとかは別問題だけど)

 

一人称視点

現在、一人称視点で移動する3Dの脱出ゲームを作っています。

3Dゲームなのでドアや棚などのオブジェクトは3Dのゲーム空間内に配置されるのですが、プレイヤーに視点の先にあるドアノブをクリックしてドアを開ける、といった動作をさせたい場合、ドアノブ近辺に「ここら辺をクリックしてね」的なアイコンを表示させてクリックを促します。

f:id:Karvan:20210323210526g:plain

 

この処理を単純に考えると、プレイヤー側の視界となるCollider内にドアノブに設置したColliderが入ってきた時にドアノブのColliderの位置にアイコンを表示させれば良いとなりますが、そのまま素直に3D空間内にSprite等のアイコンを表示させると

  • アイコンがカメラの方を向いていない(歪んで表示される)
  • アイコンの大きさが一定でない(離れると小さく見えずらい)

といった問題が発生します。

この為、制作中のゲームでは3Dオブジェクトが映っているスクリーン位置にuGUIのImageを表示する、といった処理を行っています。

 

Camera.WorldToScreenPoint

CameraコンポーネントのWorldToScreenPointメソッドはワールド空間のpositionをスクリーン空間座標に変換することができます。
スクリーン空間座標は画面の左下端を(0,0)として右上端は(pixelWidth -1,pixelHeight -1)となる座標です。

 

試しにクリックした先の3Dオブジェクトの上にTextMeshを移動させる処理を作ってみます。

クリックしたオブジェクトの位置(position)はRayCastを使って取得できるので、その位置をWorldToScreenPointでスクリーン空間座標に変換してその位置へTextMesh(下のソースのIconObj)を移動させます。

 

f:id:Karvan:20210323210719p:plain

上のソースを実際に動かしてみると

f:id:Karvan:20210323210810g:plain

うまい具合にオブジェクトの位置へ移動させることができました。

 

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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