Пятница, 18 Сентября 2020, 11:41

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » labinzevv [18]
Результаты поиска
labinzevvДата: Пятница, 31 Июля 2020, 20:18 | Сообщение # 1 | Тема: Удаление объекта из массива
был не раз
Сейчас нет на сайте
Всем привет. Следующий вопрос:
есть массив GameObject[] mChased (используется для преследования)
В определенный момент объекты из массива удаляются, после этого ошибка:

MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
UnityEngine.Transform.get_position () (at <d1422b3fc93746018c92eda852993b93>:0)
controlWolf.Update () (at Assets/Scripts/controlWolf.cs:100)

Вопрос: как из массива удалить поля missing, чтобы избежать ошибки
Пробовал в update запускать цикл for, который заново заполняет массив, ошибка исчезает но в этом случае
объект который потерял цель преследования перестаёт работать вообще.
Подскажите решение плиз.
Вот скрипт:
Код

public Transform[] chased;            
public Transform[] patrolPoint;     

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

    void Start()
    {
        mChased = GameObject.FindGameObjectsWithTag("characters");   
        chased = new Transform[mChased.Length];                     
                    
        for (int i = 0; i < mChased.Length; i++)                     
        {                    
            chased[i] = mChased[i].transform;                      
        }                    

        mPoint = GameObject.FindGameObjectsWithTag("point");        
        patrolPoint = new Transform[mPoint.Length];                 
                    
        for (int i = 0; i < mPoint.Length; i++)                     
        {                    
            patrolPoint[i] = mPoint[i].transform;                   
        }                    

        randomPoint = Random.Range(0, patrolPoint.Length);
        randomchased = Random.Range(0, chased.Length);
    }
       
    void Update()
    {
        if (chased[0] == false)
        {
            Patroling();
            wolf.SetBool("wolf_attack", false);
            wolf.SetBool("wolf_walk", true);
        }
               
        float distance = Vector3.Distance(chased[randomchased].position, transform.position);

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


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

Сообщение отредактировал labinzevv - Пятница, 31 Июля 2020, 20:19
labinzevvДата: Среда, 29 Июля 2020, 17:51 | Сообщение # 2 | Тема: Переменные для Renderer компонентов
был не раз
Сейчас нет на сайте
Всем привет! Такой вопрос:
есть скрипт для изменения альфаканала материала, в этом скрипте две публичные переменные для
Renderer компонентов. Первый компонент Renderer на родном объекте, а второй добавляю с другого объекта.
При запуске игры, второй компонент из поля исчезает и на его место автоматически присваивается первый компонент.
Пробую добавить второй компонент в ручную уже в запущенной игре- добавляется, а вот работать не хочет. Причем с первым компонентом все ок. Так же первый компонент Renderer.material при запуске игры имеет подпись instance
Может кто подскажет почему это происходит и как с этим бороться?
Вот скрипт: (не полный, то что не по теме вырезал)
Код

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

public class levelHealthAndDamage : MonoBehaviour
{

    public Renderer rend;                        
    public Renderer rend2;

    void Start()
    {
        rend = GetComponent<Renderer>();          
        rend2 = GetComponent<Renderer>();                   
    }

IEnumerator invisible()                    
                    
    {
        for (float f = 1f; f >= 0.01; f -= 0.03f)                 
        {
            Color color = rend.material.color;                    
            color.a = f;                    
            rend.material.color = color;                           
            yield return new WaitForSeconds(0.05f);                
        }
    }
    IEnumerator invisible2()                    
                    
    {
        for (float f = 1f; f >= 0.01; f -= 0.03f)                  
        {
            Color color1 = rend2.material.color;                  
            color1.a = f;                    
            rend2.material.color = color1;                        
            yield return new WaitForSeconds(0.05f);               
        }
    }
}


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

Сообщение отредактировал labinzevv - Среда, 29 Июля 2020, 17:52
labinzevvДата: Суббота, 25 Июля 2020, 11:51 | Сообщение # 3 | Тема: Воздействие силы на navmeshagent
был не раз
Сейчас нет на сайте
Цитата drcrack ()
Код
public NavMeshAgent agent;
float power = -10;
float offset;
void OnEnable() {
  agent.updatePosition = false;
}
void Update() {
  power = Mathf.Clamp(power - 10 * Time.deltaTime, -10, 1000);
  offset = Mathf.Clamp(offset + power * Time.deltaTime, 0, 10);
  transform.position = agent.nextPosition + Vector3.up * offset;
}
public void Boom(float power) {
  this.power += power;
}

как-то так


Спасибо за помощь! Вечером попробую осуществить


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Суббота, 25 Июля 2020, 08:43 | Сообщение # 4 | Тема: Воздействие силы на navmeshagent
был не раз
Сейчас нет на сайте
Цитата drcrack ()
отбрасывание по y проще сделать отдельным скриптом безо всякой физики и rigidbody

Это то что нужно, а можно хотя бы намек, как это осуществить?


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Суббота, 25 Июля 2020, 08:30 | Сообщение # 5 | Тема: Воздействие силы на navmeshagent
был не раз
Сейчас нет на сайте
Всем привет. Такая ситуация: На объект добавлен navmeshagent для преследования. Так же добавлен rigidbody. Есть ли способ воздействовать на navmeshagent с помощью физики, для его перемещения по оси Y? Если есть, подскажите в каком направлении искать? (К примеру под ним происходит взрыв, при котором его отбрасывает по оси Y). Пробовал как вариант baseOffset, но не подходит. Нужно именно физическое воздействие...

3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Понедельник, 20 Июля 2020, 18:44 | Сообщение # 6 | Тема: из GameObject в Transform. Как?
был не раз
Сейчас нет на сайте
Цитата seaman ()
Так ты же все равно не учишься.
Тырканье без понимания - это не учебы.


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


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Понедельник, 20 Июля 2020, 15:16 | Сообщение # 7 | Тема: из GameObject в Transform. Как?
был не раз
Сейчас нет на сайте
Цитата drcrack ()
в скрипте выше нет второго массива


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

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


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

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

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


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

Сообщение отредактировал labinzevv - Понедельник, 20 Июля 2020, 16:44
labinzevvДата: Понедельник, 20 Июля 2020, 12:39 | Сообщение # 8 | Тема: из GameObject в Transform. Как?
был не раз
Сейчас нет на сайте
Цитата 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
labinzevvДата: Понедельник, 20 Июля 2020, 09:41 | Сообщение # 9 | Тема: из GameObject в Transform. Как?
был не раз
Сейчас нет на сайте
Цитата 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
labinzevvДата: Понедельник, 20 Июля 2020, 07:49 | Сообщение # 10 | Тема: из GameObject в Transform. Как?
был не раз
Сейчас нет на сайте
В очередной раз всех приветствую!
Прошу не кидаться тапками (наверняка вопрос банальный), я только начинаю осваивать азы.
Ну и собстенно вопрос :
как из 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
labinzevvДата: Суббота, 18 Июля 2020, 21:44 | Сообщение # 11 | Тема: Спавн префаба и Animator
был не раз
Сейчас нет на сайте
Цитата drcrack ()
А второй скрипт хз зачем нужен вообще. Удали его и просто вызови Destroy когда нужно из первого

Спасибо за ответ! работает. По поводу destroy-тоже переделал.


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Суббота, 18 Июля 2020, 07:58 | Сообщение # 12 | Тема: Спавн префаба и Animator
был не раз
Сейчас нет на сайте
Цитата drcrack ()
ТС, зачем ты код описываешь словами, ты что, внебрачный правнук Толстого?
Просто выложи его


=)))
активация Animator:
Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SwithAnim : MonoBehaviour // запуск анимации мины
{

    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Untagged")
        {
                GameObject swith = GameObject.Find("bomb(Clone)"); // здесь GameObject swith (может быть любой объект) ищет объект bomb
                Animator animator = swith.GetComponent<Animator>(); // здесь находится нужный аниматор
                animator.enabled = true; // происходит включение аниматора
        }
    }
}


destroy:
Код

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

public class destroy : MonoBehaviour // для удаления бомбы и смерча из сцены
{
    public GameObject obj;
    public float timer = 2f;

    void Update()
    {
        Destroy(obj, timer);
    }
}


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Пятница, 17 Июля 2020, 22:55 | Сообщение # 13 | Тема: Спавн префаба и Animator
был не раз
Сейчас нет на сайте
Всем привет.
Такой вопрос:
В сцену спавнится объект из префаба через определённый промежуток времени, на него добавлен триггер, по которому активируется Animator и destroy объекта.(Если триггер задействовать до появления второго объекта, то все работает нормально). Спустя время, спавнится ещё объект из того-же префаба и вот тут возникает проблема: если задействовать триггер второго объекта, то активируется Animator на первом. Т.е. одновременно на первом и втором объекте Animator не срабатывает. Может кто нибудь подскажет в чем дело?


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Пятница, 17 Июля 2020, 22:29 | Сообщение # 14 | Тема: eventTrigger
был не раз
Сейчас нет на сайте
Цитата drcrack ()
Исправь boolean на bool, update на Update и будет работать

Спасибо! так и сделал


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Среда, 15 Июля 2020, 10:26 | Сообщение # 15 | Тема: eventTrigger
был не раз
Сейчас нет на сайте
Я понял, спасибо. Так получается в eventTrigger нет функции удержания?

3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Среда, 15 Июля 2020, 09:47 | Сообщение # 16 | Тема: eventTrigger
был не раз
Сейчас нет на сайте
Всем привет! такой вопрос:
Есть UI Button, на неё добавлено событие EventTrigger- PointerDown. в само событие добавлен объект со скриптом.
В скрипте вызывается метод: public void rotateLeft()
{
transform.Rotate(0, rotateSpeed * Time.deltaTime * 100, 0);
}
По идее, как я понял, при зажатии UI Button, этот метод должен запуститься и работать, пока UI Button не будет отпущена.
Проблема в том, что при нажатии, этот метод срабатывает единожды и останавливается(один кадр). Если же сделать этот метод Update, то
он запускается автоматически и продолжает работать постоянно.
Все остальные события в EventTrigger перепробовал, но результат тот-же.
Подтолкните, в каком направлении двигаться для решения проблемы?


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Понедельник, 13 Июля 2020, 13:33 | Сообщение # 17 | Тема: проблема с массивами
был не раз
Сейчас нет на сайте
Привет.
есть массив public Transform[] moveSpots;
как этому массиву задать поиск объектов по тэгу?
и возможно ли это?
для public GameObject[] moveSpots;
ищет без проблем:
moveSpots = GameObject.FindGameObjectsWithTag("points");
а вот как для public Transform[] moveSpots; весь интернет перевернул...
Если подобного не существует, подскажите, как передать из GameObject[] в Transform[]?
Очень нужно, помогите!
Заранее спасибо!


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
labinzevvДата: Понедельник, 13 Июля 2020, 10:11 | Сообщение # 18 | Тема: Префаб, спавн и патрульные точки в unity
был не раз
Сейчас нет на сайте
Привет народ! Возникла проблема: есть префаб с 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
Форум игроделов » Записи участника » labinzevv [18]
  • Страница 1 из 1
  • 1
Поиск:

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