Подводя итог, я хочу найти оба коллайдера, участвующих в столкновении
Существует переменная gameObject
, объявленная, когда ваш сценарий наследуется от MonoBehaviour
.Эта переменная ссылается на GameObject, к которому прикреплен этот скрипт.Вы можете получить один GameObject с этой переменной gameObject
, а другой - из аргумента Collider2D
в функции OnTriggerEnter
.
void OnTriggerEnter2D(Collider2D collision)
{
GameObject obj1 = this.gameObject;
GameObject obj2 = collision.gameObject;
Debug.Log("Triggered Obj1: :" + obj1.name);
Debug.Log("Triggered obj2: :" + obj2.name);
}
EDIT :
Объекты для меня бесполезны.Мне нужны коллайдеры.И нет, я не могу использовать 'getcomponent', потому что у них более одного коллайдера, и мне нужны только те, которые находятся в коллизии
Коллайдеры должны быть дочерними по отношению к GameObject, и скрипт долженбыть присоединенным к каждому дочернему коллайдеру, тогда то, что в этом ответе должно работать.
Если по какой-то причине вы должны сделать это, не делая коллайдеры дочерними для этого GameObject, тогда используйте логическую переменную для обнаружения коллизии только один раз .
Это модификация ответа от этой записи.
Иметь локальную Collider2D
переменную с именем theOtherCollider
для хранения коллизииданные, впервые сообщаемые при вызове OnTriggerEnter2D
, затем имеют другую переменную boolean
с именем detectedBefore
, чтобы определить, был ли ранее вызван OnTriggerEnter2D
.
Когда вызывается OnTriggerEnter2D
, проверьте, если local / this версия этой переменной boolean
равна false
.Если это не true
, то это первый раз, когда OnTriggerEnter2D
был вызван.Используйте GetComponent
, чтобы получить другой скрипт, затем установите переменную boolean
скрипта other на true
.В то же время, также инициализируйте переменную theOtherCollider
в скрипте other значением Collider2D
из функции OnTriggerEnter2D
.
Теперь, если вызывается OnTriggerEnter2D
и local / this версия этой переменной boolean
равна true
, установите ее на false
, чтобы сбросить ее, затем получите оба коллайдера с переменной theOtherCollider
и переменную Collider2D
из OnTriggerEnter2D
функция.
Это может сбивать с толку, но, глядя на код, его легче понять.
Примечание:
YOURSCRIPT
- это имя скрипта функции OnTriggerEnter2D
находится внутри, и это прикреплено к коллайдерам.Вы должны изменить его на имя того сценария.
public bool detectedBefore = false;
public Collider2D theOtherCollider;
void OnTriggerEnter2D(Collider2D collision)
{
//Get both colliders then exit if we have already ran this code below
if (detectedBefore)
{
//Reset
detectedBefore = false;
//Get both Colliders once below
Collider2D col1 = theOtherCollider;
Collider2D col2 = collision;
Debug.Log("Triggered Obj1: " + col1.name);
Debug.Log("Triggered obj2: " + col2.name);
return; //EXIT the function
}
//Set the other detectedBefore variable to true then set get the first Collider
YOURSCRIPT myScript = collision.gameObject.GetComponent<YOURSCRIPT>();
if (myScript)
{
myScript.detectedBefore = true;
myScript.theOtherCollider = collision;
}
}