Я создаю простой 2D-платформер, и у меня есть NPC, который ходит взад-вперед, влево-вправо на заднем плане. Чтобы сделать это, я следовал руководству по объекту, перемещающемуся между путевыми точками и вперед, чтобы часть движения работала.
Чего я не могу понять, так это как перевернуть спрайт, чтобы он смотрел в направлении, в котором движется.
Это код, который у меня есть для объекта, перемещающегося между путевыми точками:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaypointFollower : MonoBehaviour
{
[SerializeField] private GameObject[] waypoints;
private int currentWaypointIndex = 0;
[SerializeField] private float speed = 2f;
private void Update()
{
if (Vector2.Distance(waypoints[currentWaypointIndex].transform.position, transform.position) < .1f)
{
currentWaypointIndex++;
if (currentWaypointIndex >= waypoints.Length)
{
currentWaypointIndex = 0;
}
}
transform.position = Vector2.MoveTowards(transform.position, waypoints[currentWaypointIndex].transform.position, Time.deltaTime * speed);
}
}
Я действительно не знаю, как проверить движение и направление объектов, так как все уроки, которые я нашел для этого, обычно делают это вокруг ввода игрока.
Любая помощь приветствуется
Ваш код уже перемещает NPC. А добавив еще несколько строк кода, мы можем определить направление, влево или вправо, в котором движется NPC.
В этом коде мы предоставим поле объекта, которое вы сможете перетащить в средство визуализации спрайтов NPC. Альтернативой может быть поиск в коде.
public class WaypointFollower : MonoBehaviour
{
[SerializeField] private GameObject[] waypoints;
private int currentWaypointIndex = 0;
[SerializeField] private float speed = 2f;
[SerializeField] SpriteRenderer _renderer;
private void Update()
{
if (Vector2.Distance(waypoints[currentWaypointIndex].transform.position, transform.position) < .1f)
if (++currentWaypointIndex >= waypoints.Length)
currentWaypointIndex = 0;
var x0 = transform.position.x;
var x1 = waypoints[currentWaypointIndex].transform.position.x;
// let’s assume your sprite is facing right by default. In which case, we want to flip if the NPC is moving left.
_renderer.FlipX = x0 > x1;
transform.position = Vector2.MoveTowards(transform.position, waypoints[currentWaypointIndex].transform.position, Time.deltaTime * speed);
}
}
@EPiedrahita ах да, я обновил код, и в этом случае вы должны отметить, что это решено, чтобы связать это.
Удивительно, это сработало идеально. Мне нужно было только изменить _renderer.flipY на _renderer.flipX, потому что он перевернулся, а не слева направо. А в остальном все идеально. Спасибо!