Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity2D:使用左侧模拟杆在二维空间中导航_C#_Unity3d - Fatal编程技术网

C# Unity2D:使用左侧模拟杆在二维空间中导航

C# Unity2D:使用左侧模拟杆在二维空间中导航,c#,unity3d,C#,Unity3d,我是Unity的初学者,我正在努力使事情变得非常简单。然而,我不知道从哪里开始。我在场景中有许多“结”,玩家可以选择。然后,它们将能够连接两个节点。我设法找到了距离玩家位置40范围内的所有结,并将它们排列成一个阵列。下一步是“导航”节点。我想让玩家用左边的模拟棒来做这个,但我不知道怎么做。当他们将棍子保持在120°时,可以通过按下另一个按钮来选择离该位置最近的结。我看了一些UI导航脚本,但这种情况非常不同,因为它是一个二维空间。有没有人对此有什么建议?多谢各位 在我看来,你需要做一些三角运算才能

我是Unity的初学者,我正在努力使事情变得非常简单。然而,我不知道从哪里开始。我在场景中有许多“结”,玩家可以选择。然后,它们将能够连接两个节点。我设法找到了距离玩家位置40范围内的所有结,并将它们排列成一个阵列。下一步是“导航”节点。我想让玩家用左边的模拟棒来做这个,但我不知道怎么做。当他们将棍子保持在120°时,可以通过按下另一个按钮来选择离该位置最近的结。我看了一些UI导航脚本,但这种情况非常不同,因为它是一个二维空间。有没有人对此有什么建议?多谢各位


在我看来,你需要做一些三角运算才能找到最近的“结”。每一个——至少如果你编程很好的话——都应该是一个对象,其x和y位置变量可以从脚本中访问

您可以遍历收集的对象列表,并将其与当前位置进行比较,如果对象的距离比数组中的最后一个对象短,则可以将其存储在临时变量中

下面是一些伪代码,可以帮助说明我的观点:

for item in array {

    Object closestKnotDist = Null

    Float currentKnotDist = math.sqrt((player.x-item.x)**2 + (player.y-item.y)**2)

    if currentKnotDist < closestKnotDist {
        closestKnotDist = currentKnotDist
    }

}
数组中项目的
{
对象closestKnotDist=Null
Float currentKnotDist=math.sqrt((player.x-item.x)**2+(player.y-item.y)**2)
如果currentKnotDist
因此,closestKnotDist将是离玩家最近的对象。你将如何操纵它


不确定这是否回答了您的问题,但如果没有,请随意添加一些解释

给我们看看你到目前为止使用的代码。我明白了。这是非常接近我需要的。我用你的想法得到了我想要的,但我不是只使用玩家的位置,而是使用操纵杆的位置乘以半径,相对于玩家<代码>水平浮动=this.transform.position.x+(半径*Input.GetAxis(“LeftJoystickHorizontal”);float vertical=this.transform.position.y+(半径*Input.GetAxis(“LeftJoystickVertical”)-您可以在这里更清楚地看到我需要什么。我不太会说话。非常感谢你的帮助!