2 фпс с передвижением коллайдера

Ошибки и баги Unity3D

2 фпс с передвижением коллайдера

Сообщение Jacman 06 окт 2017, 14:38

Есть созданный в игре меш, на нем висит меш коллайдер и на нем же или на родителе висит ригидбоди, но просадка в фпс такая как и без ригидбоди
Аватара пользователя
Jacman
UNец
 
Сообщения: 47
Зарегистрирован: 24 май 2015, 16:02
  • Сайт

Re: 2 фпс с передвижением коллайдера

Сообщение samana 06 окт 2017, 15:42

Jacman писал(а):созданный в игре меш

Может проблема в создании этого меша. Либо что-то постоянно пересчитывается в нём, откуда же нам знать.

Ещё иногда Unity тормозит, вот просто начинает дёрганно показывать игру, даже пустую сцену. В этом случае достаточно перезагрузить программу.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: 2 фпс с передвижением коллайдера

Сообщение Jacman 06 окт 2017, 16:17

Создаётся в старт

Синтаксис:
Используется csharp
  _projector.fieldOfView = sizeField;
        cam = _projector.GetComponent<Camera>();
       
        cam.fieldOfView = _projector.fieldOfView;

        GameObject g = GameObject.CreatePrimitive(PrimitiveType.Cube);
        Destroy(g.GetComponent<BoxCollider>());
        MeshFilter meshFilter = g.GetComponent<MeshFilter>();
                                                           
        Mesh mesh = new Mesh();
        Vector3[] points = new Vector3[5];
        points[0] = _projector.transform.position;
        points[1] = cam.ViewportToWorldPoint(new Vector3(0, 0, _projector.farClipPlane));
        points[2] = cam.ViewportToWorldPoint(new Vector3(0, 1, _projector.farClipPlane));
        points[3] = cam.ViewportToWorldPoint(new Vector3(1, 0, _projector.farClipPlane));
        points[4] = cam.ViewportToWorldPoint(new Vector3(1, 1, _projector.farClipPlane));

        for (int i = 0; i < 4; i++)
        {
            pointLineObj[i] = new GameObject().transform;
            pointLineObj[i].SetParent(_projector.transform);
            pointLineObj[i].position = points[i + 1];
        }

        mesh.vertices = new Vector3[] {
        points[0], points[1], points[2],
        points[0], points[3], points[1],
        points[0], points[4], points[2],
        points[0], points[3], points[4],
        points[1], points[2], points[4],
        points[1], points[4], points[3]
    };

        mesh.triangles = new int[] {
        0, 1, 2,
        3, 4, 5,
        8, 7, 6,
        11, 10, 9,
        14, 13, 12,
        17, 16, 15
    };

        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
        mesh.MarkDynamic();
        meshFilter.mesh = mesh;
        g.transform.SetParent(_projector.transform);
       // g.AddComponent<TriggerCamera>().cameraEnemy = this;
        g.AddComponent<MeshCollider>().convex = true;
        g.GetComponent<MeshCollider>().isTrigger = true;
        Destroy(g.GetComponent<MeshFilter>());
        Destroy(g.GetComponent<MeshRenderer>());
        g.AddComponent<Rigidbody>().isKinematic = true;
Аватара пользователя
Jacman
UNец
 
Сообщения: 47
Зарегистрирован: 24 май 2015, 16:02
  • Сайт

Re: 2 фпс с передвижением коллайдера

Сообщение samana 06 окт 2017, 16:27

Хм.. так не подскажу, с виду всё вроде нормально.
Попробуйте убрать MarkDynamic, где-то читал, что его не стоит применять. Но возможно это и не правда.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: 2 фпс с передвижением коллайдера

Сообщение Jacman 06 окт 2017, 18:47

К сожалению не помогло, выяснил что проблему создаёт включённый isTrigger
Аватара пользователя
Jacman
UNец
 
Сообщения: 47
Зарегистрирован: 24 май 2015, 16:02
  • Сайт

Re: 2 фпс с передвижением коллайдера

Сообщение seaman 06 окт 2017, 18:55

1. Зачем создавать куб, а потом с него все удалять? Почему просто не создать пустой объект?
2. Зачем что-то добавлять в MeshFilter, если в конце Вы его просто удаляете? Да еще и рендерер удаляете, т.е. ваш объект невидим.
Хотя я кажется понял. Вам нужен чисто коллайдер невидимый по форме фрустум проектора. А отображаете его Вы лайнрендером
Но первый вопрос все же остается.

И главный вопрос - как часто Вы создаете этот меш?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: 2 фпс с передвижением коллайдера

Сообщение Jacman 06 окт 2017, 19:14

Да согласен, создаю с пустым обьектом, но это ситуацию не меняет. Создаётся один раз в Start. Вот что странно что в документации написано что isTrigger не считается физическим движком. А тут получается совсем другая ситуация и да же ригидбоди не помогает.
Аватара пользователя
Jacman
UNец
 
Сообщения: 47
Зарегистрирован: 24 май 2015, 16:02
  • Сайт

Re: 2 фпс с передвижением коллайдера

Сообщение Jacman 06 окт 2017, 19:36

Проблема решена добавлением к коллайдеру маски слоя и в физики отключения взаимодействия всех слоёв кроме нужного.
Аватара пользователя
Jacman
UNец
 
Сообщения: 47
Зарегистрирован: 24 май 2015, 16:02
  • Сайт


Вернуться в Глюки

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

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