C# Unity3D 3播放器相对于3条道路中的1条的移动

C# Unity3D 3播放器相对于3条道路中的1条的移动,c#,unity3d,unity5,C#,Unity3d,Unity5,我想创建一个简单的3D跑步者 但是我对玩家的移动有一个问题,因为我有3条路(蓝色、绿色、红色),我希望当玩家滑动(或点击)时,他只能从一条路移动到另一条路因此这不是自由运动。 我最初的想法是给每条路分配一个编号:|-1 | 0 | 1 |。并创建一些条件,如果您在1上,并且您单击右侧,您将不会移动,因为红色道路之后没有道路 但是效果不太好:这不准确,我希望我的播放器只能在一条路到另一条路之间移动(单击/滑动一条路) 您对如何移动该球员的道路有什么建议吗? 谢谢,祝你今天愉快 从评论来看,你的问

我想创建一个简单的3D跑步者

但是我对玩家的移动有一个问题,因为我有3条路(蓝色、绿色、红色),我希望当玩家滑动(或点击)时,他只能从一条路移动到另一条路因此这不是自由运动。

我最初的想法是给每条路分配一个编号:|-1 | 0 | 1 |。并创建一些条件,如果您在1上,并且您单击右侧,您将不会移动,因为红色道路之后没有道路

但是效果不太好:这不准确,我希望我的播放器只能在一条路到另一条路之间移动(单击/滑动一条路)

您对如何移动该球员的道路有什么建议吗?


谢谢,祝你今天愉快

从评论来看,你的问题似乎是你的球员不适合上路

我猜这是因为你的道路比例尺大于1,你将玩家向左或向右移动1个单位,这与你每条道路的大小不一致

解决这个问题的一种方法是将道路的位置(例如道路中心)存储为一个空的游戏对象。移动玩家时,您可以将玩家与其中一个空游戏对象对齐

您的代码可能如下所示:

//this assumes that your script is on your player

//assign these in the inspector
public GameObject leftRoad, centerRoad, rightRoad; //the empty gameobjects which lie in the center of your roads

void Update()
{
    if (Input.GetKey("left"))
    {
        // Change direction to left
        transform.position = leftRoad.position;

    }
    if (Input.GetKey("right"))
    {
        // Change direction to right
        transform.position = rightRoad.position;
    }    

    gameObject.transform.position = Vector3.Lerp(direction, endPosition, speed);
}
注意


这只是如何从中心向左或向右过渡的一个简单概念。你需要做更多的编码来获得其他的移动,比如从左边的路移回中间。

从评论来看,你的问题似乎是你的球员不适合这条路

我猜这是因为你的道路比例尺大于1,你将玩家向左或向右移动1个单位,这与你每条道路的大小不一致

解决这个问题的一种方法是将道路的位置(例如道路中心)存储为一个空的游戏对象。移动玩家时,您可以将玩家与其中一个空游戏对象对齐

您的代码可能如下所示:

//this assumes that your script is on your player

//assign these in the inspector
public GameObject leftRoad, centerRoad, rightRoad; //the empty gameobjects which lie in the center of your roads

void Update()
{
    if (Input.GetKey("left"))
    {
        // Change direction to left
        transform.position = leftRoad.position;

    }
    if (Input.GetKey("right"))
    {
        // Change direction to right
        transform.position = rightRoad.position;
    }    

    gameObject.transform.position = Vector3.Lerp(direction, endPosition, speed);
}
注意


这只是如何从中心向左或向右过渡的一个简单概念。您需要进行更多的编码以获得其他移动,例如从左侧道路返回中心。

您遇到的错误是什么?“然而,它不太管用。”并不能真正解释你的问题!:)我没有错误,但问题是当我点击左边或右边的球员移动,但他不适合在道路上。因此,我希望玩家只能移动一条路到另一条路。我认为你应该存储三个位置。当玩家移动时,将玩家放在其中一个存储位置。看起来你只是在相对当前位置翻译玩家,对吗?因为你的方法不是很好(也就是说,你似乎是新手),我会继续使用@Poouts解决方案。创建3个游戏对象(不带渲染)并将它们放置在道路下的层次结构中,这样它们将随道路移动(或在玩家对象下,这样它们将相对于玩家保持在适当的位置,以最合适的位置为准)。然后在移动中,您只需将玩家与其中一个“标记”/“游戏对象”(player.x=goRedTrackMarker.x;player.z=goRedTrackMarker.z;等)对齐,您会遇到什么错误?“然而,它不太管用。”并不能真正解释你的问题!:)我没有错误,但问题是当我点击左边或右边的球员移动,但他不适合在道路上。因此,我希望玩家只能移动一条路到另一条路。我认为你应该存储三个位置。当玩家移动时,将玩家放在其中一个存储位置。看起来你只是在相对当前位置翻译玩家,对吗?因为你的方法不是很好(也就是说,你似乎是新手),我会继续使用@Poouts解决方案。创建3个游戏对象(不带渲染)并将它们放置在道路下的层次结构中,这样它们将随道路移动(或在玩家对象下,这样它们将相对于玩家保持在适当的位置,以最合适的位置为准)。然后在移动中,您只需将玩家与其中一个“标记”/“游戏对象”(player.x=goRedTrackMarker.x;player.z=goRedTrackMarker.z;等等)对齐,这是一种很好的方法。这是一种很好的方法。