【发布时间】:2014-01-01 03:49:25
【问题描述】:
我的定位系统实际上并没有像我想要的那样运行。我的方法是首先获取敌人(绿色三角形)的本地位置(如下图所示),然后使用所选目标(紫色圆圈)中操纵杆的 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 个方向(例如左、右、上和下)进行过滤。所以我想也许有一种更好、更精确的方法可以直接使用操纵杆方向来执行此操作,也许可以使用光线投射。很想听听这个问题的任何替代方案。
回到这个方法,我的问题是,如何通过操纵杆方向(从紫色圆圈,所选目标投射)从投射的射线中获得最接近敌人?
【问题讨论】: