Четверг, 14 Ноября 2024, 19:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Префаб, спавн и патрульные точки в unity
labinzevvДата: Понедельник, 13 Июля 2020, 10:11 | Сообщение # 1
частый гость
Сейчас нет на сайте
Привет народ! Возникла проблема: есть префаб с NavMeshAgent и скриптом рандомного патрулирования по точкам.
При запуске игры, этот префаб спавнится(изначально он лежит в ассетах проекта) в сцену скриптом, который уже находится на объекте в сцене.
Так-же точки патруля находятся в сцене. Проблема в том, что я не могу повесить эти точки в инспектор скрипта префаба.
Если же я перемещаю точки из иерархии сцены, в ассеты проекта (т.е. автоматически создаются перфабы), то повесить их в инспектор префаба можно,
но при этом префаб начинает двигаться к краю NavMesh, игнорируя точки патруля. Можно ли как-то наследовать точкам которые я перенёс
в ассеты проекта, координаты точек находящихся в иерархии? Я понимаю, что нужно использовать поиск по тэгам, но как найденные объекты добавить в массив не догоню. Сам скрипт:
Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class patrolRandomRotate : MonoBehaviour
{
    public Transform[] moveSpots;
    private int randomSpot;
    NavMeshAgent nav;

    public float speed = 3f;

    private float waitTime;
    public float startWaitTime = 0.5f;

    GameObject[] mPoint;

    void Start()
    {
        mPoint = GameObject.FindGameObjectsWithTag("points");
        Debug.Log(mPoint.Length);

        waitTime = startWaitTime;
        randomSpot = Random.Range(0, moveSpots.Length);
    }

    private void Awake()
    {
        nav = GetComponent<NavMeshAgent>();
        nav.enabled = true;
    }

    void Update()
    {
        Patroling();
    }

    void Patroling()
    {
        nav.SetDestination(moveSpots[randomSpot].position);

        transform.position = Vector3.MoveTowards(transform.position, moveSpots[randomSpot].position, speed * Time.deltaTime);

        if (Vector3.Distance(transform.position, moveSpots[randomSpot].position) < 2.0f)
        {
            if (waitTime <= 0)
            {
                randomSpot = Random.Range(0, moveSpots.Length);

                waitTime = startWaitTime;
            }
            else
            {
                waitTime -= Time.deltaTime;
            }
        }
    }
}


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг