Понедельник, 11 Ноября 2024, 03:45

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
из GameObject в Transform. Как?
labinzevvДата: Понедельник, 20 Июля 2020, 07:49 | Сообщение # 1
частый гость
Сейчас нет на сайте
В очередной раз всех приветствую!
Прошу не кидаться тапками (наверняка вопрос банальный), я только начинаю осваивать азы.
Ну и собстенно вопрос :
как из GameObject.FindGameObjectsWithTag("Untagged") передать координаты найденных объектов в public Transform player?

Код

public Transform player;
public GameObject[] mTarget;
  void Start()
    {
mTarget = GameObject.FindGameObjectsWithTag("Untagged");
    }


(Может в GameObject массив и не нужен, но без него не работает поиск по тегу)
заранее благодарен


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
GMasstaДата: Понедельник, 20 Июля 2020, 07:53 | Сообщение # 2
частый гость
Сейчас нет на сайте
Это спавн?

Можно так:

Код
player.position = mTarget[Random.Range(0, mTarget.Length())].transform.position; // Забыл как там у массива размер берется length, size, count


Make games, not war
Посмотри мои игры для мобилок, влепи лукаса!
Тут я делаю игры на Unity


Сообщение отредактировал GMassta - Понедельник, 20 Июля 2020, 07:56
drcrackДата: Понедельник, 20 Июля 2020, 07:55 | Сообщение # 3
старожил
Сейчас нет на сайте
Ты ж неделю назад спрашивал уже?
https://gcup.ru/forum/46-102727-1


Сообщение отредактировал drcrack - Понедельник, 20 Июля 2020, 07:55
labinzevvДата: Понедельник, 20 Июля 2020, 09:41 | Сообщение # 4
частый гость
Сейчас нет на сайте
Цитата drcrack ()
Ты ж неделю назад спрашивал уже?
https://gcup.ru/forum/46-102727-1

Сорри запутался, с той темой разобрался.
Теперь другая проблема возникла:

Есть массив public Transform[] moveSpots, в него передаются данные из public GameObject[]
И есть просто public Transform player, вот как туда передать не знаю.
Хотел второй Transform тоже массивом сделать, но unity пишет ошибку, типа два массива нельзя...
А как раз в этой ситуации нужно два массива. Первый под точки патруля, второй под приследуемые цели (их тоже несколько по задумке)

в общем вот скрипт полностью:
Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class patrolRandomAndChase : MonoBehaviour
{
    
    public Transform player;
    public Transform[] moveSpots;
    private int randomSpot;  
    public float distToPlayer;
    public float chaseRadius = 7f;
    public float speed = 6f;

    private float waitTime;
    public float startWaitTime = 0.1f;

    Animator wolf;
    NavMeshAgent nav;

    public GameObject[] mPoint = { };
    public GameObject[] mTarget;

    void Start()
    {
        

        mPoint = GameObject.FindGameObjectsWithTag("point");
        moveSpots = new Transform[mPoint.Length];

        for (int i = 0; i < mPoint.Length; i++)
        {
            moveSpots[i] = mPoint[i].transform;
        }

        mTarget = GameObject.FindGameObjectsWithTag("Untagged");                    
       //дальше не знаю что делать...

        waitTime = startWaitTime;
        randomSpot = Random.Range(0, moveSpots.Length);
        wolf = GetComponent<Animator>();
    }

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

    void Update()
    {
        float distance = Vector3.Distance(player.position, transform.position);

        if (distance > chaseRadius)
        {
            Patroling();
        }
        else if (distance <= chaseRadius)
        {
            ChasePlayer();
        }

        distToPlayer = Vector3.Distance(player.position, transform.position);

        if (distToPlayer > 7f)
        {
            wolf.SetBool("wolf_walk", true);
        }
        else wolf.SetBool("wolf_walk", false);

        if (distToPlayer < 7f)
        {
            wolf.SetBool("wolf_attack", true);
        }
        else wolf.SetBool("wolf_attack", false);
    }
    void Patroling()
    {
        nav.SetDestination(moveSpots[randomSpot].position);

        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;
         }
      }
    }
    void ChasePlayer()
    {
        float distance = Vector3.Distance(player.position, transform.position);

        if (distance <= chaseRadius && distance > distToPlayer)
        {
            nav.SetDestination(player.transform.position);
        }
    }
}


Цитата GMassta ()
Это спавн?


это патрулирование и приследование после спавна из префаба.


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
drcrackДата: Понедельник, 20 Июля 2020, 11:14 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата
Хотел второй Transform тоже массивом сделать, но unity пишет ошибку, типа два массива нельзя...

покажи код и ошибку
labinzevvДата: Понедельник, 20 Июля 2020, 12:39 | Сообщение # 6
частый гость
Сейчас нет на сайте
Цитата drcrack ()
покажи код и ошибку


вот текст ошибки:
Assets\!tests\patrolRandomAndChase.cs(111,39): error CS1061: 'Transform[]' does not contain a definition for 'transform' and no accessible extension method 'transform' accepting a first argument of type 'Transform[]' could be found (are you missing a using directive or an assembly reference?)

сам скрипт выше


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv

Сообщение отредактировал labinzevv - Понедельник, 20 Июля 2020, 12:40
drcrackДата: Понедельник, 20 Июля 2020, 12:56 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата
сам скрипт выше

в скрипте выше нет второго массива, также в тексте ошибки нет ни слова о том что "два массива нельзя"
вообще рекомендую скачать какую-нибудь книгу C# и отложить Unity на месяц, тебе реально сложно будет с таким уровнем
labinzevvДата: Понедельник, 20 Июля 2020, 15:16 | Сообщение # 8
частый гость
Сейчас нет на сайте
Цитата drcrack ()
в скрипте выше нет второго массива


Выше, над выложенным скриптом я описал ситуацию по поводу второго массива и почему не получилось его использовать.

Цитата labinzevv ()
вообще рекомендую скачать какую-нибудь книгу C# и отложить Unity на месяц


Ну естественно я нашел нужную литературу (вы действительно считаете, что не догадался 0_о). Единственно не понял зачем забрасывать юнити? По мне, изучение на практике гораздо продуктивней, чем на абстрактных примерах из книг.

Кстати проблема со скриптом уже решена, как раз таки методом проб, непосредственно на практике ;)

А такие советы попросту могут у кого-то отбить желание учиться...


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv

Сообщение отредактировал labinzevv - Понедельник, 20 Июля 2020, 16:44
seamanДата: Понедельник, 20 Июля 2020, 16:46 | Сообщение # 9
старожил
Сейчас нет на сайте
Так ты же все равно не учишься.
Тырканье без понимания - это не учебы.
labinzevvДата: Понедельник, 20 Июля 2020, 18:44 | Сообщение # 10
частый гость
Сейчас нет на сайте
Цитата seaman ()
Так ты же все равно не учишься.
Тырканье без понимания - это не учебы.


Если бы тырканье без понимания, то и результата не было бы.
А вот поиск необходимого в данным момент решения , с использованием литературы,
это как раз тот подход, который дает результаты. Ну по крайней мере у меня так. :)


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
Animan2010Дата: Понедельник, 20 Июля 2020, 19:57 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Конкретно transform в gameobject это одно из свойств, отвечающее за позицию, поворот, масштаб (scale).
Каждый из полученных вами transform'ов это разные экземпляры класса transform, содержащие разные позиции, поворот, масштаб.
Вы не можете засунуть сразу все координаты из массива трансформов в этот трансформ, ибо их много, а он один. Но можете скопировать из любого из этих трансформов.


Anima Games
Animan Publishing
  • Страница 1 из 1
  • 1
Поиск:

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