Синтаксис:
Используется csharp
Collider[] hitColliders = Physics.OverlapSphere(connectPoint.position, radius);
float minDistance = float.MaxValue;
foreach (Collider collider in hitColliders)
{
if (collider.gameObject.CompareTag(wireTag))
{
float distance = Vector3.Distance(transform.position, collider.ClosestPoint(connectPoint.position));
if (distance < minDistance)
{
wire = collider.gameObject;
minDistance = distance;
}
else
{
wire = null;
}
}
else if (!collider.gameObject.CompareTag(wireTag))
{
wire = null;
}
}
float minDistance = float.MaxValue;
foreach (Collider collider in hitColliders)
{
if (collider.gameObject.CompareTag(wireTag))
{
float distance = Vector3.Distance(transform.position, collider.ClosestPoint(connectPoint.position));
if (distance < minDistance)
{
wire = collider.gameObject;
minDistance = distance;
}
else
{
wire = null;
}
}
else if (!collider.gameObject.CompareTag(wireTag))
{
wire = null;
}
}
Сразу хочу подметить, что в случае слёта штанг, они не ищут провод на большом радиусе (уверен кто-нибудь об этом подумает). У меня есть булевая, отвечающая за то, что штанги подняты или опущены и если они подняты, то выполняется код, указанный выше, а если нет, то другой код.
Я понимаю, что код может ввыглядеть немного не грамотно, т.к. я его делал исходя из документации и форумов, но лучше я уже не осилил.
Как видно, в данном коде часто использую "wire = null;" чтобы принудительно забыть последний объект, если он находится вне радиуса. И это работает, но не всегда... Как решить данную проблему?