Godotでホラーゲーム開発チュートリアル Part 2: Raycast3Dを使ったアイテムの取得機能
Godot Engine バージョン4.3
このパートでは、プレイヤーがゲーム内でアイテムを拾えるように、Raycast3D を実装します。
アイテムに近づき、照準を合わせてアクションボタンを押すことで、拾える仕組みを作ります。ホラーゲームにおいて、アイテムの収集はプレイヤーの没入感を高める重要な要素です。
ステップ1: Raycast3Dのセットアップ
プレイヤーシーンにRaycast3Dを追加
Player
シーンを開きます。
- プレイヤーノードの
Head
の子ノードのとしてRaycast3D
を追加します。
- 前回作成した
PlayerUI
にTextureRect
とLabel
を追加します。
TextureRect
の名前をPointer
に変更して、丸い点の画像を設定して画面の中央に設定します。これが一人称で画面にある丸い点の役割になります。
Label
の名前をPointerLabel
に変更します。これは丸い点がアイテムに触れた時に丸い点を非表示にして「拾う」をいう文字を表示するためにラベルになります。こちらも中央の位置に設定します。
構成は下記のようになります。
Raycast3Dの設定
Target Position
のz
を-1.5
に設定します(この距離内でアイテムを検知可能)。
- Collision Mask を調整し、アイテムだけを検知するようにします。アイテム専用のレイヤー(例: レイヤー3)を使用しましょう。
ステップ2: アイテムスクリプトの準備
アイテム用のスクリプトを作成
object.gd
というスクリプトを作成し、以下のコードを記述します:extends Nodeclass_name Interactable
# Enum(列挙型)を定義。Interactable オブジェクトのタイプを区別するために使用。# 例えば、Item(アイテム)など。enum ObjectType { Item }
# オブジェクトのタイプを設定するための変数。デフォルトでエクスポートされ、インスペクタで編集可能。@export var object_type:ObjectType
今回はシンプルですが、これからいろんな要素を増やせるような状態です。
ステップ3: プレイヤーがアイテムを拾う処理を追加
Playerスクリプトを修正
Raycast3D
にスクリプトを追加して以下のコードを追加します。
extends RayCast3D
# プレイヤーが拾おうとしているアイテムを保持する変数var pickup_item
# 毎フレーム呼び出される関数func _process(delta): # RayCast3Dが何かに衝突している場合の処理 if is_colliding(): # 衝突したオブジェクトを取得 var detected = get_collider() # 衝突したオブジェクトがInteractableの場合 if detected is Interactable: # オブジェクトタイプがアイテムの場合 if detected.object_type == detected.ObjectType.Item: # アイテムを拾える状態に設定 pickup_item = detected %PointerLabel.text = "拾う" # ポインタラベルに「拾う」を表示 %Pointer.hide() # ポインタ(カーソル)を非表示 else: # Interactableではない場合、表示をリセット %PointerLabel.text = "" %Pointer.show() # ポインタ(カーソル)を表示 pickup_item = null # 拾うアイテムをリセット else: # 衝突がない場合、表示をリセット %PointerLabel.text = "" %Pointer.show() # ポインタ(カーソル)を表示 pickup_item = null # 拾うアイテムをリセット
# アイテムが拾える状態で、かつ「pickup」アクションが押された場合 if pickup_item && Input.is_action_just_pressed("pickup"): match pickup_item.object_type: # アイテムタイプの場合の処理 pickup_item.ObjectType.Item: pickup_item.queue_free() # アイテムを削除(拾う動作) pickup_item = null # アイテムをリセット %SoundEffect.play() # 効果音を再生 get_node("../..").picked_item.emit() # 親ノードにシグナルを送信
新しいアクション「pickup」を設定
Godotエディタのメインメニューから「Project > Project Settings > Input Map」を開きます。
「pickup」というアクションを追加し、キーやボタン(例:
E
キー)を割り当てます。
ステップ4: テスト
プレイヤーをアイテムの近くに移動させ、照準を合わせた状態で指定のボタンを押します。
これで、プレイヤーがアイテムを拾えるようになりました!次のパートでは、インベントリシステムやアイテムの詳細表示を追加する方法について説明します。
1
100%