0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ACTION GAME MAKER 射撃攻撃の向きを反転させる処理を実装

Last updated at Posted at 2025-07-15

注意

GDスクリプトを使った方法なので、ACTION GAME MAKER的なベストプラクティスではないですが、こんなやり方もあるよぐらいでメモとして残します

概要

まずチュートリアルの内容で弾を発射する処理を実装した際にキャクターの向きに発射はされるのですが、
クナイなどシンメトリーでないものを発射したい場合は、当然ながら、画像自体は逆向きで発射されるため、違和感がでます。

サンプル

左に向いて発射した場合逆に発射される
856d0de29086e738 (1).gif

ヴィジュアルスクリプトのやり方

  1. クナイにAnimationPlayerを作成
  2. クナイのGameObjectにアニメを登録
  3. ヴィジュアルスクリプトで登録したアニメを初期アクションに設定

上記がACTION GAME MAKER的なベストプラクティスなんだと思う。
(フォーラムで回答してもらいました。)

GDスクリプトでやる場合

  1. グローバルにプレイヤーの位置を記録するグローバル変数を追加する
  2. クナイのスプライト2Dにgdscriptをアタッチさせて、プレイヤーの向き応じてスケールの値を反転させる
Global.gd
extends Node
var player_direction = Vector2.RIGHT

func _physics_process(delta):
	if Input.is_action_pressed("ui_left"):
		player_direction = Vector2.LEFT
	elif Input.is_action_pressed("ui_right"):
		player_direction = Vector2.RIGHT
kunai.gd
extends Sprite2D
var initial_scale: Vector2
#@onready var player = get_node("/root/CoreScene/GameScenes/GameScene/SceneLayer/BaseLayer/ObjectRoot/Player") as Node2D
func _ready():
	initial_scale = scale
	if Global.player_direction == Vector2.LEFT:
		scale = Vector2(-initial_scale.x, -initial_scale.y)
	else:
		scale = initial_scale

GDスクリプトの場合はスケールを直接いじるので、1枚しか画像を使わないで良い
というメリットは有るのですが、ヴィジュアルスクリプトは、アニメーションをつけたい場合などはノーコードで記述できるメリットがあります。
(アニメーションや状態管理などをGDでつけるすごく複雑で長い処理を書かないと行けなくなります。)

また、現状同じNodeに対して複数のスクリプトはアタッチできないみたいなので、
どちらかを選択することになり、ヴィジュアルスクリプトで記述できるものは多少無理してでも
ヴィジュアルスクリプトで記述したほうが良いでしょう。

とは言え、Godot自体に興味をもってより複雑なゲームを作りたい人は現れる気がするので
今後もヴィジュアルスクリプトを使わない、やり方はメモとして残しつつ紹介して行こうと思います。

完成したもの

向き変更 (1).gif

向きに応じてクナイの向きもちゃんと切り替わっていい感じです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?