我在一个统一的项目中遇到问题。我基本上有一个系统,您单击一个对象,然后单击一个区域内的某个位置,该对象就会到达该位置。问题是这些对象不能重叠。他们不能使用物理学。检测相互碰撞。我已经为此工作了很长时间,我得到了一些东西,但仍然没有完全工作,我希望有人可以帮助我。
我基本上做的是让所有对象靠近点击,然后如果有一些只是计算点击和这些对象之间的方向,然后将它们添加到似乎工作的位置,有时它们不会重叠,其他时候它们会重叠去很远,我需要他们靠近点击。
代码:
public Vector3 GetPossiblePosition(List<GameObject> nearbyDiscs, Vector3 position)
{
float initialY = transform.position.y;
Vector3 idealPosition = position;
List<Vector3> directions = new List<Vector3>();
if(nearbyDiscs.Count > 0)
{
foreach (GameObject disc in nearbyDiscs)
{
Vector3 newDirection = position - disc.transform.position;
directions.Add(newDirection);
}
for (int i = 0; i < directions.Count; i++)
{
idealPosition += directions[i] / directions.Count;
List<GameObject> discs = CheckForNearbyDiscs(idealPosition);
if (discs.Count < 1)
break;
}
}
idealPosition.y = initialY;
return idealPosition;
}
行为: