Unity3d 随机传送字符问题

Unity3d 随机传送字符问题,unity3d,random,Unity3d,Random,我开始在unity上迈出第一步,我正在尝试制作一个简单的2d游戏。我想在地图中创建一个传送站。当我的角色接触到一个点时,他将能够在地图上的各个点之间随机传送,就像它是一个传送门一样 我已经成功地插入了一个列表,其中包含可以移动的点,通过随机函数,我可以移动它。问题是随机函数也会调用角色已经存在的点,因此不会移动 这就是我想做的:如果我有三个点A B C,我的角色进入点A,可以移动到点B和C。如果他到点B,他可以移动到点A和C,依此类推 现在,如果我的角色进入A点,他将随机移动到B点 我怎样才能着

我开始在unity上迈出第一步,我正在尝试制作一个简单的2d游戏。我想在地图中创建一个传送站。当我的角色接触到一个点时,他将能够在地图上的各个点之间随机传送,就像它是一个传送门一样

我已经成功地插入了一个列表,其中包含可以移动的点,通过随机函数,我可以移动它。问题是随机函数也会调用角色已经存在的点,因此不会移动

这就是我想做的:如果我有三个点A B C,我的角色进入点A,可以移动到点B和C。如果他到点B,他可以移动到点A和C,依此类推

现在,如果我的角色进入A点,他将随机移动到B点

我怎样才能着手修理它呢

public class Transport : MonoBehaviour
{
    public List<GameObject> Portal = new List<GameObject>();
    public GameObject Player;

    public void changePortal()
    {
        int aCaso = Random.Range(0, Portal.Count);

        Player.transform.position = new Vector2(Portal[aCaso].transform.position.x, Portal[aCaso].transform.position.y);
    }
}

我不知道你是如何设置这张地图的,但你可以让随机传送功能使用阵列变换你的位置。尝试为每个传送板创建一个阵列,并且不包括当前点。这可能会阻止传送到同一个地方,或者试图设置一个最小传送距离,以便它搜索超出该范围的焊盘

我会看看这里:


在这种情况下,它们使用繁殖点,但我相信您也可以使用它与当前代码进行远程传送。

我不知道您是如何设置此地图的,但您可以让随机远程传送功能使用阵列变换您的位置。尝试为每个传送板创建一个阵列,并且不包括当前点。这可能会阻止传送到同一个地方,或者试图设置一个最小传送距离,以便它搜索超出该范围的焊盘

我会看看这里:

在这种情况下,它们使用繁殖点,但我相信您也可以使用它与当前代码进行远程传送。

在您的行中:

int aCaso = Random.Range(0, Portal.Count);
0
门户。计数将始终包括所有门户

问题是,您可以传送到(目标)的门户池仍然包括您输入的门户(源)。

您可以创建一个新的门户列表,删除源门户:

// Pass the origin portal (where your player enters)
public void changePortal(GameObject sourcePortal)
{
    // create a new list where sourcePortal is excluded
    var possibleTargets = Portal.Where(o => o != source).ToList(); 

    // random index from new list
    int aCaso = Random.Range(0, possibleTargets .Count);

    // use the random index to get target portal
    Player.transform.position = new Vector2(possibleTargets [aCaso].transform.position.x, possibleTargets [aCaso].transform.position.y);
}
在你的队伍中:

int aCaso = Random.Range(0, Portal.Count);
0
门户。计数将始终包括所有门户

问题是,您可以传送到(目标)的门户池仍然包括您输入的门户(源)。

您可以创建一个新的门户列表,删除源门户:

// Pass the origin portal (where your player enters)
public void changePortal(GameObject sourcePortal)
{
    // create a new list where sourcePortal is excluded
    var possibleTargets = Portal.Where(o => o != source).ToList(); 

    // random index from new list
    int aCaso = Random.Range(0, possibleTargets .Count);

    // use the random index to get target portal
    Player.transform.position = new Vector2(possibleTargets [aCaso].transform.position.x, possibleTargets [aCaso].transform.position.y);
}

我想肯定的是,您需要
使用System.Linq在你的脚本中谢谢你的回答,但现在我有另一个小问题,我发布的这个脚本是由脚本角色中的函数调用的,当我按下空格键时,它被传送了。现在他给了我这个错误。***错误CS7036:没有给出与“prova.changePortal(GameObject)”的必需形式参数“sourcePortal”对应的参数***请原谅我的无知,但正如我所说,我是一个初学者。谢谢,您现在如何调用函数“changePortal”?你有你的玩家要进入的门户网站的参考资料吗?我正试图向你发送一段代码,但除了评论之外,我不知道怎么做。我在最初的帖子中插入了它,只是为了确保我会提到你需要使用System.Linq在你的脚本中谢谢你的回答,但现在我有另一个小问题,我发布的这个脚本是由脚本角色中的函数调用的,当我按下空格键时,它被传送了。现在他给了我这个错误。***错误CS7036:没有给出与“prova.changePortal(GameObject)”的必需形式参数“sourcePortal”对应的参数***请原谅我的无知,但正如我所说,我是一个初学者。谢谢,您现在如何调用函数“changePortal”?你有你的玩家要进入的门户网站的参考资料吗?我正试图向你发送一段代码,但除了评论之外,我不知道怎么做。我在最初的帖子中插入了它