Оптимизация 2d. Резкое движение и пикселизация.

Раздел, посвящённый самому важному - скорости.

Оптимизация 2d. Резкое движение и пикселизация.

Сообщение Nasty 10 апр 2016, 22:41

Доброго времени суток.
Есть префаб
Изображение
tri - треугольники по бокам куба, на них висит полигон коллайдер.
cube - квадрат с бокс коллайдером, дополнительно на нем висит скрипт вращения.
Синтаксис:
Используется csharp
transform.Rotate(Vector3.forward * -50 * Time.deltaTime, Space.World);

body - на нем висит бокс коллайдер.

Есть пустой объект с со скриптом пула этого префаба, активирует/деактивирует префабы за границами камеры и задает им скорость.

Этот скрипт проверяет нужно ли активировать префаб
Синтаксис:
Используется csharp
    void func()
    {
        float t = 0;
        yes = true;
        float nullPoint = width/2;
        for(int i =0; i<pooledObjects.Count;i++)
        {
            if (pooledObjects[i].activeInHierarchy)
            {
                float position = pooledObjects[i].transform.position.x;
                float widthObject = pooledObjects[i].transform.GetComponent<BoxCollider2D>().size.x;
                float startX = position - widthObject * 0.5f;
                float endX = position + widthObject * 0.5f;

                if (endX > width * 0.5f)
                {
                    yes = false;
                }
                if (endX < -width * 0.5f)
                {
                    pooledObjects[i].SetActive(false);
                }
                if (endX < width * 0.5f)
                {
                    if (t < endX)
                    {
                        t = endX;
                    }
                    nullPoint = t;
                }
                pooledObjects[i].transform.Translate(Vector3.right * -3 * Time.fixedDeltaTime);
               
            }

        }
        if(yes)
        addObj(nullPoint);
    }


Если нужно, то вызываем
Синтаксис:
Используется csharp
   void addObj(float zet)
    {
        for (int i = 0; i < pooledObjects.Count; i++)
        {
            if (!pooledObjects[i].activeInHierarchy)
            {
                float widthX = pooledObjects[i].GetComponent<BoxCollider2D>().size.x;
                float EndX = widthX*0.5f;
                zet = zet + EndX;
                pooledObjects[i].transform.position = new Vector3(zet, 0, 0);
                pooledObjects[i].SetActive(true);
                break;
            }
        }
       
    }


Проблем в том что:
1) Движение по "x" размытое и немного резкое
2) Когда игрок сталкивается с "tri" то тайм скейл устанавливается в ноль и "cube" зaстывшие во время поворота очень низкого качества.
Изображение
P.S. Столкновение вычисляется через дистанцию. Все функции вызываются в fixedupdate.
Nasty
UNец
 
Сообщения: 11
Зарегистрирован: 02 апр 2016, 19:17

Вернуться в Оптимизация

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

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