Unity 2D Top-Down мышь сталкивается с проблемой вращения оружия - PullRequest
0 голосов
/ 17 октября 2018

Я делаю 2D-стрелялку сверху вниз и обнаружил проблему.Суть в том, что при вращении игрока у пистолета игрока происходит странное вращение.

Я установил положение мыши на лице игрока.Пистолет игрока не находится в центре спрайта.Оружие является префабом в PlayerHand, а PlayerHand является дочерним игроком.Я много чего перепробовал и все же не могу найти решение.

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 точно находился на месте спрайтового игрока, когда бы я ни вращался.

The issue on screen

1 Ответ

0 голосов
/ 17 октября 2018

добавить пустую к вашему игроку, назовите его gunTransform.пометьте его GunTransform, чтобы убедиться, что передняя ось (синяя) направлена ​​в прямом направлении игроков.

Переменная уровня класса -

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;
...