猿问

Unity3d使用列表保持玩家在比赛中的位置

我正在创建一个简单的赛车游戏,我想保持我的玩家的位置并显示它。我认为创建一个列表并将所有敌人和玩家放入其中然后对其进行排序会很有用,但我被困在那里。一开始我只使用了一个敌人和我的玩家。这是我到目前为止所做的代码。任何想法如何继续?


public List<GameObject> Balls;

    public Text scoreText;

    int score;


    [SerializeField]

    GameObject myPlayer;


    [SerializeField]

    GameObject enemy1;


public List<GameObject> Balls;

void myList()

    {

        Balls.Add(myPlayer);

        Balls.Add(enemy1);

        Balls.Sort(CompareDistance);

    }


    private int CompareDistance(GameObject a, GameObject b)

    {

        float distance_a = a.GetComponent<GameObject>().transform.position.z;

        float distance_b = b.GetComponent<GameObject>().transform.position.z;

        if (distance_a >= distance_b)

        {

            return 1;

        }

        else

        {

            return -1;

        }

    }


翻翻过去那场雪
浏览 163回答 2
2回答

尚方宝剑之说

您的代码非常接近,但存在一些简单的错误。你的排序函数的结果应该是相反的,GameObject 不是一个组件,是一个组件容器,你已经有了引用。在这两个更改之后,您的方法似乎运行良好。我还添加了一个等于条件,以避免交换不需要交换的元素。&nbsp;private int CompareDistance(GameObject a, GameObject b)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; float distance_a = a.transform.position.z;&nbsp; &nbsp; &nbsp; &nbsp; float distance_b = b.transform.position.z;&nbsp; &nbsp; &nbsp; &nbsp; if (distance_a==distance_b) return 0;&nbsp; &nbsp; &nbsp; &nbsp; if (distance_a >= distance_b)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; else&nbsp; return 1;&nbsp; &nbsp; }还要尽量避免过于频繁地创建列表,创建一次,然后才进行排序,创建和填充列表可能相对昂贵(排序也是如此)
随时随地看视频慕课网APP
我要回答