【Unity覚書】FPS視点の探索ゲームで、アイテムを拾う機能の実装

スポンサードリンク

こんにちは。ふぁんたです。

 

 

Unityでゲームを作ろうとしたときに、タイトルのような、アイテムを拾う機能を実装したいなと思いまして。

 

でも、標準アセットに入ってるFPSControllerにはアイテムに近づいて拾うなんてボタンの実装はないのです。

 

そこで、実装することを考えました。

 

以下、やってみた部分の覚書になります。

やったことの目次を貼ります。

 

 

ジャンプ機能、走る機能の削除

いらんかったので消しました。

やり方は、FPSControllerのPrefabをScene上に配置して、そのObjectのInspector欄(物理とか衝突判定とか入れるとこ)のRun Speedの値をWalk Speedと同じ5に、Jump Speedを0に、うるさいと困るのでJump SoundとLand Soundを消しました。

これで、飛びも走れもしない主人公が完成します。

カメラにRayを飛ばす機能を実装

FPSControllerの下に、FirstPersonCharacterっていうオブジェクトがひっついていると思います、ひっついていなかったらひっつけてください。

それがカメラの機能を果たすので、そこからRayを発射させます。

Rayっていうのは、プレイヤーには見えないレーザービームみたいなもので、好きな長さの光線を出して衝突判定を起こすことができます。

 

アイテムを作って、インスペクタからタグをつけます。タグの名前はItemにしました。

具体的には、どこからでも取り出せるbool値をグローバル変数的に宣言しておいて、updateで毎フレームRayを作り、マウスの位置から80cmの長さ発射して、当たった物体のタグにItemがついていたら、そのbool値をtrueに、そうでない場合は全部falseにするといったような内容です。

Rayと衝突したら何かを行うアイテム側の機能の実装

光線を受け取る側を考えます。

先程、取り出せるようにとpublicで宣言しておいたboolを取り出し、trueならログを出力するといったような実装をしました。

毎フレーム、bool値を持ってきてその結果によってログを吐いています。

 

これから

書いている途中に思ったんですけど、カメラから出ているRayで衝突判定の計算とかbool値をtrueにするとかやめて、その判定計算を全部アイテム側にやらせるようにすれば、このスクリプトを「使いたい全てのアイテム」に流用することができるんですね。

ちょっと頭の良くない実装でしたが、書いて晒すことで自戒にも覚書にもなるので残しておきます。

 

次の実装は、「どのアイテムを取ったかという変数をPlayer側にもたせる」とか、「拾ったアイテムは消す」とか、「この機能をVRでも使えるようにする」とかそういう事を考えています。

 

VRでRAYやってうまいこと衝突判定できるのか心配ですが…

スポンサードリンク