Vector3 target = new Vector3(Mathf.Round(hero.transform.position.x), 0.5f, Mathf.Round(hero.transform.position.z));
{
public float horizontalSpeed = 0.3f;
public float verticalimpulse = 500f;
public bool isJump;
float speedX;
Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.A))
{
speedX = -horizontalSpeed;
transform.localScale = new Vector3(-0.5f, 0.5f); //Персонаж смотри в ту сторону, куда нажал игрок
}
else if (Input.GetKey(KeyCode.D))
{
speedX = horizontalSpeed;
transform.localScale = new Vector3(0.5f, 0.5f); //Персонаж смотри в ту сторону, куда нажал игрок
}
if (Input.GetKey(KeyCode.Space) && !isJump)
{
rb.AddForce(new Vector2(0, verticalimpulse));
isJump = true;
}
transform.Translate(speedX, 0, 0);
speedX = 0;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground") //проверка что обьект столкновения имеет тег ground
{
isJump = false; //помечаем что мы столкнулись с землёй и можем снова прыгать
}
}
}
public InventoryWindow inventoryWindow; //сюда затягиваем в инспекторе обьект на котором висит скрипт InventoryWindow
private void Start()
{
this.inventoryWindow.Redraw(); //теперь можно это сделать
}
Первый и единственный верный вариант который я вижу это написать свой контроллер ходьбы, единый и для бота, и для игрока. Что бы в первую очередь игрок двигался строго по клеткам вверх/вниз/влево/вправо. Затем под это управление адаптировать логику бота(он чекает координаты игрока относительно своих и передаёт команды в контроллер управления типо влево, влево, вверх, влево).
Но есть и второй вариант, он мне не нравится, но вполне применим и довольно прост, результат будет очень похож на желаемый. Вот он: