ライセンス条項
このプラグインは、Action Game Maker 内で、無料または商用のプロジェクトを問わず、あらゆる目的で自由に使用または改変することができます。
ただし、再配布は行わないでください。クレジット表示は必須ではありませんが、歓迎されます。
プラグインの効果
このプラグインの名前は ArkAgmRotateToVelocity です。
各フレームでゲームオブジェクトを回転させ、その局所的な物理的な「右側」が常に実際の速度の方向を向くようにします。
要点
GameObjectの指定が必要です- 最小有効速度の二乗値を指定できます(二乗値を使用することでパフォーマンスが向上します)。実際の速度がこの値より大きい場合のみ、スクリプトの機能が有効になります
- 瞬間回転と滑らかな回転の 2 つのモードを使用できます
- 滑らかな回転モードでは、回転の速さを表す値を設定できます
- 当初のアイデアは、常に右側を向くアニメーション方向を持つ弾丸オブジェクトがあり、このスクリプトと組み合わせることで、実際の運動方向に応じて 360° 回転させることでした。
核心
操作手順
- GameObject ノードを選択します
Ctrl+Aを押し、タイプがNodeのノードを追加し、名前をArkAgmRotateToVelocityに変更しますArkAgmRotateToVelocityを選択し、空の GDscript を追加します- 以下のスクリプト全体をコピーし、スクリプトに貼り付けて保存します
ArkAgmRotateToVelocityノードを選択すると、インスペクター上のパラメータを必要に応じて調整し、滑らかな回転などの機能を有効にするかどうかを決定できます
スクリプト
class_name ArkAgmRotateToVelocity extends Node
enum RotationMode {
INSTANT, # 即時回転
SMOOTH, # 滑らかな回転
}
@export var game_object: GameObject
@export var rotation_mode: RotationMode = RotationMode.INSTANT # 回転モード
@export var rotation_speed: float = 5.0 # 回転速度(SMOOTH モードを使用する場合)
@export var min_velocity_squared: float = 0.1 # 回転開始の最小速度二乗値
func _ready() -> void:
if not game_object:
# 親ノードを game_object として取得しようとする
var parent = get_parent()
if parent and parent is GameObject:
game_object = parent
else:
printerr("[ArkAgmRotateToVelocity] game_object が設定されておらず、親が GameObject ではありません")
func _physics_process(delta: float) -> void:
if not game_object:
return
var velocity: Vector2 = game_object.get_real_velocity()
# 速度が小さすぎる場合は回転しない
if velocity.length_squared() < min_velocity_squared:
return
# 目標角度(速度の方向の角度)を計算
var target_angle = velocity.angle()
match rotation_mode:
RotationMode.INSTANT:
# 目標角度に即時回転
game_object.rotation = target_angle
RotationMode.SMOOTH:
# 目標角度に滑らかに回転
var current_angle = game_object.rotation
var angle_diff = wrapf(target_angle - current_angle, -PI, PI)
game_object.rotation = current_angle + angle_diff * min(1.0, rotation_speed * delta)