Unity 2D вращайте AI врага, чтобы посмотреть на игрока - PullRequest
0 голосов
/ 26 ноября 2018

Я делаю 2D игру с двумя сторонами, левой и правой, чтобы игрок мог двигаться только влево или вправо или прыгать.Я сделал ИИ в качестве врага.ИИ работает нормально.Он может пойти к игроку, чтобы убить его.

Проблема в том, что враг не может повернуться или повернуться лицом к игроку, когда он идет убить его.Я хочу, чтобы ИИ посмотрел на игрока.Когда игрок находится слева от врага, противник должен повернуть налево, чтобы посмотреть на игрока.Я искал много сайтов, и я не нашел правильного решенияЭто мой вражеский сценарий:

public class enemy : MonoBehaviour
{
    public float speed;
    private Animator animvar;
    private Transform target;
    public GameObject effect;
    public float distance;
    private bool movingRight = true;
    public Transform groundedDetection;
    public float moveInput;
    public bool facingRight = true;

    void Start()
    {
        animvar = GetComponent<Animator>();
        target = GameObject.FindGameObjectWithTag("Player").transform;
    }

    // Update is called once per frame
    void Update()
    {
        if (Vector3.Distance(target.position, transform.position) < 20)
        {
            transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
        }
        else
        {
            transform.Translate(Vector2.right * speed * Time.deltaTime);
        }
        RaycastHit2D groundInfo = Physics2D.Raycast(groundedDetection.position, Vector2.down, distance);
    }

    void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.tag.Equals("danger"))
        {
            Instantiate(effect, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
        if (col.gameObject.tag.Equals("Player"))
        {
            Instantiate(effect, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
    }
}

Игра 2D, влево, вправо, с прыжком с использованием Unity3D.

1 Ответ

0 голосов
/ 27 ноября 2018

Вам нужна функция, которая переворачивает ваш спрайт, вы можете сделать это, изменив масштаб преобразования и сохранив логическое значение, чтобы проверить, где он стоит, bool facingRight;, так что-то вроде

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

и в вашем Update проверьте, нужно ли его переворачивать или нет

if (Vector3.Distance(target.position,transform.position)<20)
    {

     transform.position=Vector2.MoveTowards(transform.position, target.position,speed*Time.deltaTime);
     if(target.position.x > transform.position.x && !facingRight) //if the target is to the right of enemy and the enemy is not facing right
        Flip();
     if(target.position.x < transform.position.x && facingRight)
        Flip();
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...