【Unity個人ゲーム制作】ゲーム内で動くPCのようなものを作ったら3週間もかかった
軽い気持ちで考えていたゲーム内PC画面
Unityにはデフォルト機能として「カーソルを出してクリックするとイベントを実行できる」というものがあります。
そのあたりを使っていけばまあなんとか実装できるだろうと思っていました。
しかしふたを開けてみると、デフォルトで出せるカーソルには【範囲の制限】ができませんでした。
どういうことかというと、「ゲーム内のPC画面の上だけ」にカーソルが表示されるようにしたかったのですが、それがデフォルトのカーソルだと出来ないんです。
ゲーム内の主人公がPC画面を操作しているわけなので、上の画像のアングルでPC画面を操作させたいと考えました。
私たちもPCを操作するとき、当たり前ですがPC以外の部分も視界に入っていますよね。
没入感が欲しいと思い、ゲーム画面も同じように作りたいと考えていました。
そこで必要になってくるのが、カーソルの範囲制限です。
PC以外の場所も画面にうつっているわけですから、PC画面以外の場所にカーソルが出ないようしなくてはいけません。
しかし、Unityの標準機能のカーソルではそれが出来ないのです(出来ないよね…?)
【ここからここまでの範囲の中でカーソルは動いてね~】が出来ず、しばらくGoogle先生で対応法を模索していたのですが、いい解決法がなく、結局自作することになりました。
(没入感が欲しくて、ゲーム画面すべてをPC画面にするということをしたくなかった。もし画面にPC画面しかうつっていないのであれば、カーソルの範囲制限は必要なかった)
そして出来上がったのがこれ。
画面端まで来たらちゃんとそれ以上は行かないように実装できました。
Unityのデフォルトのカーソル機能は使わずに、疑似的なカーソルを表示させ、PC画面のオブジェクトの表面を這うように動くようにし、なおかつ範囲も制限するといった感じの実装でした。
疑似的カーソルを表示させるために、Windowsに搭載されているカーソルの画像を引っ張ってきてるのですが、これっていけないこと…?
デフォルト機能のカーソルじゃないので、クリックイベントも自作
はい、これも時間がかかった要因です。
疑似的に作成したカーソルなので、標準機能のクリックイベントが動きません。
(正確に言うと動くが、クリック位置がカーソルからずれる。なぜかずれる。どうしてかずれる。そして治せなかった)
ということでクリックイベントも自作しました。
カーソルをボタンUIに置いたとき、UIから離れたときのホバーエフェクトなんかも必要でした。
なんやかんやで出来たPC画面
壁紙とウィンドウカラーを変えられるだけしか機能は作れていませんが、基本的な土台は作れたと思います。
タスクバーやドラッグでウィンドウを移動できる機能などはないですが、とりあえずはいいかなぁと思っています。
UIのアイコンやデスクトップ背景などはStable Diffusionで生成しています。
AIでゲーム素材を作れるなんて、本当にいい時代になりましたね。
次は主人公の持つスマホで写真を撮れる機能を追加したいと考えています。