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

Unity报错‘GameObject[]不包含length定义’,求问题排查与解决

问题解决与优化建议

错误原因与修复

你遇到的CS1061错误是因为C#是大小写敏感的语言,数组的长度属性是Length(首字母大写),而你代码里写的是小写的length,这就是报错的根源。

把代码里的enemies.length == 0改成enemies.Length == 0就能解决这个错误。

修正后的完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameWinner : MonoBehaviour
{
    public GameObject[] enemies;

    void Update()
    {
        enemies = GameObject.FindGameObjectsWithTag("Enemy");
        if (enemies.Length == 0)
        {
            SceneManager.LoadScene(2); // 这里可以替换成你要切换的场景名称或索引
        }
    }
}

实用优化建议

  1. 优化性能:
    现在的代码每帧都调用FindGameObjectsWithTag,会消耗额外性能。更高效的方式是维护一个敌人计数器:

    • 给敌人脚本添加OnDestroy事件,当敌人被销毁时,通知GameWinner减少计数器。
    • 示例敌人脚本片段:
      public class Enemy : MonoBehaviour
      {
          public GameWinner gameWinner;
      
          void OnDestroy()
          {
              gameWinner.EnemyKilled();
          }
      }
      
    • GameWinner修改为:
      public class GameWinner : MonoBehaviour
      {
          public int enemyCount; // 在Inspector里设置初始敌人数量
      
          void Start()
          {
              // 也可以在Start里自动获取初始敌人数量
              // enemyCount = GameObject.FindGameObjectsWithTag("Enemy").Length;
          }
      
          public void EnemyKilled()
          {
              enemyCount--;
              if (enemyCount <= 0)
              {
                  SceneManager.LoadScene(2);
              }
          }
      }
      
  2. 后续随机生成敌人的思路:

    • 用Instantiate方法生成敌人,配合Random.Range控制生成数量,比如:
      public GameObject enemyPrefab; // 拖入敌人预制体
      public Transform spawnPoint; // 生成位置
      
      void Start()
      {
          // 随机生成3-10个敌人
          int spawnCount = Random.Range(3, 10);
          for (int i = 0; i < spawnCount; i++)
          {
              GameObject enemy = Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity);
              // 给敌人设置随机属性,比如血量
              Enemy enemyScript = enemy.GetComponent<Enemy>();
              enemyScript.health = Random.Range(50, 150);
          }
      }
      
    • 可以用ScriptableObject创建敌人模板,把不同敌人的属性(模型、血量、速度)存在模板里,美术可以直接在Inspector调整,不用改代码。

内容的提问来源于stack exchange,提问作者Mackenzie Digital Design

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00