質問内容
Plaeyr.cs部のGD.Print()関数ですが、プレイヤーから見たマウスの向きを取得したいのですが、マウス座標とプレイヤー座標の座標系が一致していないせいで mouse - player して正規化してもプレイヤーから見たマウスの向きが得られません
これはなぜでしょうか? 表示させてみましたが、マウスがプレイヤーから見て左にあるのにマウス座標のX軸がプレイヤーのX座標より、はるかに大きい値になっており。弾を飛ばすという処理を作ると右下に行ってしまうというバグが七おりません。
行いたいこと
マウスでクリックした座標に弾を飛ばす
現状
右下の領域しか弾が飛ばばない
前提
Godot: 4.6 C#
サブビューポート解像度: 360 180
ウインドウ解像度: 2560,1440
テクスチャーレクト解像度: 2560,1440
アンカーポイントはコンテイナーとテクスチャーレクト両方とも左上ですサイズは2560x1440です
ノード構成
ビューポートコンテイナー
- サブビューポート
- タイルマップ
- Player
- Camera2D
テクスチャーレクト
調べたこと
ChatGPT,Geminiで質問
log
``
mouse: (349, 145)
player:(108, 46.09281)
mouse: (348, 145)
player:(108, 46.09281)
mouse: (348, 145)
player:(108, 46.09281)
mouse: (348, 145)
player:(108, 46.09281)
### Player.cs
```cs
if(Input.IsActionJustPressed("left_click"))
{
Vector2 mouseScreenPos = GetViewport().GetMousePosition();
Vector2 mouseWorldPos = subViewport.CanvasTransform.AffineInverse() * mouseScreenPos;
Vector2 pos = subViewport.CanvasTransform.AffineInverse() * GlobalPosition;
Vector2 direction = (mouseWorldPos - pos).Normalized();
GD.Print("mouse: " + mouseWorldPos);
GD.Print("player:" + GlobalPosition);
GD.Print();
var bullet = (Shot)bulletScene.Instantiate<Area2D>();
GetParent().AddChild(bullet);
bullet.Init(this,direction);
}
```
### Shot.cs
```cs
using Godot;
using System;
public partial class Shot : Area2D
{
[Export] private float SPEED = 120;
private Vector2 direction;
public void Init(Node2D node, Vector2 targetDirection)
{
GlobalPosition = node.GlobalPosition;
direction = targetDirection.Normalized();
Rotation = direction.Angle();
}
public override void _Process(double delta)
{
GlobalPosition += direction * (float)delta * SPEED;
}
}
```
---
*from Discord by amagichan00*