Unity C#:弹丸速度相对于鼠标之间的距离

Unity C#: Projectile speed relative to distance between mouse

我在 Unity 中遇到问题,我试图实例化一个具有方向和速度的射弹。方向取决于 RotateMouse() 函数,该函数计算相对于鼠标的方向(对于射弹)。归一化后,我将它发送到另一个 "projectile movement" 脚本,该脚本只是将其乘以速度。

出于某种原因,当我让鼠标在某个方向靠近角色时,它的速度非常慢,而距离较远时则相反...我还调试了所有值,并且每个 "direction" 变量在 x、y 和 z 中为 sub 1...

你能发现问题吗?行为是尽管被归一化,它的速度还是会变化,我不明白这一点。

进行方向计算的脚本:

    public void RotateMouse()
{
    if (Input.GetButton(FindCharacter.FindPlayer(gameObject) + "AimPC"))
    {
        aimingMouse = true;
        sRenderer.enabled = true;
        canShoot = true;

        var mousePos = Input.mousePosition;
        var magePos = Camera.main.WorldToScreenPoint(transform.position);
        difference = mousePos - magePos;

        difference.Normalize(); // after normalize == direction

        rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(new Vector3(transform.rotation.x, transform.rotation.y, rotation_z + spriteRotationOffset));

    }
    else
    {
        aimingMouse = false;
        sRenderer.enabled = false;
        canShoot = false;
    }

}

我实例化射弹并在之后立即设置方向的另一个脚本:

projectileDir = new Vector3(controller.difference.x, controller.difference.y, controller.difference.z);

    public IEnumerator ShootProjectile(int elementNr)
{
    shooting = true;

    GameObject projectile = Instantiate(projectilePrefabs[elementNr], instantiatePosition, Quaternion.Euler(0, 0, controller.rotation_z + rotationOffsetZ));
    projectile.GetComponent<ProjectileMovement>().Direction(projectileDir);
    yield return new WaitForSeconds(shootDuration);

    shooting = false;

}

最后使用方向变量并计算速度:

public class ProjectileMovement : MonoBehaviour {

public float speed;

private Rigidbody2D rb;
private Vector3 direction;
private Collider2D projectileCollider;
private Animator animator;

void Start()
{
    rb = GetComponent<Rigidbody2D>();
    projectileCollider = GetComponent<Collider2D>();
    animator = GetComponent<Animator>();
    rb.velocity = speed * direction;
}

public void Direction(Vector3 startingDirection)
{
    this.direction = startingDirection;
}

void FixedUpdate()
{
    rb.velocity = direction * speed;

}
}

此外,如果您需要有关脚本的更多信息,我可以提供,但我想我已经展示了与此问题相关的所有内容。有什么不明白的可以评论。

如果问题难以形象化,请查看此 GIF 并观察火球相对于鼠标指针的速度:
Gyazo gif link

问题是我规范化了一个 Vector3,它通过首先规范化一个 Vector2(这给了我一个 different/correct 结果)然后将 x 和 y 值放入 Vector3 来解决z维度的!