Единство - Заставьте игрока указывать на мышь
Я делаю шутер сверху вниз, где игрок двигается вверх, вниз, влево и вправо с помощью WASD и постоянно указывает на мышь. Я хочу, чтобы движение не имело отношения к тому направлению, на которое указывает игрок, но сейчас это не так.
Вот мой код:
void Update()
{
float igarH = Input.GetAxisRaw("Horizontal");
float igarV = Input.GetAxisRaw("Vertical");
if (igarH > 0.5f || igarH < -0.5f)
{
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f));
}
if (igarV > 0.5f || igarV < -0.5f)
{
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f));
}
// Point toward mouse
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = rotation;
}
Извините за плохой отступ, трудно понять, как сайт хочет, чтобы я сделал разметку, и я новичок в этом сайте.
Почему игрок движется по-разному в зависимости от того, где находится моя мышь? Я хочу, чтобы движение было таким же, несмотря ни на что.
Пожалуйста, сохраняйте все ответы, связанные с Unity2D, а не с 3D, пожалуйста.
1 ответ
Transform.Translate имеет необязательный параметр relativeTo
в том, что вы выбираете, хотите ли вы, чтобы объект двигался относительно своей собственной системы координат или мировой системы координат.
Просто измените ваши звонки на:
if (igarH > 0.5f || igarH < -0.5f) {
transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f), Space.World);
}
if (igarV > 0.5f || igarV < -0.5f) {
transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f), Space.World);
}