Vector2.MoveTowards - перемещение в целевую позицию и некоторые другие - PullRequest
0 голосов
/ 08 февраля 2019

Я почти создал игру, но есть одна вещь, которая мне трудна.Я хочу переместить игрока к цели и еще немного.

Красная точка - это цель, но я хочу переместить игрока к цели и немного дальше.

PS Если игрок уходитзатем я хочу, чтобы он достиг цели и чуть дальше вправо

то же самое влево, вверху, внизу

Смотри приложение: https://imgur.com/a/RF0xIQq Красная точкацель, но я хочу, чтобы игрок двигался к цели, и еще больше на лицевой стороне (зеленая точка)

Я пытался что-то вроде продвижения вперед, но у меня нет никаких идей.

    void Start()
    {

    }

    void Update()
    {
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        transform.position = Vector2.MoveTowards(transform.position, target.position, (speed * Time.deltaTime));
    }
    //Mob have "Player" TAG (Player is not a player) |Targeting is fine|

1 Ответ

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

Вы можете добавить значение смещения

// ajdust this in the inspector
public float offset = 0.1f;

и затем добавить его к позиции в направлении от игрока к цели.Как упоминал Фогзи, это может быть еще не код, способный к копированию, поскольку могут произойти некоторые взлеты.Чтобы по крайней мере предотвратить вращение игрока после превышения цели и перемещения вперед и назад, вы можете использовать метод установки, чтобы получить направление только один раз:

public float offset;
public float threshold = 0.0001f;
public float speed;

private GameObject target;
private Vector3 direction;
private Vector3 targetPosition;

public void SetTarget(GameObject newTarget)
{
    target = newTarget;

    // adding the offset in that direction
    targetPosition = target.transform.position + direction * offset;

    // direction from the player to the target
    direction = (target.transform.position - transform.position).normalized;
}

private void Update()
{
    if (!target) return;

    // make Player overshoot the target by offset
    transform.position = Vector2.MoveTowards(transform.position, targetPosition, (speed * Time.deltaTime));

    // stop if target is reached
    if (Vector3.Distance(transform.position, targetPosition) <= threshold)
    {
        target = null;
    }
}

Я не знаю, когда и как вы меняетецель, поэтому в настоящее время она не ограничивает движение игрока только X и Y, как на ваших фотографиях ... но вы бы это сделали, например,

SetTarget(GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>());

enter image description here

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