102 lines
4.8 KiB
C#
102 lines
4.8 KiB
C#
using TMPro;
|
||
using UnityEngine.EventSystems;
|
||
using UnityEngine;
|
||
using System.Collections.Generic;
|
||
using Newtonsoft.Json;
|
||
using System.Text.RegularExpressions;
|
||
using System.Collections;
|
||
|
||
|
||
|
||
[RequireComponent(typeof(TMP_Text))]
|
||
|
||
public class LinkOpener : MonoBehaviour, IPointerClickHandler
|
||
{
|
||
public DeepSeekDialogueManager dialogueManager;
|
||
public DialogueCaller dialogueCaller;
|
||
public TextMeshProUGUI dialogueText;
|
||
|
||
public InfoShow infoShow;
|
||
|
||
|
||
|
||
public DeepSeekReasonerStreamManager deepSeekReasonerStreamManager;
|
||
public DialogueCallerStream dialogueCallerStream;
|
||
|
||
|
||
// 监听点击事件
|
||
public void OnPointerClick(PointerEventData eventData)
|
||
{
|
||
|
||
int linkIndex = TMP_TextUtilities.FindIntersectingLink(dialogueText, eventData.position, null);
|
||
if (linkIndex != -1)
|
||
{
|
||
GameManager.Instance.infoTGo.text = "智慧正在酝酿中,请稍候…";
|
||
TMP_LinkInfo linkInfo = dialogueText.textInfo.linkInfo[linkIndex];
|
||
string linkID = linkInfo.GetLinkID(); // 获取点击的文字
|
||
|
||
if (linkID.Contains("返回"))
|
||
{
|
||
Debug.Log("返回链接被点击");
|
||
return;
|
||
}
|
||
|
||
Debug.Log($"点击了:{linkID}");
|
||
HandleLinkClick(linkID);
|
||
}
|
||
}
|
||
|
||
// 处理点击事件
|
||
private void HandleLinkClick(string linkID)
|
||
{
|
||
string myString = "请你提出一些有关" + linkID + "的问题" +
|
||
",要求是2-3个,最好是科普性的,小学生感兴趣的,例如: 什么是航母?" +
|
||
"回答的时候最好是以JSON的格式回答,比如:{\"什么是航母?\": \"航空母舰是一种大型水面舰船,以舰载飞机为主要武器\", " +
|
||
"\"什么是潜艇?\": \"一种水下作战武器\"}" +
|
||
"。请一定记得回答的内容要用{}括起来,千万别忘了给整个内容加上{},每个答案的内容在250字左右";
|
||
|
||
deepSeekReasonerStreamManager.infoShow = infoShow;
|
||
deepSeekReasonerStreamManager.dialogueText = infoShow.textMeshProUGUI;
|
||
dialogueCallerStream.SendUserMessage(myString);
|
||
|
||
//dialogueManager.SendDialogueRequest(myString, linkidResponse);
|
||
}
|
||
|
||
private void linkidResponse(string response, bool isSuccess)
|
||
{
|
||
if (isSuccess)
|
||
{
|
||
print(response);
|
||
try
|
||
{
|
||
Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(response);
|
||
infoShow.ShowInfo(dictionary);
|
||
}
|
||
catch (System.Exception)
|
||
{
|
||
infoShow.ShowInfo(
|
||
new Dictionary<string, string>
|
||
{
|
||
{"什么是潜艇?","潜艇是一种能够在水下航行的特种舰艇,主要用于军事侦察、战斗巡逻、秘密运输等任务。潜艇利用内部的压载舱调整自身浮力,实现浮出水面或下潜水中的能力。现代潜艇通常配备柴油发动机或核动力系统,能够长时间潜伏在水下执行任务。军事潜艇通常携带鱼雷、导弹或水雷等武器,能够对敌方舰船实施打击。此外,潜艇还可用于海洋科学研究、深海探测和搜救任务。在历史上,潜艇在第一次和第二次世界大战中都发挥了重要作用,尤其是德国的“U型潜艇”对海战产生了深远影响。如今,各国海军普遍装备不同类型的潜艇,如战略核潜艇、攻击型潜艇和常规动力潜艇,以执行各种军事和非军事任务。"},
|
||
{"什么是航母?","航空母舰,简称航母,是一种专门用于搭载和起降战斗机的大型水面舰艇。航母通常配备巨大的甲板作为飞机的跑道,并设有升降机、机库等辅助设施,使舰载机能够高效起降和维护。现代航母一般由核动力或常规动力提供动力,拥有强大的续航能力。航母不仅是一种海上军事基地,还是国家海军力量的象征,能够在远离本土的海域实施空中作战任务。其舰载机编队能够执行制空、对海打击、反潜作战、电子战等多种任务。航母战斗群通常由驱逐舰、护卫舰、补给舰和潜艇等护航舰艇组成,形成强大的作战体系。世界主要海军强国,如美国、中国、英国、法国等,都装备有不同级别的航母,并持续发展新型舰载机和航母战斗体系。"}
|
||
}
|
||
);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError("对话请求失败或无回复");
|
||
}
|
||
}
|
||
|
||
// 解析 [] 内的内容,转换成 <link> 形式
|
||
private string ParseClickableText(string rawText)
|
||
{
|
||
return Regex.Replace(rawText, @"\[(.*?)\]", "<link=$1><color=yellow><u>$1</u></color></link>");
|
||
}
|
||
|
||
}
|
||
|
||
|