unity3d 我如何让子弹预制件的精灵使用与我的武器相同的旋转?

w8biq8rn  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(161)

我正在研究一个自上而下的概念,枪围绕着玩家旋转,并根据你的十字准线所在的一边翻转(类似于ZERO Sievert)。我试图让我的子弹精灵在射击时相对于我的玩家武器有正确的旋转。
下面是我如何在射击脚本中示例化子弹,它以正确的方式发射,但精灵本身没有正确旋转。

void Shoot()
    {
        GameObject bullet = Instantiate(bulletPrefab, firingPoint.position, firingPoint.rotation);      
        Rigidbody2D rb = bullet.GetComponent<Rigidbody2D>();
        rb.AddForce(firingPoint.right * bulletForce, ForceMode2D.Impulse);  
    }

而在我的武器处理脚本中,这是我对武器旋转的实现,我现在翻转武器y比例来纠正精灵。

private void FixedUpdate()
    {
        RotateWeapon();
        if (crosshair.transform.position.x < 0)
        {
            FlipWeapon();
        }
    }
void RotateWeapon()
    {
        float AngleRad = Mathf.Atan2(crosshair.transform.position.y - currentWeapon.transform.position.y, crosshair.transform.position.x - currentWeapon.transform.position.x);
        float AngleDeg = (180 / Mathf.PI) * AngleRad;
        currentWeapon.transform.rotation = Quaternion.Euler(0, 0, AngleDeg);
    }

    void FlipWeapon()
    {
        currentScale = transform.parent.localScale;
        currentScale.y *= -1;
        currentWeapon.transform.localScale = currentScale;
    }

我目前在如何实现这一点上停滞不前,因为我遇到的大多数资源的自上而下射击有球员转身到一个完整的360度,我的球员只面对左或右,武器本身只有180度的运动范围内的任何一方之前,它的设置翻转。

oxiaedzo

oxiaedzo1#

也许您可以尝试添加一个偏移量,这样当您示例化该项目符号时,它将看起来像这样:

GameObject bullet = Instantiate(bulletPrefab, firingPoint.position, firingPoint.rotation + offset);

这里的offset是一个旋转的x y z坐标,所以你会想在z坐标上旋转它(尝试所有的方法,直到你找到正确的),并旋转它-90度或90度。你可能需要旋转它180度,但不要使用270,而要使用-90。相信我,这将有助于你以后的编码。同时确保将offset设置为一个变量:

private Vector3 offset = 0, 0, -90;

!请记住您可以更改x y z坐标!

相关问题