每当我尝试将 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 以及我的问题的其他重复项。我尝试稍微更改一下代码,但没有成功。我还尝试创建脚本对象并将文本框分配给脚本对象。我还尝试解压预制件,将文本框输入到生成的对象中,然后重新制作预制件,但每当我重新创建预制件时,文本框列表就会被清除。这个问题有解决办法或解决方法吗?
如果您使用 Text mesh pro 作为 UI 文本,那么您需要创建这种类型的参考
TextMeshProUGUI
这意味着不要有这个
public List<TMP_Text> oreCountTexts;
你应该把它改成这样
public List<TextMeshProUGUI> oreCountTexts;
您可以在这里阅读更多相关信息:TextMesh Pro 文档