Задать вопрос
@Vinovat

Что делать если персонаж двигается влево после добавления скрипта на врага?

Так вот создал скрипт для врага который преследует игрока и наоборот
после добавления скрипта персонаж начал перемещаться влево
Вот и скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{

    public float speed;
    public float stoppingdistance;
    public float retreatDistance;

    private float timeBtwShots;
    public float startTimeBtwShoots;

    public GameObject projectile;
    public Transform player;
    // Start is called before the first frame update
    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;

        timeBtwShots = startTimeBtwShoots;
    }

    // Update is called once per frame
    void Update()
    {
        if (Vector2.Distance(transform.position,player.position) > stoppingdistance)
        {
            transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
        }
        else if (Vector2.Distance(transform.position, player.position) < stoppingdistance && (Vector2.Distance(transform.position, player.position) > retreatDistance))
        {
            transform.position = this.transform.position;
        }
        else if (Vector2.Distance(transform.position, player.position) < retreatDistance)
        {
            transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
        }


        if (timeBtwShots <=0)
        {
            Instantiate(projectile, player.position, Quaternion.identity);
            timeBtwShots = startTimeBtwShoots;
        }
        else
        {
            timeBtwShots -= Time.deltaTime;
        }

    }
}

P.s Именно этот скрипт перемещает игрока, я уже пробовал включать выключать скрипты и дело именно в нем
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DrRen7
else if (Vector2.Distance(transform.position, player.position) < stoppingdistance && (Vector2.Distance(transform.position, player.position) > retreatDistance))
        {
            transform.position = this.transform.position;
        }

это не нужно transform.position = this.transform.position; не имеет смысл
else if (Vector2.Distance(transform.position, player.position) < retreatDistance)
        {
            transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
        }

проблема скорее всего тут, вероятно лучше не скорость умножать на минус 1 а таргет позишен

float dist=Vector2.Distance(transform.position,player.position);
if(dist>stoppingdistance)transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
else if(dist<retreatDistance) transform.position = Vector2.MoveTowards(transform.position, player.position*-Vector2.one, speed * Time.deltaTime); //тут надо смотреть на игра сбоку или вид с верху

а ну и конечно stoppingdistance>retreatDistance
а и да если этот скрип есть на персонаже то персонаж будет сам от себя убегать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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