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

Unity C#为Fish对象分配诱饵列表出现全量相同异常

问题原因

  • 核心错误在输出逻辑:你在Start的循环里输出诱饵时,遍历的是全局变量asignedLures,而不是每个Fish实例自带的lures属性。这个全局变量每次调用AsignLure都会被新的列表覆盖,所以循环输出时只能拿到最后一次生成鱼时赋值的诱饵列表,看起来所有鱼的诱饵都相同。
  • 额外优化点:fishName、asignedLures两个字段不需要定义为类全局变量,改为方法内局部变量可以避免意外的全局值覆盖问题。

修复后代码

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

public class Test : MonoBehaviour
{
    List<Fish> generatedFish;
    string[] fishNames = {"Karas", "Karp", "Ploc" };

    // Start is called before the first frame update
    void Start()
    {
        generatedFish = new List<Fish>();
        generateFish();
       
        foreach(Fish fish in generatedFish)
        {
            Debug.Log(fish.fishName);
            // 改为遍历当前鱼实例自带的诱饵列表
            foreach(string lure in fish.lures)
            {
                Debug.Log(lure);
            }
        }
    }

    class Fish
    {
        public string fishName { get; set; }
        public List<string> lures { get; set; }
    }

    public void generateFish()
    {
        int numberOfGeneratedFish = 2;
        for(int i = 0; i <= numberOfGeneratedFish; i++)
        {
            string newFishName = AsignName();
            generatedFish.Add(new Fish
            {
                fishName = newFishName,
                lures = AsignLure(newFishName)
            });
        }
    }

    public string AsignName()
    {
        return fishNames[Random.Range(0, fishNames.Length)];
    }

    public List<string> AsignLure(string fishName)
    {
        List<string> asignedLures;
        switch (fishName) {
            case "Karas":
                asignedLures = new List<string> {"corn", "dough", "worms" };
                break;
            case "Karp":
                asignedLures = new List<string> { "potato", "corn", "pea" };
                break;
            case "Ploc":
                asignedLures = new List<string> { "perlovka", "mastique" };
                break;
            default:
                asignedLures = new List<string>();
                break;
        }
        return asignedLures;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:03