Unity, как получить доступ к правильному объявлению в API?

#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. ОТЛИЧНО, это сработало, не могу поверить, что мне не хватало только «нового», спасибо за помощь!