【Godot 4 】ホラーゲームを作ろう!Part 1

2024/08/16
おはこんばんにちは!ギルガメです!

夏といえば暑い!いや、ホラーだ!ということで、Unity3Dを使ってホラーゲームっぽいものを作ったのですが、今年からGodot Engineを触り始めて、どハマりしまして気づいたらずっとGodot Engine触っています。

今年はGodot Engineを使ってジャンプキングライクを作ってみました!もし興味がありましたらぜひ遊んでみてください!



長々とすみません!早速本題に入ります!

最近どこのゲーム実況見てもホラーが一番人気ですね(偏見)!そんな実況を見ていると自分もホラーゲームを作っていろんな人に実況してもらいたい(願望)が湧き出てきます。

どんなホラーゲームを作るかはコンセプトが必要ですが、ベースができていればある程度はビジョンに近づけると思うのでホラーゲームのベースを作っていくものになります!

このパート1では下記を追加していきます!
  • メインゲームのシーンの作成
  • フロアと壁
  • プレイヤーの作成(一人称)
  • WASDキーの移動

動画で見たい方はこちらです!

早速メインゲームのシーンの作成をしていきましょう!
まずプロジェクトは「Compatibility」で作成しています。私の場合はHTMLでもエクスポートしたいのでこちらで作成しています。PCのみで作成する場合は「Forward+」が画質がいいのでそちらがおすすめです。



メインゲームのシーンの作成前にギルガメのおすすめはシーン用とスクリプト用のフォルダーを作成することです。



準備が整ったらシーンをNode3Dで作成してMainに名前を変更します。そこからMainにStaticBody3Dを追加します。
StaticBody3DCollisionShape3DMeshInstance3Dを追加します。そちらを追加しないとStaticBody3DはWarning状態のままになります。CollisionShape3Dは物理的なあたりがあり、MeshInstance3Dは形をつけるものになります。今回はフロアを作成したいのでどちらもShapeMeshBoxShapeに設定します。



まだ形は四角なのでこれのサイズを変更しながら平くしてフロアっぽくします。CollisionShape3DMeshInstance3DのShapeとMeshにあるサイズを変更して平くします。



今回はサイズをXZを50にしました。整ったらメインシーンをシーンフォルダーに保存します。

次はメインキャラクターを作っていきましょう!
新しいシーンを作成してCharacterBody3Dで始めます。先ほどのCharacterBody3Dにフロアと同じようにCollisionShape3DMeshInstance3Dを追加します。ShapeMeshCapsuleにします。



CharacterBody3Dの名前をPlayerに変更します。
次にプレイヤーの一人称の目線にカメラを作って、マウスのカーソルの合わせてカメラを動かすようにしていきます!
  • Node3DPlayerに追加してHeadに名前を変更します
  • HeadCamera3Dを追加します



上記のように設定が完了したら次にスクリプトを設定してプレイヤーの移動とカメラの動きを設定します。
  • Playerにスクリプトを作成する際に「CharacterVBody3D: Basic Movement」をチェックした状態で作成します。こちらは3Dキャラクターのスクリプトをデフォルトで作成してくれます。Godot Engine.. ありがとう!これだけでキャラクターは移動とジャンプができる状態のスクリプトができます
  • カメラのスクリプトも作っていきます。カメラに直接スクリプトを作るのではなくHeadを選択してスクリプトを作成します



プレイヤーのスクリプトはデフォルトのままで使えるのでそのままにします。
Headに追加したスクリプトを下記のように設定します。マウスカーソルに合わせてHeadを動かしたりプレイヤーの向きを動かしたりするためのコードになります。

extends Node3D

var sens = 0.005 #感度

func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _input(event):
if event is InputEventMouseMotion:
get_parent().rotate_y(-event.relative.x * sens)
rotate_x(-event.relative.y * sens)
rotation.x = clamp(rotation.x, deg_to_rad(-90), deg_to_rad(90))

スクリプトを保存するときはスクリプト用に作成したフォルダーに保存します。
これで最低限のスクリプトは完了です!プレイヤーを保存して動かしてみよう!

早速フロアに先ほど作ったプレイヤーを追加します。Mainシーンに切り替えて、シーンフォルダーに保存されたプレイヤーシーンをドラッグしてMainシーンにドロップします。



早速動かしてみよう!
あれ?
暗い?何も見えない?

ライトが足りなかった!ライトを作ってフロアを照らさないと全体が暗いままでした。
DirectionalLight3DMainに追加します。お好みでSky Colorを設定してください。また高さを向きもお好みで設定してください。高さは高く、また向きによって影ができるので作りたい雰囲気に合わせて決めていきます。





空の色が決まったら「Add Environment to Scene」のボタンを押して保存してます。

また確認してみよう!今度は明るくて矢印キーで移動ができて、マウスに合わせて一人称のカメラの動きをしてくれます。
動かしてみたものの殺風景なので壁でも作ろうかな!

壁の作成もフロアと同じように作っていきます。
  • StaticBody3DCollisionShape3DMeshInstance3Dを追加します(ShapeMeshBoxShapeに設定)
  • サイズを設定して位置を決めます
  • Ctrl + D」で複製して位置を設定します



プレイヤーの移動が矢印キーだと移動しにくいのでWASDキーで移動できるようにします。
メニューから「Project → Project Settings..」を選択して開いた画面から上にあるタブInput Mapをクリックします。
Add New Actionでアクションの名前を作成して、作ったアクション名の右側にある「+」ボタンを押して、キーを設定していきます。
下記の画像用に設定していきます。
 


  • アクション名「up」、Wキーを設定
  • アクション名「down」、Sキーを設定
  • アクション名「left」、Aキーを設定
  • アクション名「right」、Dキーを設定
  • アクション名「jump」、Wキーを設定

上記は終わったら、スクリプトでアクション名に変更していきます。
プレイヤーのスクリプトでデフォルトで作成されているスクリプトを下記に変更します。

extends CharacterBody3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5

# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _physics_process(delta):
# Add the gravity.
if not is_on_floor():
velocity.y -= gravity * delta

# Handle jump.
if Input.is_action_just_pressed("jump") and is_on_floor(): # jumpに変更
velocity.y = JUMP_VELOCITY

# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir = Input.get_vector("left", "right", "up", "down") # left, right, up, downに変更
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)

move_and_slide()

変更して動かしてみてください!
実際に作ったものは下記のように動きます。ギルガメがHTMLでエクスポートしたものです。


パート1はここまでです!お疲れ様でした!
パート2はライトや暗闇の雰囲気などを作っていきます。

引き続きギルガメを応援してください!よろしくお願いいたします!

↓ギルガメのプロフィール↓ ギルガメ公式サイト: https://www.yosapps.com ギルガメ公式X: https://x.com/yosapps ギルガメゲーム: https://www.yosapps.com/games ギルガメモバイルゲーム: https://play.google.com/store/apps/dev?id=8077712662120291705

ギルガメのファンイラストをいただけるとすごく喜びます!
© Copyright 2024 YOSAPPS. Powered with by YOSAPPS