“类型不匹配”错误的解决方案阻止我将游戏对象分配给 Unity 中的预制件

问题描述 投票:0回答:1

每当我尝试将 GameObject 或 TMP 文本框分配给预制件的公共变量时,我都会收到一条错误消息:“类型不匹配”。该变量是一个列表(以前是数组),我不确定它是否与预制件或公共列表或数组有关。

这是我的两个脚本:

“矿石矿工”

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

public class OreMiner : MonoBehaviour
{
    public float miningRate = 1.0f; // Ores per second
    public List<string> oreTags; // List of tags for different ore types
    public List<TMP_Text> oreCountTexts; // List of UI texts to update ore count for each type
    private Dictionary<string, int> totalOres = new Dictionary<string, int>();
    public SetOreCountTexts SetOre; // Ensure this is of type SetOreCountTexts

    void Start()
    {
        // Check if SetOre is assigned
        if (SetOre != null && SetOre.textList != null)
        {
            // Initialize oreCountTexts from SetOre
            oreCountTexts = new List<TMP_Text>(SetOre.textList);
        }
        else
        {
            Debug.LogError("SetOre or SetOre.textList is not assigned.");
            return;
        }

        // Initialize ore counts for each type
        foreach (string tag in oreTags)
        {
            totalOres[tag] = 0;
        }

        StartCoroutine(MineOres());
    }

    IEnumerator MineOres()
    {
        while (true)
        {
            yield return new WaitForSeconds(1.0f / miningRate);
            CollectOres();
        }
    }

    void CollectOres()
    {
        foreach (string oreTag in oreTags)
        {
            Collider[] oresInRange = Physics.OverlapBox(transform.position, transform.localScale / 2, Quaternion.identity, LayerMask.GetMask(oreTag));
            foreach (var ore in oresInRange)
            {
                totalOres[oreTag]++;
                Destroy(ore.gameObject); // Remove the ore from the scene
            }
        }
        UpdateUI();
    }



    void UpdateUI()
    {
        for (int i = 0; i < oreTags.Count; i++)
        {
            string oreTag = oreTags[i];
            oreCountTexts[i].text = $"{oreTag} Collected: {totalOres[oreTag]}";
        }
    }
}

“设置矿石计数文本”

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

public class SetOreCountTexts : MonoBehaviour
{
    public List<TMP_Text> textList = new List<TMP_Text>();
}

我将“SetOreCountTexts”分配给场景中带有文本框列表的空游戏对象,并尝试将文本框强制放入预制件中,但这不起作用。

我查看了其他与我的问题类似的帖子,但问题没有解决,比如这个 Unity Type Mismatch For Prefabs 以及我的问题的其他重复项。我尝试稍微更改一下代码,但没有成功。我还尝试创建脚本对象并将文本框分配给脚本对象。我还尝试解压预制件,将文本框输入到生成的对象中,然后重新制作预制件,但每当我重新创建预制件时,文本框列表就会被清除。这个问题有解决办法或解决方法吗?

c# unity-game-engine gameobject prefab
1个回答
0
投票

如果您使用 Text mesh pro 作为 UI 文本,那么您需要创建这种类型的参考

TextMeshProUGUI

这意味着不要有这个

public List<TMP_Text> oreCountTexts;

你应该把它改成这样

public List<TextMeshProUGUI> oreCountTexts;

您可以在这里阅读更多相关信息:TextMesh Pro 文档

© www.soinside.com 2019 - 2024. All rights reserved.