#c# #unity3d
Вопрос:
Я использую приведение Physics2D circle и просматриваю документацию, https://docs.unity3d.com/ScriptReference/Physics2D.CircleCast.html , есть 3 объявления с одинаковым именем, и третье лучше всего соответствует моим потребностям, как мне использовать это, а не первое?
Physics2D.CircleCast(transform.position, radius, Vector2.up, ContactFilter2D.NoFilter, colliders, 0f);
Это то, что у меня есть до сих пор, и это выдает мне ошибку компилятора, в которой говорится, что фильтр контактов должен быть целым числом.
Ответ №1:
То, о чем вы говорите, — это перегрузки.
Перегруженный метод означает, что у вас есть несколько версий с одинаковыми именами, но разными подписями.
=> Вы не решаете, какую перегрузку вы используете!
Компилятор сам определяет, какие параметры каких типов вы предоставляете в каком порядке, и автоматически использует перегрузку метода с сигнатурой, которая наилучшим образом соответствует заданным параметрам.
Итак, если вы напишете
Physics2D.CircleCast(transform.position, radius, Vector2.up, new ContactFilter2D().NoFilter(), colliders, 0f);
он автоматически будет использовать перегрузку с подписью (если ваш colliders
— a List<RaycastHit2D>
)
Physics2D.CircleCast(Vector2, float, Vector2, ContactFilter2D, List<RaycastHit2D>, float);
или соответственно (если ваш colliders
является RaycastHit2[]
)
Physics2D.CircleCast(Vector2, float, Vector2, ContactFilter2D, RaycastHit2D[], float);
Комментарии:
1. Похоже, это сработало! Проблема, похоже, заключалась в том, что я использовал ContactFilter2D.NoFilter внутри вызова функции, а не присваивал переменной ContactFIlter2D, а затем использовал ее в функции. Похоже, мой фильтр не работает, хотя в нем говорится, что ему нужна ссылка на объект. :/
2. Похоже, он скорее ожидает чего-то вроде
Physics2D.CircleCast(transform.position, radius, Vector2.up, new ContactFilter2D().NoFilter(), colliders, 0f);
3. ОТЛИЧНО, это сработало, не могу поверить, что мне не хватало только «нового», спасибо за помощь!