You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3d竞速游戏中如何通过列表维护并显示玩家名次

我来帮你梳理下当前代码的问题,然后一步步实现名次维护和显示的功能~

第一步:修复现有代码的问题

你的代码里有几个小问题需要先修正:

  • 重复声明了public List<GameObject> Balls;,删掉其中一个即可
  • CompareDistance方法里,a.GetComponent<GameObject>()完全多余,因为a本身就是GameObject,直接访问transform就行
  • 当前排序逻辑可能不符合竞速游戏的需求:你现在的逻辑是z值小的对象会排在列表前面,但竞速游戏通常是前进距离越远(z值越大)名次越靠前,所以需要调整排序的返回值

修正后的基础代码:

public List<GameObject> Balls; 
public Text scoreText; 
int score; 
[SerializeField] GameObject myPlayer; 
[SerializeField] GameObject enemy1; 

void Start()
{
    // 初始化列表,放到Start里比自定义方法更符合Unity规范
    Balls = new List<GameObject>();
    Balls.Add(myPlayer);
    Balls.Add(enemy1);
}

private int CompareDistance(GameObject a, GameObject b)
{
    // 直接获取z轴位置,不需要多余的GetComponent
    float distance_a = a.transform.position.z;
    float distance_b = b.transform.position.z;
    
    // 调整逻辑:z值越大(前进越远),排名越靠前
    if (distance_a > distance_b)
    {
        return -1; // 返回-1表示a应该排在b前面
    }
    else if (distance_a < distance_b)
    {
        return 1; // 返回1表示b应该排在a前面
    }
    else
    {
        return 0; // 距离相等,保持原有顺序
    }
}
第二步:实时维护并显示名次

竞速游戏里玩家和敌人的位置是实时变化的,所以需要定期重新排序列表,然后更新UI显示:

void Update()
{
    // 每一帧重新排序,确保名次实时同步(如果担心性能,可以每3-5帧执行一次)
    Balls.Sort(CompareDistance);
    // 调用方法更新名次UI
    UpdateRankUI();
}

// 专门处理名次显示的方法
void UpdateRankUI()
{
    // 找到玩家在排序后列表中的索引,索引+1就是实际名次(列表从0开始计数)
    int playerRank = Balls.IndexOf(myPlayer) + 1;
    // 更新文本内容,比如显示"当前名次:1/2"
    scoreText.text = $"当前名次:{playerRank}/{Balls.Count}";
}
第三步:扩展到多敌人场景

如果以后要添加更多敌人,不用手动一个个Add,可以给所有敌人加统一标签(比如"Enemy"),然后批量获取:

void Start()
{
    Balls = new List<GameObject>();
    // 添加玩家
    Balls.Add(myPlayer);
    // 批量获取所有带Enemy标签的敌人并加入列表
    GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
    Balls.AddRange(enemies);
}
额外优化建议
  • 如果玩家/敌人可能被销毁(比如掉出赛道),记得从列表中移除对应对象,避免空引用错误
  • 可以给每个角色写一个RaceCharacter脚本,专门存储前进距离(或直接缓存transform),排序时不用每次获取组件,提升性能
  • 敌人数量多的时候,不要每一帧都排序,用协程每0.1秒排序一次,平衡实时性和性能

内容的提问来源于stack exchange,提问作者Maria Kodel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:19