Хотя это не обязательно предотвращает перекрытие, вы можете создать периметр для персонажей. Это было бы довольно просто в зависимости от того, что вы делаете.
Если вы хотите установить периметр расстояния, чтобы персонажи не подходили слишком близко друг к другу, вы можете использовать следующее уравнение
Vector3 focalPOne = focalPointOfCharacterOne();
Vector3 focalPTwo = focalPointOfCharacterTwo();
float dx = focalPOne.x - focalPTwo.x;
float dy = focalPOne.y - focalPTwo.y;
float dz = focalPOne.z - focalPTwo.z;
// calc distance along z plane
if (Math.Sqrt((dx * dx) + (dy * dy)) < minDistance)
{
// person is too close to the others head.
if (Math.abs(dz) < minHeightAbove)
{
// go to previous position.
}
// if there is no vertical elivation, you can go
// straight to moving them back to previous position
}
enter code here
Если это не то, что вы ищете, пожалуйста, дайте мне знать, чтобы я мог отредактировать или удалить его.
Созданный периметр будет выглядеть примерно так.
![enter image description here](https://i.stack.imgur.com/x4bSK.png)