У меня есть патрулирующий враг и коробочный коллайдер, который действует как триггер области, когда игрок входит в него. Когда игрок входит в это поле, мой враг начинает следовать за ним и встает в положении стоя на расстоянии нескольких единиц от игрока. Однако, когда игрок выходит из боксового коллайдера, враг телепортируется на последнюю позицию, в которой он находился перед следующим игроком.
Я видел, как решается эта похожая тема, но не нашел ни одной, похожей на мою,
public Vector3 pos1 = new Vector3(10, 0, 0);
public Vector3 pos2 = new Vector3(14, 0, 0);
public float speed;
public float stoppingDistance;
public void FollowPlayer()
{
Aggro aggro = aggroBox.GetComponent<Aggro>();
if(aggro.playerIsIn == true)
{
if (Vector2.Distance(transform.position, player.position) > stoppingDistance)
{
transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
isMoving = true;
}
else if ((Vector2.Distance(transform.position, player.position) < stoppingDistance))
{
transform.position = this.transform.position;
}
}
else
{
MoveEnemy();
}
}
public void MoveEnemy()
{
float pingPongT = Time.time * speed;
float pingPongLength = 1.0f;
transform.position = Vector3.Lerp(pos1, pos2, Mathf.PingPong(pingPongT, pingPongLength));
float repeatedPingPong = Mathf.Repeat(pingPongT, pingPongLength * 2f);
if (repeatedPingPong < pingPongLength)
{
sr.flipX = false;
}
else
{
sr.flipX = true;
}
}
Я хочу, чтобы мой вражеский скрипт начал вычислять math.pingpong с последней позиции, в которой он находился до того, как игрок покинул область, и снова начал патрулировать с позиции 1 до позиции 2 и наоборот.