@vari0us

Как передвинуть сгруппированые меши ...?

Имеется сгруппированый объект состоящий из нескольких стандартных мешей, например куб, сфера, капсюль, главный объект к которому все крепится - это куб.
теперь смотрите для физики у каждого объекта группы есть колайдеры соответствующие их форме.
Есть объект типа портала, который перемещает все что попало в его тригер колайдер.
Если туда попадает эта хрень состоящая из нескольких мешей, то он пытается их все переместить и получается непойми что.Например если в тригер попала часть объекта допустим сфера, как определить что она является частью объекта и что сфера не является главным родителем (если у нее имеются дети)?
7680ca743923448283badd7794470bb7.JPG
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@vari0us Автор вопроса
Сделал в лоб, вот код на телепортаоре, не доделанный, но работает .
/*!!!!!!!!!!!!!!!!-=Код тестовый=-!!!!!!!!!!!!!!!!!!!!!!*/
  
  void OnTriggerStay(Collider collider)//коллайдер объекта в нашем коллайдере
  {
    float use = Input.GetAxis ("Use");//Игрок нажал юз
    
    if (collider.transform.parent == null && use != 0 /*Input.GetKey(KeyCode.E)*/) {//Ели нет родителя то объект в тригере сам родитель, значит перемещать можно.

      collider.gameObject.transform.position = new Vector3 (Obj_move_to.transform.position.x, Obj_move_to.gameObject.transform.position.y + 1f, Obj_move_to.transform.position.z);//Тупо перемещаем в позиции Obj_move_to, Obj_move_to - это приемная площадка телепортера в который отправляемся.
      

    } else if (collider.transform.parent && use != 0) {//Если есть парент, значит в телепортер попало дите
      GameObject parent = collider.transform.parent.gameObject;//моно заглючил,  я сделал для удобства так
      if (parent.transform.parent == null)//Если родитель не имеет родителя то его можно перемещать
      {
        parent.transform.position = new Vector3 (Obj_move_to.transform.position.x, Obj_move_to.gameObject.transform.position.y + 1f, Obj_move_to.transform.position.z);
      }
    
    }
    
  }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vovo801
Freelance Unity3d/C# Developer
Как вариант - заведите для этого всего объекта тэг. Когда будете ставить тэг - ставьте его на Ваш куб (то есть на главный объект). Оно предложит поставить на все чайлд объекты. При заходе в Ваш телепортатор - проверяйте какой тэг на том, что в него залезло. Если это ОНО - то на чем тэг)) - перемещайте все сразу.
Вариант второй - заумный. Можно создать отдельный слой (Layer) и отключить его в настройках физики, чтобы он не контактировал ни с чем, поставить этот слой на Ваш триггер коллайдер в телепорте. Теперь на каждый объект, который должен телепортироватся можно прицепить 1 такой коллайдер - допустим, сферу или куб - что больше подходит, который будет просто покрывать весь объект.
Таким образом - как бы отделили физику от телепортирования. Все телепортирование будет на отдельном слое детектиться. Я подобное делал в одном своем проекте. Извините за заумность. Если что, могу подробнее описать.
Ответ написан
Ваш ответ на вопрос

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

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