增加维修场景对view状态的保存,修改yarn来测试交互选项

This commit is contained in:
2024-08-23 15:51:54 +08:00
parent 065c1d7a3a
commit fb1a08db2b
3 changed files with 214 additions and 85 deletions
@@ -7,6 +7,7 @@ using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using Yarn.Unity;
using UnityEngine.SceneManagement;
public class EyeTransitionManager : MonoBehaviour
{
@@ -26,9 +27,26 @@ public class EyeTransitionManager : MonoBehaviour
public GameObject viewPanel; // 视图的面板
public Button activateButton; // 视图的激活按钮(MainView除外)
public Button returnToMainViewButton; // 视图的返回MainView按钮
public bool isAvailable = true; // 视图是否可用
public Socket socket;
public ViewState viewState;
private bool _isAvailable = false; // 视图是否可用的私有字段
// 视图是否可用的公有属性
public bool IsAvailable
{
get { return _isAvailable; }
set
{
_isAvailable = value;
// 当视图的可用性改变时,更新按钮的状态
if (activateButton != null)
{
activateButton.interactable = value;
activateButton.gameObject.SetActive(value);
}
}
}
}
// 在 Unity 编辑器中配置视图(不包括MainView)
@@ -56,9 +74,59 @@ public class EyeTransitionManager : MonoBehaviour
// 视图更改请求的事件
public delegate void ViewChangeRequestedHandler(ViewState targetViewState);
public event ViewChangeRequestedHandler OnViewChangeRequested;
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
SceneManager.sceneUnloaded += OnSceneUnloaded;
}
private void OnDestroy()
{
SceneManager.sceneUnloaded -= OnSceneUnloaded;
}
private void OnSceneUnloaded(Scene currentScene)
{
if (currentScene.name == "佩佩视觉模块")
{
SaveState();
}
}
private void SaveState()
{
PlayerPrefs.SetString("CurrentViewState", currentViewState.ToString());
foreach (var config in viewConfigs)
{
PlayerPrefs.SetInt(config.viewState.ToString() + "IsAvailable", config.IsAvailable ? 1 : 0);
}
PlayerPrefs.Save();
}
private void LoadState()
{
string savedViewState = PlayerPrefs.GetString("CurrentViewState", "");
if (!string.IsNullOrEmpty(savedViewState))
{
currentViewState = (ViewState)Enum.Parse(typeof(ViewState), savedViewState);
}
foreach (var config in viewConfigs)
{
int isAvailable = PlayerPrefs.GetInt(config.viewState.ToString() + "IsAvailable", -1);
if (isAvailable != -1)
{
config.IsAvailable = isAvailable == 1;
}
}
}
private void Start()
{
// 首先注册命令
@@ -78,8 +146,10 @@ public class EyeTransitionManager : MonoBehaviour
config.returnToMainViewButton.onClick.AddListener(() => StartTransition(ViewState.MainView));
}
// 更新按钮的可用性
config.activateButton.interactable = config.isAvailable;
config.activateButton.interactable = config.IsAvailable;
config.activateButton.gameObject.SetActive(false);
}
LoadState();
}
public void ActivateSocketChoice(YarnOption[] options)
@@ -93,7 +163,7 @@ public class EyeTransitionManager : MonoBehaviour
// 为Socket添加方法
viewConfig.socket.Option = optionDic[viewConfig.viewState.ToString()];
}
else if (optionDic.ContainsKey(viewConfig.viewState + "Activate"))
if (optionDic.ContainsKey(viewConfig.viewState + "Activate"))
{
viewConfig.activateButton.onClick.RemoveAllListeners();
// 为激活添加方法
@@ -163,8 +233,9 @@ public class EyeTransitionManager : MonoBehaviour
if (!viewConfigDictionary.TryGetValue(viewState, out ViewConfig config)) return;
// 更新视图的可用性和激活按钮的可用性
config.isAvailable = isAvailable;
config.IsAvailable = isAvailable;
config.activateButton.interactable = isAvailable;
config.activateButton.gameObject.SetActive(true);
}
// 开始视图过渡
@@ -2764,7 +2764,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &254003902
RectTransform:
m_ObjectHideFlags: 0
@@ -5082,7 +5082,7 @@ GameObject:
- component: {fileID: 594466390}
- component: {fileID: 594466389}
m_Layer: 5
m_Name: FaceCanvas
m_Name: DeepCanvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -7659,7 +7659,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!120 &863689908
LineRenderer:
serializedVersion: 2
@@ -9740,7 +9740,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!114 &1182811776
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -14733,7 +14733,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1700390217
RectTransform:
m_ObjectHideFlags: 0
@@ -19520,7 +19520,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &2126911510
RectTransform:
m_ObjectHideFlags: 0
+132 -74
View File
@@ -6,19 +6,21 @@ title: Start
tags:
position: 58,-1202
---
//<<indoor>>
//<<CharacterInit>>
<<jump TV>>
===
title: TV
position: 63,-958
---
<<switch_tv 黑屏>>
电视: 新闻1内容
<<switch_tv 新闻>>
电视: 新闻2内容
<<switch_tv 销售冠军>>
电视: 新闻3内容
我: 销售大赛…给机器人销售罐头?为什么呢……
// <<switch_tv 黑屏>>
// 电视: 新闻1内容
// <<switch_tv 新闻>>
// 电视: 新闻2内容
// <<switch_tv 销售冠军>>
// 电视: 新闻3内容
// 我: 销售大赛…给机器人销售罐头?为什么呢……
<<jump OutDoorTalk>>
===
@@ -26,18 +28,18 @@ position: 63,-958
title: OutDoorTalk
position: 72,-688
---
英理: 就是这里了,员工诊所。身体检查一定会对你的生产效率有帮助的。
<<indoor>>
英理: 我不希望就因为你生病,而让我们部门的评价受到影响
佩佩: 我没病,组长……我会完成得很好的。相信我。我以前……
英理: 我不在乎你之前做得有多好——我现在不想和你讨论你所说的“好的标准是什么”,那对我来说没有任何意义。
英理: 我不知道为什么你不能理解:如果不能按公司的要求完成,你就会被回收。这是唯一的标准
英理: 公司花了很多资源培养你。就算你不在乎你自己,也不要让公司失望
佩佩: 我……
英理: 听着,佩佩。我是在帮你。
英理: 你的效率是整个美工组最低的,只要我想,我可以直接把你送回收。为了保住你,我承担了你难以想象的压力
英理: (叹气)
英理: 做个身体检查,恢复你的效率。今晚好好休息。
// 英理: 就是这里了,员工诊所。身体检查一定会对你的生产效率有帮助的
// 英理: 我不希望就因为你生病,而让我们部门的评价受到影响。
// 佩佩: 我没病,组长……我会完成得很好的。相信我。我以前……
// 英理: 我不在乎你之前做得有多好——我现在不想和你讨论你所说的“好的标准是什么”,那对我来说没有任何意义
// 英理: 我不知道为什么你不能理解:如果不能按公司的要求完成,你就会被回收。这是唯一的标准
// 英理: 公司花了很多资源培养你。就算你不在乎你自己,也不要让公司失望。
// 佩佩: 我……
// 英理: 听着,佩佩。我是在帮你
// 英理: 你的效率是整个美工组最低的,只要我想,我可以直接把你送回收。为了保住你,我承担了你难以想象的压力。
// 英理: (叹气)
// 英理: 做个身体检查,恢复你的效率。今晚好好休息。
佩佩: 是的,组长。
佩佩: ……
<<jump InDoorTalk>>
@@ -49,23 +51,23 @@ position: 74,-513
///<<播放轻轻的敲门声>>
我: 当然,请进吧。
//<<character_into Peipei>>
佩佩: ……
佩佩: 打扰了,医生。能帮我做个检查吗?
我: 当然没问题。美工组的佩佩,是么?
佩佩: 是的…你怎么知道的?
我: 无意偷听,但是你们刚才就站在我的门口。说说吧,你的身体怎么了,感觉哪里不舒服吗?
佩佩: 倒也没有哪里不舒服……只是最近工作表现很差。
佩佩: 我也说不出来是最近工作状态更差了,还是因为那个广告画的工作压力比较大。
佩佩: 总之最近产出的图总是有点…问题。
我: 画画的过程中哪里感觉不舒服吗?手腕痛,或者头痛?
佩佩: 眼睛确实有些不舒服,但是这应该没有什么关联。
我: 没有关联?如果看不清线条或者色彩什么的,对于你们美工来说,应该工作会很受影响才是吧。
佩佩: 啊…对不起,是我的错,医生。我忘了解释。
佩佩: UnstableFusion。就是我左眼的这个模块。我们的图都是由这个模块生成的。我们不用手画画。
我: 让我查一查,UnstableFusion……
手册: “UnstableFusion,非稳态聚合模块,是幸福罐头公司技术部基于左侧视觉模块研发的图像生成AI。”
手册: “它被广泛应用在公司所有美术管线的关键环节,受到美术部的大力欢迎,极大提高了公司的图像产能。”
我: 嗯…无论如何它们听起来都在头部。来看一看吧。
// 佩佩: ……
// 佩佩: 打扰了,医生。能帮我做个检查吗?
// 我: 当然没问题。美工组的佩佩,是么?
// 佩佩: 是的…你怎么知道的?
// 我: 无意偷听,但是你们刚才就站在我的门口。说说吧,你的身体怎么了,感觉哪里不舒服吗?
// 佩佩: 倒也没有哪里不舒服……只是最近工作表现很差。
// 佩佩: 我也说不出来是最近工作状态更差了,还是因为那个广告画的工作压力比较大。
// 佩佩: 总之最近产出的图总是有点…问题。
// 我: 画画的过程中哪里感觉不舒服吗?手腕痛,或者头痛?
// 佩佩: 眼睛确实有些不舒服,但是这应该没有什么关联。
// 我: 没有关联?如果看不清线条或者色彩什么的,对于你们美工来说,应该工作会很受影响才是吧。
// 佩佩: 啊…对不起,是我的错,医生。我忘了解释。
// 佩佩: UnstableFusion。就是我左眼的这个模块。我们的图都是由这个模块生成的。我们不用手画画。
// 我: 让我查一查,UnstableFusion……
// 手册: “UnstableFusion,非稳态聚合模块,是幸福罐头公司技术部基于左侧视觉模块研发的图像生成AI。”
// 手册: “它被广泛应用在公司所有美术管线的关键环节,受到美术部的大力欢迎,极大提高了公司的图像产能。”
// 我: 嗯…无论如何它们听起来都在头部。来看一看吧。
///<<任务提示更新:治疗佩佩>>
///<<任务提示更新:进行诊断>>
///<<任务提示更新:进入患者头部检修面板>>
@@ -88,35 +90,90 @@ position: 71,-262
///表示记忆模块在当前维修阶段是否已经进入过了
<<declare $MemoryVisited = false>>
<<declare $EyeSocketVisited = false>>
///表示UF模块在当前维修阶段是否已经进入过了
<<declare $UFSocketVisited = false>>
///表示记忆模块在当前维修阶段是否已经进入过了
<<declare $MemorySocketVisited = false>>
//我: 好的,右边这个黑盒子应该就是UF了,左边这个是她的视觉模块,都检查一下吧。
我: 先插线检查下模块吧
[command name=activate_socket_choice /]
我: 好的,右边这个黑盒子应该就是UF了,左边这个是她的视觉模块,都检查一下吧。
<<jump Choice>>
===
title: Choice
position: 74,-5
position: 73,4
---
[options /]
-> UFView
插入UF模块
<<set_view_availability ViewManager "UFView" true>>
<<jump Choice>>
-> EyeView
插入Eye模块
<<set_view_availability ViewManager "EyeView" true>>
<<jump Choice>>
-> MemoryView
插入Memory模块
<<set_view_availability ViewManager "MemoryView" true>>
<<jump Choice>>
-> UFViewActivate
<<jump MainViewUF>>
-> EyeViewActivate
<<jump EyeView>>
-> MemoryViewActivate
<<jump MemoryView>>
<<start_transition ViewManager "MainView">>
<<if $UFSocketVisited==true&&$EyeVisited==true&&$MemoryVisited==true>>
我: 我好像明白了……
->结束诊疗
<<jump conclusion>>
<<else>>
<<if $UFSocketVisited==true&&$EyeVisited==true&&$MemoryVisited==false>>
我: 看起来需要检查下记忆模块
->开启检查权限
<<set_view_availability ViewManager "MemoryView" true>>
<<endif>>
[options /]
-> UFView
//插入UF模块
<<if $UFSocketVisited==false>>
<<set $UFSocketVisited= true>>
我: uf模块有报错,报错信息是XXXXXX之后看看
我: 或许需要深入检查一下
->开启检查权限
我: 嗯?这个模块的保密属性很高,没有深入的权限......
我: 佩佩说过绘图是用这个模块吧
我: 或许至少可以让她绘图来看看
<<set $UFSocketVisited= true>>
<<jump UFtest>>
<<else>>
我: 这里检查过了
<<jump Choice>>
<<endif>>
-> EyeView
//插入Eye模块
<<if $EyeSocketVisited==false>>
<<set $EyeSocketVisited= true>>
我: Eye模块有报错,报错信息是XXXXXX,之后看看
我: 或许需要深入检查一下
->开启检查权限
<<set_view_availability ViewManager "EyeView" true>>
我: 好了,现在可以深入视觉模块了
<<else>>
我: 这里检查过了
<<endif>>
<<jump Choice>>
-> MemoryView
//插入Memory模块
<<if $MemorySocketVisited==false>>
<<set $MemorySocketVisited= true>>
我: 嗯,外部检查似乎没什么异常
我: 先看看其他需要检查的吧
<<else>>
我: 这里检查过了
<<endif>>
<<jump Choice>>
-> EyeViewActivate
<<if $EyeVisited==false>>
<<set $EyeVisited= true>>
<<jump EyeView>>
<<else>>
我: 这里检查过了
<<jump Choice>>
<<endif>>
-> MemoryViewActivate
<<if $MemoryVisited==false>>
<<set $MemoryVisited= true>>
<<jump MemoryView>>
<<else>>
我: 这里检查过了
<<jump Choice>>
<<endif>>
<<endif>>
===
title: EyeView
position: 440,16
position: 554,14
---
///进入视觉模块
<<start_transition ViewManager "EyeView">>
@@ -151,19 +208,22 @@ WARNING: 无法读取色觉模组。(病症介绍,可能是普遍现象)
///<<任务提示更新:检查视觉模块已完成>>
<<set $EyeVisited to true>>
<<if $EyeVisited && $UFVisited && $MemoryVisited>>
<<jump Treatment>>
<<else>>
//<<if $EyeVisited && $UFVisited && $MemoryVisited>>
//<<jump Treatment>>
//<<else>>
<<jump Choice>>
<<endif>>
//<<endif>>
===
title: MainViewUF
title: UFtest
position: -324,10
---
///确保是在主视角下进行UF模块的操作
<<start_transition ViewManager "MainView">>
我: 我们用UF画一张图
我: 佩佩,我需要检查下你的UF模块,你是用它来绘图对
佩佩: 啊是的!
我: 那可以画一张图么,就最近工作里的内容就好
佩佩: 好的,我试试...
<<show_photo UFManager "colorError">>
//【图片颜色错误】
///<<任务提示更新:进行UF绘图测试已完成>>
@@ -171,7 +231,7 @@ position: -324,10
我: 图片看起来…有点诡异。
我: 让我看看手册。(各种情况对应不同的病因)
///这里等会儿改成手册操作
手册: ERROR#9964:不兼容型排异反应。由于受到一些记忆的排异,UF无法正常读取素材。请在记忆模块定位排异源。
手册: ERROR9964:不兼容型排异反应。由于受到一些记忆的排异,UF无法正常读取素材。请在记忆模块定位排异源。
///<<任务提示更新:定位绘图错误的原因已完成>>
///<<任务提示更新:检查UF模块已完成>>
///<<任务提示更新:检查记忆模块,定位排异源>>
@@ -184,17 +244,17 @@ position: -324,10
我: 不好说,需要先检查下。
佩佩: 好的,麻烦医生了。
///标记现在已经访问主视角下的UF模块了
<<set $UFVisited to true>>
//<<set $UFVisited to true>>
<<if $EyeVisited && $UFVisited && $MemoryVisited>>
<<jump Treatment>>
<<else>>
// <<if $EyeVisited && $UFVisited && $MemoryVisited>>
// <<jump Treatment>>
// <<else>>
<<jump Choice>>
<<endif>>
//<<endif>>
===
title: MemoryView
position: 75,242
position: 397,211
---
<<start_transition ViewManager "MemoryView">>
我: 定位一下排异的记忆…
@@ -244,15 +304,13 @@ position: 75,242
///<<任务提示更新:检查记忆模块,定位排异源完成>>
手册: 记忆被异常占用
<<set $MemoryVisited to true>>
<<jump conclusion>>
<<jump Choice>>
===
title: conclusion
position: 72,462
position: 75,366
---
<<load_scene ClinicScene>>
我: 我好像明白了……
///<<load_scene 主房间>>
///<<任务提示更新:进行诊断已完成>>
我: 你的视觉在调用记忆里的素材,为看到的图像填补颜色。