Unity 2D Top-Down鼠标面临武器旋转问题

Unity 2D Top-Down mouse facing weapon rotation problem

我正在制作一款自上而下的 2D 射击游戏,我确实发现了一个问题。 关键是,每当玩家旋转时,玩家的枪就会奇怪地旋转。

我让我的玩家面对鼠标位置。玩家枪不在精灵的中心。 Gun 是 PlayerHand 中的预制件,PlayerHand 是 Player 的子对象。 我尝试了很多东西,但仍然找不到解决方案。

public class HandHolder : MonoBehaviour 
{

    [SerializeField] Gun gun;
    [SerializeField] float offsetX;
    [SerializeField] float offsetY = 0.01f;
    Gun playerGun;

    void Awake () 
    {
        playerGun = Instantiate(gun,transform.localPosition,transform.localRotation) as Gun;
    }

    // Update is called once per frame
    void Update () 
    {
        playerGun.transform.position = new Vector3(transform.position.x + offsetX,transform.position.y + offsetY);
        playerGun.transform.rotation = transform.rotation;
        playerGun.Shooting();
    }
}

    void Update() 
    {

        if (!isLocalPlayer)
            return;
        Vector3 position = new Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized * Time.deltaTime * 20f;
        transform.position += position;
        FaceMouse();
    }

    public void FaceMouse() 
    {
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        mousePosition.Normalize();
        float rotation_z = Mathf.Atan2(mousePosition.y, mousePosition.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rotation_z);
    }

这是屏幕截图。我的播放器已经有了一把枪的材质。但它只是质地。每当我旋转时,我希望 Gun 预制件正好位于 Player 精灵枪的位置。

给你的播放器添加一个空的,命名为gunTransform。标记它 GunTransform 确保前轴(蓝色)面向玩家的前进方向。

Class 水平变量-

Transform guntransform;

Awake() 中:

guntransform=this.GameObject.FindObjectWithTag("GunTransform").getComponent<Transform>();

然后代替

playerGun = Instantiate(gun, transform.localPosition, transform.localRotation) as Gun;

通话

playerGun = Instantiate(gun, guntransform.position, guntransform.rotation) as Gun;