@Ost234

Как сделать так чтобы объект шёл рандомно от объекта к объекту?

Как сделать так чтобы объект шёл от точки к точке рандомно с тегом "Point" , а когда увидит игрока в тегом "Player" то будет идти за ним и если потеряет то будет снова идти от точке к точке рандомно, куда вешать скрипт ,помогите пожалуйста
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
Steel_Balls
@Steel_Balls
Дай сначала определение слову "рандомно" и что ты под этим понимаешь
Ответ написан
@DrRen7
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Tester : MonoBehaviour
{
    [SerializeField] List<Transform> _allPoint=new List<Transform>();
    Transform _targetPos;
    [SerializeField] Transform _playerPos;
    [SerializeField] float _playerTargetDis;
    [SerializeField] float _stopDistans;
    [SerializeField] float _speed;
    bool _isToPlayer;

    private void Start()
    {
        SetAllPoint();
        _targetPos = SelectRandom();
    }

    void SetAllPoint()
    {
        foreach (GameObject t in GameObject.FindGameObjectsWithTag("Point"))
        {
            _allPoint.Add(t.transform);
        }
    }
    Transform SelectRandom()
    {
        int rand = Random.Range(0, (_allPoint.Count));
        Debug.Log(rand);
        return _allPoint[rand];
    }
    private void Update()
    {
        if (_isToPlayer) MoveToPlayer();
        else MoveToPoint();
        
              
    }
    private void FixedUpdate()
    {
        _isToPlayer = SeePlayer();
    }
    void MoveToPoint()
    {
        transform.position = Vector3.MoveTowards(transform.position, _targetPos.position, _speed * Time.deltaTime); //заменить мб движение по нашмешу
        if(Vector3.Distance(transform.position, _targetPos.position) < _stopDistans) _targetPos = SelectRandom();
    }
   void MoveToPlayer()
    {
        transform.position = Vector3.MoveTowards(transform.position, _playerPos.position, _speed * Time.deltaTime);
    }

    bool SeePlayer() //тут это от проекта зависит я сделал от дальности без поля зрения и тд
    {
        if (Vector3.Distance(transform.position, _playerPos.position) > _playerTargetDis) return false;
        return true;
    }

}

ну это самое простое решение, мало вводных как объект перемещает мб навмешь и тд плюс надо подумать поле зрения и тд
Ответ написан
Ваш ответ на вопрос

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

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