Префаб, спавн и патрульные точки

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Префаб, спавн и патрульные точки

Сообщение labinzevvAlex 12 июл 2020, 12:45

Всем привет! Не знаю, правильно ли разместил тему (на форуме зарегался только что)
Возникла проблема: есть префаб с NavMeshAgent и скриптом рандомного патрулирования по точкам.
При запуске игры, этот префаб спавнится(изначально он лежит в ассетах проекта) в сцену скриптом, который уже находится на объекте в сцене.
Так-же точки патруля находятся в сцене. Проблема в том, что я не могу повесить эти точки в инспектор скрипта префаба.
Если же я перемещаю точки из иерархии сцены, в ассеты проекта (т.е. автоматически создаются перфабы), то повесить их в инспектор префаба можно,
но при этом префаб начинает двигаться к краю NavMesh, игнорируя точки патруля. Можно ли как-то наследовать точкам которые я перенёс
в ассеты проекта, координаты точек находящихся в иерархии? Может быть скрипт для этого существует?
(Сорри, если коряво объяснил суть)
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Префаб, спавн и патрульные точки

Сообщение ~AvA~ 12 июл 2020, 13:13

Объекты живущие на сцене заасайнить на префаб не получится, да.
Что можно сделать, так это когда префаб споунится, скрипт на нём должен найти эти точки патруля (например по тэгам или именам)..
Второй вариант, скрипт который споунит префаб, может знать об этих точках (например, заасайнены через эдитор) и при споуне префаба, вытаскивать скрипт префабский и ассайнить эти точки таким образом.
Ещё вариант, что есть какой-то иной объект, который знает об этих точках, и префаб знает об этом объекте..
Есть ещё варианты (из тех, что я знаю), но они более сложные и зависят от архитектуры классов.
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: Префаб, спавн и патрульные точки

Сообщение labinzevvAlex 12 июл 2020, 13:33

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

Спасибо за ответ! теперь хотя бы знаю от чего оттолкнуться:)
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Префаб, спавн и патрульные точки

Сообщение labinzevvAlex 12 июл 2020, 20:09

нда.... с помощью поиска по тегу точки находятся, но объект к ним после спавна так и не движется, ползет куда- то в другую сторону. (хотя если я помещаю объект в сцену изначально, то всё работает...). Прилагаю скрипт, может кто поможет исправить?
Синтаксис:
Используется csharp
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;
            }
        }
    }
}
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Префаб, спавн и патрульные точки

Сообщение ~AvA~ 12 июл 2020, 20:25

Агент должен начать идти вообще после SetDestination
вот это выглядит лишним,не? - transform.position = Vector3.MoveTowards(transform.position, moveSpots[randomSpot].position, speed * Time.deltaTime);
Это раз.
Второе - ты нашёл точки , впихнул их в mPoint , а все расчеты делаешь с moveSpots, вообще не трогая mPoint .. толку от того, что ты их нашел тогда :)
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: Префаб, спавн и патрульные точки

Сообщение labinzevvAlex 12 июл 2020, 23:23

Я в тупике.... как с помощью mPoint = GameObject.FindGameObjectsWithTag("points");
запихать объекты в массив public Transform[] moveSpots
нифига не могу догнать.
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26