Unity 2D Top-Down мышь сталкивается с проблемой вращения оружия
Я делаю 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 был точно на месте спрайтового пистолета игрока, когда бы я ни вращался.
2 ответа
Добавить пустую к вашему игроку, назовите его 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;
Вы пробовали это:
playerGun.transform.forward = playerHand.tranform.forward;
вместо этого:
playerGun.transform.rotation = transform.rotation;