Задать вопрос
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);

    }

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

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

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

Похожие вопросы