заставить мой 2d спрайт переворачиваться на работу в зависимости от местоположения Transform - PullRequest
0 голосов
/ 23 мая 2018

Итак, этот код просто не отвечает по какой-либо причине.У меня есть враг, которого я постоянно пытаюсь встретить лицом к лицу с игроком (враг периодически перекидывает голову игрока вперед-назад).Но кроме того, что происходит переворот всякий раз, когда таймер достигает 0, что не очень хорошо работает, я не могу заставить функцию Flip работать.Я знаю, что функция Flipper в порядке;Я уже проверил это и все.Я просто не уверен, как сказать противнику, что, когда игрок находится слева от него, развернуться и наоборот.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dragoonDetection : MonoBehaviour {

private Rigidbody2D rb;
private Animator anim;
public Transform Player;
private bool facingRight = true;

void Start ()
{
    rb = GetComponent<Rigidbody2D> ();
    anim = GetComponent<Animator> ();
}

void Update()
{
    Flip();
}

    void Flip()
{
    if (Player.transform.localScale.x > 0) {
        transform.localScale = new Vector3 (1.69f, 1.54f, 1f);
    }
        if (Player.transform.localScale.x < 0) {
            transform.localScale = new Vector3 (-1.69f, 1.54f, 1f);
    }
}

void Flipper()
{
    facingRight = !facingRight;
    Vector2 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}
}

Есть идеи?Я бы предпочел не использовать FindGameObject, потому что он не ищет скрипт проигрывателя.Он ищет дочернее преобразование без сценария, прикрепленного к игроку.И поскольку у меня есть два разных игровых объекта GameObject, на которые вы можете переключаться в любое время в игре, в этом отношении они мне не подойдут.

1 Ответ

0 голосов
/ 23 мая 2018

Вам нужно будет выполнить какую-то проверку против позиции игрока с позицией птицы, если вы хотите, чтобы она всегда была лицом к игроку.Метод barebones будет состоять в том, чтобы просто сравнить x-позиции двух объектов и соответственно изменить масштаб.

void Update()
{
     transform.localScale = new Vector3(getDir()*1.69f, 1.54f, 1);
}

private int getDir()
{
    if (player.transform.position.x < transform.position.x)
        return -1;
    else 
        return 1;
}

Вы должны добавить сюда несколько дополнительных проверок, чтобы он не обновлял масштаб каждого кадра, когда естьбез изменений.

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