Столкнулся с проблемой. Суть: создаю двумя кликами объект из префаба. Первым кликом задаю позицию, вторым - в какую сторону его повернуть. Перед объектом рисую прямоугольный коллайдер четырьмя точками, рассчитанными по формуле dX = R * cos(A) и т.д. Так вот, из-за того, что я поворачиваю объект через rotation - у коллайдера начинается свистопляска с положением. Как это грамотно исправить? Кусок кода в студию:
obj = Instantiate (OBJ) as GameObject;
obj2 = Instantiate (OBJ) as GameObject;
float dX = point2.x - point1.x;
float dY = point2.y - point1.y;
A = Mathf.Atan2(dY, dX);
var point_2_position = new Vector2 (7.9f * Mathf.Cos (A + 90f * Mathf.Deg2Rad), 7.9f * Mathf.Sin (A + 90f * Mathf.Deg2Rad)) + point1;
var point_1_position = new Vector2 (7.9f * Mathf.Cos (A - 90f * Mathf.Deg2Rad), 7.9f * Mathf.Sin (A - 90f * Mathf.Deg2Rad)) + point1;
obj.transform.position = point_1_position;
obj2.transform.position = point_2_position;
Quaternion rotation = Quaternion.AngleAxis(A * Mathf.Rad2Deg, Vector3.forward);
var point_1_right = new Vector2 (Mathf.Cos(A - 90f * Mathf.Deg2Rad), Mathf.Sin(A - 90f * Mathf.Deg2Rad)) + point_1_position;
var point_2_right = new Vector2 (23.7f * Mathf.Cos(A), 23.7f * Mathf.Sin(A)) + point_1_right;
var point_1_left = new Vector2 (Mathf.Cos(A + 90f * Mathf.Deg2Rad), Mathf.Sin(A + 90f * Mathf.Deg2Rad)) + point_2_position;
var point_2_right = new Vector2 (23.7f * Mathf.Cos(A), 23.7f * Mathf.Sin(A)) + point_1_left;
line = obj.AddComponent<LineRenderer>();
line.SetWidth (0.1f, 0.1f);
line.useWorldSpace = true;
line.SetVertexCount(2);
line.material = materialForLines;
line.SetPosition (0, new Vector3 (point_1_right.x, point_1_right.y, 0));
line.SetPosition (1, new Vector3 (point_2_right.x, point_2_right.y, 0));
var line2 = obj2.AddComponent<LineRenderer> ();
line2.SetWidth (0.1f, 0.1f);
line2.useWorldSpace = true;
line2.SetVertexCount(2);
line2.material = materialForLines;
line2.SetPosition (0, new Vector3 (point_1_left.x, point_1_left.y, 0));
line2.SetPosition (1, new Vector3 (point_2_left.x, point_2_left.y, 0));
pc2d = obj.GetComponent<PolygonCollider2D>();
Vector2 p1 = (point_1_right - point_1_position) * 2f;
Vector2 p2 = (point_1_left - point_1_position) * 2f;
Vector2 p3 = (point_2_left - point_1_position) * 2f;
Vector2 p4 = (point_2_right - point_1_position) * 2f;
pc2d.points = new[]{p1, p2, p3, p4};
pc2d.SetPath (0, new[]{p1, p2, p3, p4});
obj2.transform.SetParent(obj.transform);
obj.transform.rotation = rotation;
obj2.transform.rotation = obj.transform.rotation;
Для начала нужно понимать что коллайдер напрямую привязан к обьекту. Если ты хочешь удобно поворачивать отдельно то нужно сделать коллайдер к дочернему обьекту или к родительскому и обрабатывать его отдельно.
Создай пустой обьект, отрисовывай статичный коллайдер и поворачивай только свой дочерний обьект(тот который с Mash-ем). Для чего костыли в виде програмного поворачивания коллайдера?
Почему ты создаешь свой коллайдер вручную? Это для оптимизации? Если это 3д обьект, то создай коллайдер в виде куба. Это решит твою проблему без костылей и при этом не создаст никакой особенной дополнительной нагрузки. А еще не нужно будет писать вот эту кучу кода. Если это оптимизация, то она безсмысленная.
попробуй использовать MashCollider если уж это у тебя 3д обьект который ты можешь поворачивать. Вместо ручного создания програмным кодом.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть тут люди которые помогут разобраться с созданием кастомных элементов для WPF C#?
У меня есть таблица городов около 25 миллионов записей (весит 2гб) и если в SQL запрос выполняется моментально по поиску, то Entity Framework начинает...