簡體   English   中英

如何修復 Unity 中的子彈旋轉? (2D)

[英]How to fix Bullet Rotation in Unity? (2D)

所以我的腳本有問題,它的作用基本上是根據鼠標瞄准的位置旋轉播放器圖形。 這工作正常且符合預期,但我的問題是,當我想朝相反方向射擊時,即向左方向射擊時,它會射擊玩家而不是瞄准的地方。

我決定錄制一個小視頻來展示這個問題。

https://streamable.com/02zqz

這是旋轉和武器腳本的代碼。

旋轉

public class Rotating : MonoBehaviour
{
    public PlayerController player;
    public float x;

    public Vector3 flipArm;

    void Start()
    {
        x = transform.localScale.x;
        flipArm = transform.localScale;
        player = GetComponentInParent<PlayerController>();

    }

    void Update()
    {
        Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition ) - transform.position;
        difference.Normalize();

        float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

        transform.rotation = Quaternion.Euler(0f, 0f, rotZ + 0);

        if(difference.x >= 0)
        {
            transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
            player.armRight = true;
        }
        else
        {
            transform.rotation = Quaternion.Euler(0f, 0f, rotZ+180);
            player.armRight = false;
        }
    }
}

武器

public class Weapon : MonoBehaviour
{
    public float shootDelay = 0;
    public float damage = 1;

    public LayerMask whatToHit;

    public Transform firePoint;

    public GameObject bullet;

    // Start is called before the first frame update
    void Start()
    {
        firePoint = transform.Find("FirePoint");
    }

    // Update is called once per frame
    void Update()
    {
        shootDelay += Time.deltaTime;
        if(shootDelay >= 0.1f)
        {
            if(Input.GetMouseButton(0))
            {
                shootDelay = 0;
                Shot();
            }
        }
    }

    public void Shot()
    {
        Vector2 mousepos = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);

        Vector2 firepointpos = new Vector2(firePoint.position.x, firePoint.position.y);

        Instantiate(bullet, firepointpos, transform.rotation);

        Debug.DrawLine(firepointpos, (mousepos - firepointpos) * 100, Color.cyan);
    }
}

嘗試這個:

transform.rotation = Quaternion.LookRotation ( end - start );

另外不要忘記檢查玩家面對的位置,因為您不想從后面射擊。 使用上述歐拉角,y 分量的一側為 90 度,另一側為 270 度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM