Unity edge collider 2d не работает
I have the following method that draws a LineRenderer and an EdgeCollider2D .
I keep getting the error
Also, occasionally when lineRenderer.positionCount is 0, edgeCollider2D.points has 2 points, which should not be the case, they should both have no points.
I tried replacing
but this gave the following error in addition:
How can I solve this issue?
I'm guessing the first error ( Invalid points assigned to 2D edge collider ) is due to having tried to supply zero points. There may be an internal check that says that the number of points must be greater than or equal to 2. Attempting to set 0 points in the editor throws a warning on the component, but does allow the modification. The "2 points" you were seeing may be ghost data.
@Draco18s I've not put any check to ensure points are greater or equal to 2. I also don't think they are ghost data because when i select the game object the edge colliders are visible. I believe there should be a way I can workaround it, with a condition of some sort (which I've not figured out) that would ensure consistency with the line renderer positionCount and edge collider points .
Before assigning pts.ToArray to edgeCollider2D.points , make sure that the length of data in pts.ToArray is >=2. Add that check with an if statement and see if that helps
@Programmer that gets rid of the Invalid points assigned to 2D edge collider error, but because of the condition it leaves 2 edge points when the line renderer position count is 0. I am using my method to draw and erase lines, that's why I need both line renderer position count and edge points to be consistently 0 in the end (generally having the same values)
If LineRenderer position count is 0 then it's no line. Instead of assigning that to the edgeCollider2D.points , disable the EdgeCollider2D component. When the position count >= 2, enable the EdgeCollider2D and then assign edgeCollider2D.points .
1 Answer 1
Before assigning the array pts.ToArray() to edgeCollider2D.points , make sure that the array is not null .
Also make sure that the length of the data/array you want to assign ( pts.ToArray ) to the EdgeCollider2D points is >= 2. You will get that error if it is not.
Both of these can be checked with a simple if statement. If the array to assign to the edgeCollider2D.points is 0 or < 2, simply disable the EdgeCollider2D component or handle it which ever way you want but don't assign that array to the EdgeCollider2D points as you will get that exception.
Здравствуйте, я недавно начал изучать Юнити, так как подумал что хочется не только играть а и создать что-то своё, и спустя день столкнулся с тем чего не понимаю. Я создал два объекта и дал им компонент Сollider 2D, так как один из объектов герой, также я ему дал Rigidbody 2D и скрипт передвижения по клавишам. (У героя Body Type - Kinematic). Когда я запустил проверить персонаж к моей радости двигался и весьма неплохо, вот только он проходил сквозь объект насквозь место того что бы ударится об него.
Помогите!
Вот скрипт для передвижения, может в нём ошибка.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class control : MonoBehaviour
public float speed;
private Rigidbody2D rb;
private Vector2 moveVelocity;
void Update()
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveVelocity = moveInput.normalized * speed;
>
void FixedUpdate()
rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
>
>
>У героя Body Type - Kinematic
У героя Body Type должен быть Dynamic, иначе физика не заработает. Тип Kinematic - положение объектом полностью управляется скриптом, а не физикой. Значит, если вы хотите использовать физику, то используйте тип Dynamic.
Препятствия можно сделать кинематичными или даже статичными (например, земля или неподвижные платформы), тогда они не будут двигаться персонажем (кинематичные можно двигать скриптом), а если вы хотите расшвыривать булыжники или ящики (с помощью физики), то они тоже должны быть динамичными. Плюс для динамичных объектов нужно указывать правильную массу.
Для начала рекомендую серию из трёх статей (во второй см. комментарий для доработки старого кода в новых версиях юнити)
Спасибо большое (хотя что забавно я вчера это сам случайно сделал, но столкнулся с проблемой что когда персонаж своим колайдером цепляет другой он закручивается вокруг своей оси).
Для этого нужно поставить галочку Constraints/Freeze Rotation/Z у RigidBody2d - тогда по оси z не будет крутить.
Решение
Объясните почему главный герой после прыжка может провалиться сквозь Edge Collider?
На герое есть CapsuleCollider2D и RigidBody2D.
При этом было замечено, что пока он ходит, у него почему то меняется позиция по Z, программно стал делать ее всегда равной нулю, но не помогло. Проваливается в абсолютно рандомных местах.
Во-первых, физический движок не идеален и он может давать сбои. Прохождение сквозь коллайдер обычно бывает при больших скоростях движения объекта. Нужно:
1) Ограничивать скорость движения объектов.
2) По возможности использовать "заполненные" двумерные коллайдеры (box, circle, polygon и т.д.) вместо одномерного EdgeCollider.
Во-вторых, пролет сквозь коллайдер может быть если вы используете насильственное изменение координат объекта (position, rotation, velocity) вместо того, что бы дать rigidbody двигаться в соответствии с законами физики. Двигать rigidbody можно только с помощью метода AddForce.
Нужно разобраться почему это происходит. Мы вам тут не поможем, потому что нет кода. Но это может влиять на проваливания.
Проваливается персонаж Unity
Начал делать игру от третьего лица по книге, и столкнулся такой проблемой: при запуске игрового.
Работа из кода с LineRenderer и Edge collider
Нужно построить график LineRenderer и Edge collider из набора точек соеденённых между собой.
Персонаж ходит сквозь стены
Всем добрый вечер. Возникла проблема с персонажем - он проходит сквозь стены. Игра сама topdown.
Игрок проходит сквозь объект, хотя box collider 2d уже стоит(включен Trigger)
Игрок проходит сквозь объект, хотя box collider 2d уже стоит(включен Trigger) Скрипт using.
Как сделать чтобы персонаж не проходил сквозь объект?
Есть персонаж и tilemap на обоях есть колайдеры, также rigidbody2d на персонаже Body Type.
Сквозь роутеры, Пройти сквозь последовательные роутеры
Всем доброго времени! Проблема в следующем имеются 4 модема (DSL) ASMi-51 для связи до 6 км. с.
Один из блоков проваливается
Здравствуйте. Есть 2 блока, один из которых находится ниже, не под первым, а относительно ниже.
Павел Мойсейчук ответил Дмитрию
Диман, всплывающие подсказки, возможность отладки в реальном времени при запушенном приложении, там много фич полезных) которыми увы никто не пользуется
Дмитрий Гаврилов ответил Павлу
Павел Мойсейчук ответил Дмитрию
Диман, немного не тебе адресовано)) я человеку с Notepad++ хотел эт написать) на самом деле VS функциональней MonoDev - но эти фичи использует очень мало разработчиков. учитывая что поддерживает тот же CoffeScript, C++ и т.д по сути VS- пытаются создать универсальную платформу для разработок под веб, мобайл , десткоп.
Павел Мойсейчук ответил Владимиру
Компонент Edge Collider 2D это коллайдер, применяемый для работы с 2D физикой. Форму коллайдера определяет набор из сегментов линий, что позволяет точно подгонять его форму под требуемый спрайт ( Sprite ). Стоит отметить, что коллайдер такого типа не описывает замкнутое пространство (в отличие от Polygon Collider 2D), и может представлять собой простую линию или L-подобную форму.
Свойство: | Функция: |
---|---|
Density | Changing the density here affects the mass of the object’s associated Rigidbody. Set the value to zero and its associated Rigidbody ignores the Collider for all mass calculations, including centre of mass calculations. NOTE: This option is only available if you have selected Use Auto Mass in an associated Rigidbody. |
Material | Физический материал (Physics Material), определяющий такие параметры столкновений, как силу трения и упругость. |
Is Trigger | Является ли коллайдер триггером? |
Used by Effector | Whether the collider is used by an attached effector or not. |
Offset | The local offset of the collider geometry. |
Points | Информация о количестве вершин сгенерированного коллайдера (без возможности изменения). |
Детали
Можно менять форму ломаной линии коллайдера с помощью клавиши Shift и курсора мыши в окне Scene. Для перемещения уже созданной вершины, нужно навести курсор на эту вершину, зажать Shift и перетащить ее в требуемое место. Для создания новой вершины, нужно навести курсор на требуемое место (на линии), зажать Shift и кликнуть мышкой. Для удаления вершины нужно навести на нее курсор, зажать Ctrl/Cmd и кликнуть мышкой.
Можно спрятать границу инструмента перемещения при изменении формы коллайдера. Для этого нужно свернуть компонент Sprite Renderer в инспекторе текущего объекта.
Читайте также: