为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻翻过去那场雪 2021-07-13 17:12:10
我正在创建一个简单的赛车游戏,我想保持我的玩家的位置并显示它。我认为创建一个列表并将所有敌人和玩家放入其中然后对其进行排序会很有用,但我被困在那里。一开始我只使用了一个敌人和我的玩家。这是我到目前为止所做的代码。任何想法如何继续?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;        }    }
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您的代码非常接近,但存在一些简单的错误。你的排序函数的结果应该是相反的,GameObject 不是一个组件,是一个组件容器,你已经有了引用。在这两个更改之后,您的方法似乎运行良好。我还添加了一个等于条件,以避免交换不需要交换的元素。


 private int CompareDistance(GameObject a, GameObject b)

    {

        float distance_a = a.transform.position.z;

        float distance_b = b.transform.position.z;

        if (distance_a==distance_b) return 0;

        if (distance_a >= distance_b)

            return -1;  else  return 1;

    }

还要尽量避免过于频繁地创建列表,创建一次,然后才进行排序,创建和填充列表可能相对昂贵(排序也是如此)


查看完整回答
反对 回复 2021-07-17
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信