我的定位系统并不像我想的那样。我的方式是首先得到敌人的本地位置(如下图所示)(绿色三角形),然后用所选目标(紫色圆圈)中操纵杆的x和y轴过滤列表。
所以让我说我把棍子推到X轴的+1,它过滤所有具有正X的绿色三角形并按照与紫色圆圈(选定目标)的最近距离对列表进行排序以获得下一个目标
以下是我的代码示例,以便更清晰。
// Switching target system
private void SwitchTarget()
{
// Right stick direction
float rightXRaw = Input.GetAxisRaw("RightStickX");
float rightYRaw = Input.GetAxisRaw("RightStickY");
// List for the enemies
localTargets = new List<Transform>();
// Filtering and adding the target based on the right stick direction (Only right, left, up and down)
foreach (Transform localTarget in targets)
{
// Setting the enemies' world coordinate to local coordinate relative to the selected target
Vector3 localChildPos = selectedTarget.Find("localChild").transform.InverseTransformPoint(localTarget.position);
if (rightXRaw == 1 && localChildPos.x < 0)
{
localTargets.Add(localTarget);
}
if (rightXRaw == -1 && localChildPos.x > 0)
{
localTargets.Add(localTarget);
}
if (rightYRaw == 1 && localChildPos.z < 0 && Mathf.Abs (localChildPos.x) < 3)
{
localTargets.Add(localTarget);
}
if (rightYRaw == -1 && localChildPos.z > 0 && Mathf.Abs (localChildPos.x) < 3)
{
localTargets.Add(localTarget);
}
}
// Sorting the created list based on distance from the selected target, then select the first member from the list.
SortDistTarget(localTargets);
SelectTarget();
}
没关系,但在某些情况下它并没有选择我想要的东西,因为它只是基于4个方向进行过滤(例如左,右,上和下)。所以我想也许有一种更好更精确的方法可以直接使用操纵杆方向,也可以使用raycast。很想听到问题的任何替代方案。
回到这个方法,我的问题是,如何通过操纵杆方向(从紫色圆圈,选定目标投下来)获得最接近敌人的铸造射线?
答案 0 :(得分:0)
你需要做的是计算每个敌人相对于你当前位置的角度。你可以通过计算得到这个:
Math.Atan(localchildpos.x / localchildpos.y)* 180 / Math.PI
为每个本地目标。您还需要具有不同操纵杆方向的角度。那个方向上“最接近”的敌人将成为最接近操纵杆方向的角度的敌人(请记住,355度的敌人距离操纵杆方向零度仅5度)。
我怀疑这可能仍然没有让你得到你真正想要的行为。如果一个敌人距离很远但是直接与操纵杆方向一致,那么这个敌人将被选择在更接近但只是略微偏离的敌人身上。让我们知道是否是这种情况,我很乐意通过解决方案与您交谈。