Lololishka
@Lololishka
IT наше все

Как сделать заданную видимость у бота?

Есть бот. Он ходит за мной, убивает и т.д, но он ходит за мной из-за того, что в персонаже установлены поинты, за которыми он(бот) ходит.
Мне нужно чтобы бот двигался за мной на определенной дистанции, чтоб когда я вышел из этой зоны, он меня не преследовал.
Вот код:
using UnityEngine;
using System.Collections;

public class Enemies : MonoBehaviour
{

    public Transform[] patrolpoints;
    int currentPoint;
    public float speed = 0.5f;
    public float timestill = 2f;
    public float sight = 3f;
    Animator anim;
    public float force;

    // Use this for initialization
    void Start()
    {
        anim = GetComponent<Animator>();
        StartCoroutine("Patrol");
        anim.SetBool("walking", true);
        Physics2D.queriesStartInColliders = false;
    }

    // Update is called once per frame
    void Update()
    {

        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.localScale.x * Vector2.right, sight);
        if (hit.collider != null && hit.collider.tag == "Player")
            GetComponent<Rigidbody2D>().AddForce(Vector3.up * force + (hit.collider.transform.position - transform.position) * force);
    }


    IEnumerator Patrol()
    {
        while (true)
        {

            if (transform.position.x == patrolpoints[currentPoint].position.x)
            {
                currentPoint++;
                anim.SetBool("walking", false);
                yield return new WaitForSeconds(timestill);
                anim.SetBool("walking", true);
            }


            if (currentPoint >= patrolpoints.Length)
            {
                currentPoint = 0;
            }

            transform.position = Vector2.MoveTowards(transform.position, new Vector2(patrolpoints[currentPoint].position.x, transform.position.y), speed);

            if (transform.position.x > patrolpoints[currentPoint].position.x)
                transform.localScale = new Vector3(-1, 1, 1);
            else if (transform.position.x < patrolpoints[currentPoint].position.x)
                transform.localScale = Vector3.one;


            yield return null;


        }
    }


    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Projectile")
            Destroy(this.gameObject, 0.1f);
    }


    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;

        Gizmos.DrawLine(transform.position, transform.position + transform.localScale.x * Vector3.right * sight);

    }

}
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
TheTalion
@TheTalion
Тут не видно, что персонаж ходит за кем-то - он ходит по точкам.
Если нужно сделать движение бота за вами только в определенной зоне, то можно ограничить зону триггером, который бы реагировал на вход-выход персонажа и сообщал об этом патрулирующему.

Если нужно, чтобы персонаж отставал на какой-то дистанции, то просто дистанцию возьмите от персонажа к патрулирующему и проверяйте соблюдена ли она (в поиске можно найти как получить дистанцию цифрой из
двух векторов).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы