Godotでホラーゲーム開発チュートリアル Part 2: Raycast3Dを使ったアイテムの取得機能


Godot Engine バージョン4.3

このパートでは、プレイヤーがゲーム内でアイテムを拾えるように、Raycast3D を実装します。 アイテムに近づき、照準を合わせてアクションボタンを押すことで、拾える仕組みを作ります。ホラーゲームにおいて、アイテムの収集はプレイヤーの没入感を高める重要な要素です。



こちらから試しにプレイしてください!



ステップ1: Raycast3Dのセットアップ

プレイヤーシーンにRaycast3Dを追加
  • Playerシーンを開きます。
  • プレイヤーノードのHeadの子ノードのとして Raycast3D を追加します。
  • 前回作成したPlayerUITextureRectLabelを追加します。
  • TextureRectの名前をPointerに変更して、丸い点の画像を設定して画面の中央に設定します。これが一人称で画面にある丸い点の役割になります。
  • Labelの名前をPointerLabelに変更します。これは丸い点がアイテムに触れた時に丸い点を非表示にして「拾う」をいう文字を表示するためにラベルになります。こちらも中央の位置に設定します。
構成は下記のようになります。

Raycast3Dの設定
  • Target Positionz-1.5に設定します(この距離内でアイテムを検知可能)。
  • Collision Mask を調整し、アイテムだけを検知するようにします。アイテム専用のレイヤー(例: レイヤー3)を使用しましょう。





ステップ2: アイテムスクリプトの準備

アイテム用のスクリプトを作成
object.gd というスクリプトを作成し、以下のコードを記述します:
extends Node
class_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: テスト

プレイヤーをアイテムの近くに移動させ、照準を合わせた状態で指定のボタンを押します。


これで、プレイヤーがアイテムを拾えるようになりました!次のパートでは、インベントリシステムやアイテムの詳細表示を追加する方法について説明します。
最終更新日: 2025/01/23 07:19

コメント

    Godotでホラーゲーム開発チュートリアル Part 3: Raycast3Dを使ったアイテムの取得機能 | GODOT TUTORIAL