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

Unity 2D平台游戏:实现收集全金币后显示钥匙的方法

解决方案

要实现“收集完所有金币后钥匙才显示”的需求,你可以按以下步骤修改代码和场景设置:

1. 补充Player脚本的变量

在Player类中新增两个序列化字段,用于控制钥匙和记录总金币数:

private Rigidbody2D myRigidbody;
private Animator anim;
private int score;
public Text totalscore;
[SerializeField]
private GameObject playerhaskey, dooropened;
// 新增:钥匙对象引用,用于控制显示/隐藏
[SerializeField]
private GameObject keyObject;
// 新增:场景中金币的总数量
[SerializeField]
private int totalGoldCount;
[SerializeField]
private int speed;
private bool lookright;

2. 初始化时隐藏钥匙

在Start方法中默认关闭钥匙的显示状态:

void Start()
{
    myRigidbody = GetComponent<Rigidbody2D>();
    anim = GetComponent<Animator>();
    score = 0;
    lookright = true;
    // 初始隐藏钥匙
    if(keyObject != null)
    {
        keyObject.SetActive(false);
    }
}

3. 收集金币后触发钥匙显示逻辑

在收集金币的碰撞检测方法中,每次收集后判断是否已收集完全部金币,满足条件则显示钥匙:

void OnTriggerEnter2D(Collider2D collider)
{
    if (collider.gameObject.tag == "gold")
    {
        collider.gameObject.SetActive(false);
        score = score + 1;
        changescore(score);
        
        // 检查是否收集完所有金币,是则显示钥匙
        if(score == totalGoldCount && keyObject != null)
        {
            keyObject.SetActive(true);
        }
    }
}

4. 场景编辑器设置

  • 将场景中的钥匙对象拖到Player组件的Key Object字段上
  • 统计场景内所有金币的数量,填入Total Gold Count字段
  • (可选)手动将钥匙对象的初始激活状态取消,和代码逻辑形成双重保险

可选优化:自动统计金币数量

如果你不想手动数金币,可以在Start方法中动态获取场景内所有带"gold"标签的物体数量:

void Start()
{
    myRigidbody = GetComponent<Rigidbody2D>();
    anim = GetComponent<Animator>();
    score = 0;
    lookright = true;
    // 初始隐藏钥匙
    if(keyObject != null)
    {
        keyObject.SetActive(false);
    }
    // 自动统计场景内金币总数
    totalGoldCount = GameObject.FindGameObjectsWithTag("gold").Length;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44