问题更多了,Assets\d地图,之类的\地块数据.cs(178,13): error CS0305: 使用泛型 类型“IEnumerator”需要 1 个类型参数
Assets\d地图,之类的\地块数据.cs(244,35): error CS0246: 未能找到类型或命名空间名“地块Data”(是否缺少 using 指令或程序集引用?)
Assets\d地图,之类的\地块数据.cs(244,13): error CS0305: 使用泛型 类型“IEnumerator”需要 1 个类型参数
Assets\d地图,之类的\地块数据.cs(29,17): error CS0246: 未能找到类型或命名空间名“地块Data”(是否缺少 using 指令或程序集引用?)
这是完整代码:using System.Collections.Generic;
using System.IO;
using UnityEngine;
using System;
using Newtonsoft.Json;
public class 地块数据管理 : MonoBehaviour
{
[System.Serializable]
public class 地块数据
{
public int X;
public int Y;
public string 生态类型;
public string 生物列表;
public string 描述;
public override string ToString()
{
return $"{X}|{Y}|{生态类型}|{生物列表}|{描述}";
}
public string ToAIString()
{
return $"坐标: ({X}, {Y})\n生态类型: {生态类型}\n生物列表: {生物列表}\n描述: {描述}";
}
}
public List<地块Data> 地块列表 = new List<地块Data>();
private string 数据文件路径;
// 新增字段
public enum 生态类型
{
森林,
草原,
荒漠,
咸水,
淡水,
湿地,
地下洞穴,
巨树,
文明遗骸,
乐园,
死寂岭
}
private string 当前生态类型 = "";
private int 当前地块编号 = 0;
private string 预加载开场白 = "";
private bool 用户已接受邀请 = false;
void Awake()
{
数据文件路径 = @"C:\Users\86136\Desktop\地图.txt";
Debug.Log("当前数据库路径: " + 数据文件路径);
if (File.Exists(数据文件路径))
{
Debug.Log("✅ 数据库文件存在");
读取地块数据();
}
else
{
Debug.LogError("❌ 数据库文件不存在,正在创建默认数据...");
创建默认地块数据();
}
// Step 1:生成地块编号 + 随机生态类型
当前地块编号 = 地块列表.Count + 1;
当前生态类型 = 获取随机生态类型();
Debug.Log($"✅ 生成地块 {当前地块编号},生态类型: {当前生态类型}");
// Step 2:请求 AI 生成地块信息
StartCoroutine(请求AI生成地块信息());
}
public void 读取地块数据()
{
地块列表.Clear();
if (File.Exists(数据文件路径))
{
string[] 行集合 = File.ReadAllLines(数据文件路径);
Debug.Log($"✅ 开始读取 {行集合.Length} 行数据");
foreach (string 行 in 行集合)
{
string[] 字段 = 行.Split('|');
if (字段.Length >= 5)
{
try
{
地块Data 数据 = new 地块Data
{
X = int.Parse(字段[0]),
Y = int.Parse(字段[1]),
生态类型 = 字段[2],
生物列表 = 字段[3],
描述 = 字段[4]
};
地块列表.Add(数据);
Debug.Log($"✅ 解析成功: ({数据.X}, {数据.Y}) - {数据.生态类型}");
}
catch (Exception ex)
{
Debug.LogError("❌ 解析失败: " + ex.Message + "\n行内容: " + 行);
}
}
else
{
Debug.LogWarning("⚠️ 字段数量不足,跳过该行: " + 行);
}
}
}
else
{
Debug.LogError("❌ 文件不存在,无法读取数据");
}
}
private void 创建默认地块数据()
{
List<string> 默认数据 = new List<string>
{
"0|0|森林|狼,兔子,蘑菇|一个神秘的森林入口",
"1|0|草原|鹿,野兔|一片开阔的草原",
"0|1|荒漠|蝎子,骆驼|炎热干燥的沙丘地带"
};
File.WriteAllLines(数据文件路径, 默认数据);
Debug.Log("✅ 默认地块数据库已创建");
}
public string 获取地块信息ForAI(int x, int y)
{
foreach (地块Data 数据 in 地块列表)
{
if (数据.X == x && 数据.Y == y)
{
Debug.Log($"🔍 找到地块信息: ({x}, {y})");
return 数据.ToAIString();
}
}
string 未找到信息 = $"❌ 未找到坐标为 ({x}, {y}) 的地块信息";
Debug.LogWarning(未找到信息);
return 未找到信息;
}
private string 获取随机生态类型()
{
string[] 高频 = { "森林", "草原", "荒漠", "咸水", "淡水" };
string[] 中频 = { "湿地", "地下洞穴" };
string[] 低频 = { "巨树" };
string[] 极低频 = { "文明遗骸", "乐园", "死寂岭" };
float 随机 = UnityEngine.Random.value;
if (随机 < 0.7f)
{
return 高频[UnityEngine.Random.Range(0, 高频.Length)];
}
else if (随机 < 0.9f)
{
return 中频[UnityEngine.Random.Range(0, 中频.Length)];
}
else if (随机 < 0.98f)
{
return 低频[UnityEngine.Random.Range(0, 低频.Length)];
}
else
{
return 极低频[UnityEngine.Random.Range(0, 极低频.Length)];
}
}
private IEnumerator 请求AI生成地块信息()
{
string 提示词 = $@"你是一个生态科考AI助手,现在要生成一个新的地块信息。
该地块编号为 {当前地块编号},生态类型为:{当前生态类型}。
请根据以下要求生成内容:
1. 描述该地块的生态环境
2. 列出该地块中可能存在的生物(鸟类、走兽、鱼类、蛇虫、虫鼠)
3. 使用中文,不要使用Markdown格式
4. 返回格式为 JSON,示例格式如下:
{{
""描述"": """",
""生物列表"": [""狼"", ""兔子"", ""蘑菇""]
}}";
var inputs = new Dictionary<string, string>
{
{ "地块编号", 当前地块编号.ToString() },
{ "生态类型", 当前生态类型 }
};
AIManager.Instance.发送消息给AI(提示词, inputs);
while (AIManager.Instance.当前回复 == null)
{
yield return null;
}
string AI回复 = AIManager.Instance.当前回复;
Debug.Log($"✅ AI返回地块信息:\n{AI回复}");
处理并写入地块数据(AI回复);
}
private void 处理并写入地块数据(string AI回复)
{
try
{
var 回复对象 = JsonConvert.DeserializeObject<Dictionary<string, object>>(AI回复);
string 描述 = 回复对象["描述"].ToString();
List<string> 生物列表 = JsonConvert.DeserializeObject<List<string>>(回复对象["生物列表"].ToString());
string 生物字符串 = string.Join(",", 生物列表);
string 新地块行 = $"{当前地块编号}|{当前地块编号}|{当前生态类型}|{生物字符串}|{描述}";
File.AppendAllText(数据文件路径, 新地块行 + "\n");
Debug.Log($"✅ 地块信息已写入文件: {新地块行}");
地块Data 新地块 = new 地块Data
{
X = 当前地块编号,
Y = 0,
生态类型 = 当前生态类型,
生物列表 = 生物字符串,
描述 = 描述
};
地块列表.Add(新地块);
StartCoroutine(请求AI生成开场白(新地块));
}
catch (Exception ex)
{
Debug.LogError($"❌ 解析AI回复失败: {ex.Message}\n回复内容: {AI回复}");
}
}
private IEnumerator 请求AI生成开场白(地块Data 新地块)
{
string 提示词 = $@"根据以下地块信息生成一段开场白:
坐标: ({新地块.X}, {新地块.Y})
生态类型: {新地块.生态类型}
生物列表: {新地块.生物列表}
描述: {新地块.描述}
要求:
1. 以科考员的视角进行描述
2. 充满探索感和代入感
3. 使用中文,口语化,不使用Markdown
4. 控制在100字以内";
AIManager.Instance.发送消息给AI(提示词);
while (AIManager.Instance.当前回复 == null)
{
yield return null;
}
预加载开场白 = AIManager.Instance.当前回复;
Debug.Log($"✅ 预加载开场白已生成:\n{预加载开场白}");
while (!用户已接受邀请)
{
yield return null;
}
聊天系统.Instance.收到AI消息(预加载开场白);
}
}
修改之后给我输出完整代码
最新发布