Unity 2D скрипт движения врага не переворачивается при движении справа налево - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь написать сценарий для своих движений противника.Вот мой код:

public class EnemiesMovement : MonoBehaviour
{
     private bool isFacingRight = false;
     public float speed = 10f;
     private float startPoint;
     private float endPoint;
     public float unitMovement = 2f;
     private Rigidbody2D enemy;
     private Animator anim;
     bool moveRight;
// Start is called before the first frame update
     void Start()
     {
         enemy = GetComponent<Rigidbody2D>();
         anim = GetComponent<Animator>();
         startPoint = enemy.position.x;
         endPoint = startPoint + unitMovement;
     }

// Update is called once per frame
     void Update()
     {
         if (enemy.position.x >= endPoint)
             moveRight = false;

         if (enemy.position.x <= startPoint)
             moveRight = true;

         if (moveRight)
         {
             enemy.velocity = new Vector2(-transform.localScale.x, 0) * speed;
             if (!isFacingRight)
            Flip();
         }

         if (!moveRight)
         {
             enemy.velocity = new Vector2(transform.localScale.x, 0) * speed;
             if (isFacingRight)
                 Flip();
         }
     }

     void Flip()
     {
         isFacingRight = !isFacingRight;
         Vector3 scale = transform.localScale;
         scale.x *= -1;
         transform.localScale = scale;
     }
}

Движение противника правильное, но после того, как враг переворачивает свои спрайты, он не меняет направление своего движения.По сути, он продолжается вправо, хотя его спрайт повернул налево.Может кто-нибудь показать мне, как я могу это исправить?

Мой злой враг имеет положительную шкалу, обращенную влево.

1 Ответ

0 голосов
/ 11 февраля 2019

Скорость зависит от свойства масштаба.

Так что, если вы измените отрицательный масштаб, все на этом GameObject перевернется, нет необходимости менять направление скорости.

Выбыть сбитым с толку?Вы можете попробовать другой способ перевернуть спрайт.

GetComponent<SpriteRenderer>().flipX = true;

Это только переворачивает спрайдер, другие вещи работают как обычно в его мировом пространстве.


Другой предлагает как Unityзадокументировано, что лучше изменить свойство Rigidbody в FixedUpdate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...