UNITY-在枪口朝向的方向射击弹丸

Pugito Pitapayle

我有一杆枪,它会产生弹丸,该弹丸会撞到对撞机上(Ricochet)。它应该朝着枪所面对的方向射击,但我得到的是,射弹始终向右射击45度,我知道这是因为我的常数向量为2。

我尝试使用Vector2.up,但它会阻止弹丸产生跳弹效果,因为它始终希望向上运动。

我应该如何实施这些东西?我只希望弹丸朝我的枪所面对的方向射击并在对撞机上弹起。这是2D游戏。我的代码附在下面,您可以看到。谢谢!

投射脚本:

private Rigidbody2D rb;
public static bool canMove = true;

void Start()
{
 rb = GetComponent<Rigidbody2D>();
 rb.velocity = new Vector2(10f, 10f);
}
void Update()
{
 //transform.Translate(Vector2.up * speed * Time.deltaTime);
 if (canMove)
 {
     rb.isKinematic = false;

 }
 else if (!canMove)
 {
     rb.isKinematic = true;
 }
} 

枪声脚本:

float offset = -90f;

public GameObject projectile;
public Transform shotPoint;
public GameObject child;

void Start()
{

}

void Update()
{
    Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);

    if (Input.GetMouseButtonDown(0))
    {
        Instantiate(projectile, shotPoint.position, transform.rotation);
        Projectile.canMove = true;
    }
}
雨果

Rigodbody.velocity是在世界空间坐标。

当你通过时

rb.velocity = new Vector2(10f, 10f);

它会在世界空间X方向10和Y方向10中运行。


为了通过它在当地坐标一般你不能总是依靠Tramsform.InverseTransformDirection建议在这里,因为Transform组件。在这种特定情况下,它可能会起作用,但是通常您需要设置速度FixedUpdate,此时Transform组件可能尚未更新!


但是Rigidbody2D一般来说,您可以使用组件Rigidbody2D.GetRelativeVector,以便将相对于刚体的局部矢量转换为世界坐标:

// Might also be Vector.up depending on your setup
rb.velocity = rb.GetRelativeVector(Vector2.right * speed);

注意:做得更好

[SerializeField] private Rigidbody2D rb;

并已通过检查器对其进行了引用。然后,您可以摆脱昂贵的GetComponent通话。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章