【发布时间】:2018-03-29 13:16:04
【问题描述】:
我在一个统一的项目中遇到了问题。我基本上有一个系统,您可以单击一个对象,然后单击某个区域内的某个位置,然后该对象就会到达该位置。问题是这些对象不能重叠。他们不能使用物理学。检测相互碰撞。我已经为此工作了很长时间,我得到了一些东西,但仍然没有完全工作,我希望有人可以帮助我。
我基本上做的是让所有对象靠近点击,然后如果有一些只是计算点击和这些对象之间的方向,然后将它们添加到似乎工作的位置,有时它们不会重叠,其他时候它们这样做,他们会走得很远,我需要他们靠近点击。
代码:
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;
}
行为:
【问题讨论】:
-
您的问题令人困惑。我的理解是你有一个用户点击的位置。然后你找到一定范围内的所有对象,你想找到所有这些点的中间?
-
是的,你说对了一半,但不是在中间,我想在点击附近获得一个可用位置以放置我的对象@Franck
-
如果你真的不想使用物理,你可以使用一种网格:网格的每个点都被一个大于对象大小的单位隔开。跨度>
-
我有一个类似的系统,问题是这次需要在没有网格的情况下执行此操作,而我没有到达那里。
-
@AndréMarques 所以你有一个网格形状,你想遵循一个网格定位,比如说我们在 2d 中简化,你的对象是 50,50 并且是 100x100,如果你点击 75 ,75 你想知道你与那个对象有冲突,但是如果你点击 101,50 你想要从 100,0 延伸到 200,100 的点 150,50 是吗?也许预期结果的图片也会有所帮助。