Ответы пользователя по тегу Unity
  • Как вращать target параллельно камере но только по оси X?

    @Andrei1805
    Если я правильно понял суть вопроса, то решается задача в одну строчку. Есть GameObject target и GameObject camera, target вращается вместе с камерой по x.
    target.transform.eulerAngles = new Vector3(camera.transform.rotation.ToEulerAngles().x * Mathf.Rad2Deg, 0, 0);

    Если, например, надо не по x, а по y то:
    target.transform.eulerAngles = new Vector3(0, camera.transform.rotation.ToEulerAngles().y * Mathf.Rad2Deg, 0);
    Ответ написан
    Комментировать
  • Как мне получить все объекты, падающие на зону триггера?

    @Andrei1805
    В скрипте объекта должна лежать какая то public переменная in_zone, которая по умолчанию false. Также объект надо как-то узнавать, например по тэгу, но можно придумать много других способов. Например скрипт у объекта называется object_skript. Тогда в скрипте зоны:

    List<GameObject>  objects;
    void OnTriggerEnter(Collider other)
    {
        if(other.tag == "object") //Можно выбрать любой тэг
        {
            if(!other.GetComponent<object_skript>().in_zone) // проверка не в зоне ли уже объект
            {
                other.GetComponent<object_skript>().in_zone = true; // объект попал в зону
                objects.Add(new GameObject());
                objects[objects.Count - 1] = other.gameObject; // Добавление в лист нового компонента
            }
        }
    }


    Ну и дальше там можно смотреть на objects.Count и сравнивать его с чем надо. Также если где-то будет удаление объектов из листа, то в листе будут возникать позиции с null, тогда добавление в лист лучше написать так:

    bool x = true;
    for(int i = 0; i < objects.Count;)
    {
       if(objects[i] == null)
       {
           x = false;
           objects[i] = other.gameObject;
           other.GetComponent<object_skript>().in_zone = true;
           break;
       }
       ++i;
    }
    if(x)
    {
       other.GetComponent<object_skript>().in_zone = true;
       objects.Add(new GameObject());
       objects[objects.Count - 1] = other.gameObject;
    }
    Ответ написан
    3 комментария
  • Получить вектор перемещения в NavMesh Unity?

    @Andrei1805
    Я в unity не эксперт, но я не знаю никакой специализированной команды для этого. Есть такой вариант:
    Vector3 last_position, move_vector = Vector3.zero;
    void Start()
    {
      last_position = transform.position;
    }
    void FixedUpdate()
    {
         move_vector = transform.position - last_position; //Определения вектора, направленного от предыдущей позиции к следующей
          last_position =  transform.position; // Переназначение предыдущей позиции
    }

    Также это все можно делать не просто в FixedUpdate(), а запустить таймер, чтобы вектор определялся через большие промежутки времени типа:

    float deltatime, timer;
    void Update()
    {
      if(Time.time > timer)
      {
         move_vector = transform.position - last_position; 
          last_position =  transform.position; 
         timer+=deltatime;
      }
    }
    Ответ написан
    Комментировать