diff --git a/Assets/Prefabs/Scissor.prefab b/Assets/Prefabs/Scissor.prefab new file mode 100644 index 000000000..da32246fb --- /dev/null +++ b/Assets/Prefabs/Scissor.prefab @@ -0,0 +1,101 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2485500826200128654 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4991240399770923164} + - component: {fileID: 4101671748916885094} + - component: {fileID: 4414950781642350908} + m_Layer: 0 + m_Name: Scissor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4991240399770923164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2485500826200128654} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4101671748916885094 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2485500826200128654} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: a381c88104077474e99fc58857a227bc, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 25, y: 25} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &4414950781642350908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2485500826200128654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4fd53c3c93f6e48428e57a5b0d7c8a66, type: 3} + m_Name: + m_EditorClassIdentifier: + cursorTexture: {fileID: 2800000, guid: a381c88104077474e99fc58857a227bc, type: 3} + rotationCorrection: {x: 0, y: 0, z: 0} diff --git a/Assets/Scripts/FixSystem/Module.meta b/Assets/Prefabs/Scissor.prefab.meta similarity index 57% rename from Assets/Scripts/FixSystem/Module.meta rename to Assets/Prefabs/Scissor.prefab.meta index 704126a8c..344d741ec 100644 --- a/Assets/Scripts/FixSystem/Module.meta +++ b/Assets/Prefabs/Scissor.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: 66396da4416c4704b8de9d1e3073c484 -folderAsset: yes -DefaultImporter: +guid: 1afc7e4d2be0126438b5fe65aaccc901 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs index 7c5bcf9d2..d81a9b499 100644 --- a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs +++ b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs @@ -21,6 +21,8 @@ public class EyeTransitionManager : MonoBehaviour // MemoryProcess 组件的引用 public MemoryProcess memoryProcess; + public LineManager lineManager; // LineManager的引用 + // 视图配置类 [System.Serializable] public class ViewConfig @@ -29,6 +31,7 @@ public class EyeTransitionManager : MonoBehaviour public Button activateButton; // 视图的激活按钮(MainView除外) public Button returnToMainViewButton; // 视图的返回MainView按钮 public Socket socket; + public InteractiveLineSegment lineSegment; // 线段 public ViewState viewState; private bool _isAvailable = false; // 视图是否可用的私有字段 @@ -188,6 +191,18 @@ public class EyeTransitionManager : MonoBehaviour optionDic[viewConfig.viewState+ "Activate"].SelectOption(); }); } + foreach (var lineSegmentName in lineManager.GetLineSegmentNames()) + { + var recognizedName = lineManager.GetLineSegmentName(lineSegmentName); + if (recognizedName != null && optionDic.ContainsKey(recognizedName + "Scissor")) + { + // 为线段的option赋值 + lineManager.BindOptionToLineSegment(lineSegmentName, optionDic[recognizedName + "Scissor"]); + } + } + + + } } @@ -256,6 +271,8 @@ public void SetViewAvailability(string viewStateName, bool isAvailable) SaveState(); } +// Yarn 命令,设置线段的可剪断性 + // 开始视图过渡 diff --git a/Assets/Prototype/佩佩/佩佩视觉模块.unity b/Assets/Prototype/佩佩/佩佩视觉模块.unity index 739c75518..a2e82e88d 100644 --- a/Assets/Prototype/佩佩/佩佩视觉模块.unity +++ b/Assets/Prototype/佩佩/佩佩视觉模块.unity @@ -2502,6 +2502,203 @@ RectTransform: m_AnchoredPosition: {x: -5, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &223296687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 223296691} + - component: {fileID: 223296690} + - component: {fileID: 223296689} + - component: {fileID: 223296688} + m_Layer: 0 + m_Name: MemoryUF + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &223296688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223296687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 067e5e9e7bcd7a2429feff639d0ef630, type: 3} + m_Name: + m_EditorClassIdentifier: + startTransform: {fileID: 19183080} + endTransform: {fileID: 590852442} +--- !u!61 &223296689 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223296687} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 6.61, y: -0.60116494} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!120 &223296690 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223296687} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 51099a9679b002c46b76c25f9ac139e3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 959782197 + m_SortingLayer: 5 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.02299881 + value: 0.20912552 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 6 + numCapVertices: 6 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 1 +--- !u!4 &223296691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223296687} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!21 &241218475 Material: serializedVersion: 8 @@ -7654,12 +7851,12 @@ GameObject: - component: {fileID: 863689911} - component: {fileID: 863689912} m_Layer: 0 - m_Name: MemoryToEyeLine + m_Name: MemoryEye m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!120 &863689908 LineRenderer: serializedVersion: 2 @@ -9020,24 +9217,25 @@ MonoBehaviour: zoomDuration: 1 blackScreenImage: {fileID: 783911289} memoryProcess: {fileID: 1617403347} + lineManager: {fileID: 1182811776} viewConfigs: - viewPanel: {fileID: 1229487019} activateButton: {fileID: 1887941707} returnToMainViewButton: {fileID: 1700390218} - isAvailable: 1 socket: {fileID: 2031366194} + lineSegment: {fileID: 863689912} viewState: 1 - viewPanel: {fileID: 1294333830} activateButton: {fileID: 19183081} returnToMainViewButton: {fileID: 2126911511} - isAvailable: 1 socket: {fileID: 7986262} + lineSegment: {fileID: 223296688} viewState: 2 - viewPanel: {fileID: 1882925196} activateButton: {fileID: 590852443} returnToMainViewButton: {fileID: 254003903} - isAvailable: 1 socket: {fileID: 1451543708} + lineSegment: {fileID: 0} viewState: 3 --- !u!4 &1102365682 Transform: @@ -9740,7 +9938,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &1182811776 MonoBehaviour: m_ObjectHideFlags: 0 @@ -9754,6 +9952,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: visualLineSegmentPrefab: {fileID: 3614166255594274803, guid: 094e209d31320554891f54b63c125b31, type: 3} + customCursor: {fileID: 1761949063} --- !u!4 &1182811777 Transform: m_ObjectHideFlags: 0 @@ -10867,6 +11066,10 @@ PrefabInstance: propertyPath: m_SortingLayerID value: 1607245853 objectReference: {fileID: 0} + - target: {fileID: -3288671892723703735, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: -2586898055405681282, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} propertyPath: m_IsActive value: 0 @@ -15971,6 +16174,106 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1758221730} m_CullTransparentMesh: 1 +--- !u!1001 &1761949062 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2485500826200128654, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_Name + value: Scissor + objectReference: {fileID: 0} + - target: {fileID: 2485500826200128654, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4101671748916885094, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_SortingLayer + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4101671748916885094, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_SortingOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4101671748916885094, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_SortingLayerID + value: 959782197 + objectReference: {fileID: 0} + - target: {fileID: 4414950781642350908, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: rotationCorrection.z + value: -180 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalScale.x + value: 0.093240894 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalScale.y + value: 0.093240894 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalScale.z + value: 0.093240894 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalPosition.x + value: -4.59 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalPosition.y + value: -2.93 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4991240399770923164, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} +--- !u!114 &1761949063 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4414950781642350908, guid: 1afc7e4d2be0126438b5fe65aaccc901, type: 3} + m_PrefabInstance: {fileID: 1761949062} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4fd53c3c93f6e48428e57a5b0d7c8a66, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1769484987 GameObject: m_ObjectHideFlags: 0 @@ -19719,3 +20022,5 @@ SceneRoots: - {fileID: 1278583898} - {fileID: 1182811777} - {fileID: 863689910} + - {fileID: 223296691} + - {fileID: 1761949062} diff --git a/Assets/Prototype/佩佩/Sprite/剪刀.png b/Assets/Resources/Art/Tools/Scissor.png similarity index 100% rename from Assets/Prototype/佩佩/Sprite/剪刀.png rename to Assets/Resources/Art/Tools/Scissor.png diff --git a/Assets/Prototype/佩佩/Sprite/剪刀.png.meta b/Assets/Resources/Art/Tools/Scissor.png.meta similarity index 100% rename from Assets/Prototype/佩佩/Sprite/剪刀.png.meta rename to Assets/Resources/Art/Tools/Scissor.png.meta diff --git a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn index 72455aa06..1e68c70c3 100644 --- a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn +++ b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn @@ -4,9 +4,8 @@ // --- title: Start tags: -position: 58,-1202 +position: 58,-1212 --- -//<> //<> <> @@ -14,16 +13,37 @@ position: 58,-1202 title: TV position: 63,-958 --- -// <> -// 电视: 新闻1内容 -// <> -// 电视: 新闻2内容 -// <> -// 电视: 新闻3内容 -// 我: 销售大赛…给机器人销售罐头?为什么呢…… +<> +电视: 新闻1内容 +<> +电视: 新闻2内容 +<> +电视: 新闻3内容 +我: 销售大赛…给机器人销售罐头?为什么呢…… +<> +///表示UF模块在当前维修阶段是否已经进入过了 +<> +//<> <> === +title: LineTest +position: 537,-1196 +--- +<> +<> +<> +<> +[command name=activate_socket_choice /] +[options /] + -> MemoryEyeScissor<> + 我::剪断哦了 + <> + <> + -> MemoryUFScissor + 我::这个剪不断噢 + <> +=== title: OutDoorTalk position: 72,-688 @@ -105,10 +125,12 @@ position: 71,-262 <> === title: Choice -position: 77,22 +position: 78,21 --- <> <> + <> + <> <> <> ->开启视觉检查权限 @@ -392,7 +414,7 @@ position: -266,367 === title: Treatment -position: 136,479 +position: 153,473 --- <> <> @@ -457,19 +479,34 @@ title: Surgery position: 85,821 --- /////头部视角-视觉-记忆桥截断术 - //<> - ->执行视觉-记忆桥阻断术 - 佩佩: 啊…眼睛……我的…… - 佩佩: 好痛! - 我: 怎么了?怪了,这不应该引起任何痛觉的… - 佩佩: …… - 佩佩: 呼…… - 佩佩: 好像……好多了。 - 我: 进视觉和UF模块检查一下吧。 - <> - <> - <> +[options /] + -> MemoryEyeScissor + <> + 佩佩: 啊…眼睛……我的…… + 佩佩: 好痛! + 我: 怎么了?怪了,这不应该引起任何痛觉的… + 佩佩: …… + 佩佩: 呼…… + 佩佩: 好像……好多了。 + 我: 进视觉和UF模块检查一下吧。 + <> + <> + <> + -> MemoryUFScissor + 我: 我们要剪的不是这个吧 + <> +// ->执行视觉-记忆桥阻断术 +// 佩佩: 啊…眼睛……我的…… +// 佩佩: 好痛! +// 我: 怎么了?怪了,这不应该引起任何痛觉的… +// 佩佩: …… +// 佩佩: 呼…… +// 佩佩: 好像……好多了。 +// 我: 进视觉和UF模块检查一下吧。 +// <> +// <> +// <> === title: review @@ -483,13 +520,13 @@ position: 85,1052 <> 我: 好,都没问题了。 <> -->复查视觉系统<> +->开启视觉检查权限<> <> [options /] -> EyeViewActivate <> <> -->复查UF模块<> +->进行绘图测试<> <> ->结束治疗<> <> @@ -522,7 +559,7 @@ position: -171,1128 <> ///<<任务提示更新:进行UF绘图测试>> -我: 我们用UF画一张图吧 +我: 佩佩,我们用UF画一张图吧 <> 我: 总算是好了。你恢复正确的绘制能力了 <> diff --git a/Assets/Scripts/FixSystem/Line/CustomCursor.cs b/Assets/Scripts/FixSystem/Line/CustomCursor.cs new file mode 100644 index 000000000..0e1719deb --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/CustomCursor.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CustomCursor : MonoBehaviour +{ + public Texture2D cursorTexture; + public Vector3 rotationCorrection; // 旋转修正,你可以在 Inspector 中设置 + + private void Start() + { + // 设置旋转修正 + transform.rotation = Quaternion.Euler(rotationCorrection); + } + + private void Update() + { + // 设置自定义光标的位置为鼠标的位置 + Vector2 cursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + transform.position = cursorPos; + } + + private void OnEnable() + { + // 当启用自定义光标时,隐藏默认的鼠标光标 + Cursor.visible = false; + } + + private void OnDisable() + { + // 当禁用自定义光标时,显示默认的鼠标光标 + Cursor.visible = true; + } +} + + diff --git a/Assets/Scripts/FixSystem/Module/Module.cs.meta b/Assets/Scripts/FixSystem/Line/CustomCursor.cs.meta similarity index 83% rename from Assets/Scripts/FixSystem/Module/Module.cs.meta rename to Assets/Scripts/FixSystem/Line/CustomCursor.cs.meta index bf938b66d..2847c5fbf 100644 --- a/Assets/Scripts/FixSystem/Module/Module.cs.meta +++ b/Assets/Scripts/FixSystem/Line/CustomCursor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7e3a15ec4d5079e45b4a663a654825ca +guid: 4fd53c3c93f6e48428e57a5b0d7c8a66 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs b/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs index d7f79f593..a25f69791 100644 --- a/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs +++ b/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs @@ -1,5 +1,6 @@ using Unity.VisualScripting; using UnityEngine; +using AibisDream; public class InteractiveLineSegment : VisualLineSegment { @@ -21,6 +22,26 @@ public class InteractiveLineSegment : VisualLineSegment private BoxCollider2D boxCollider; + private YarnOption _option; + + public YarnOption Option + { + get => _option; + set => _option = value; + } + public bool IsCuttable + { + get { return _isCuttable; } + set + { + _isCuttable = value; + // Change the color of the line segment based on its cuttability + GetComponent().material.color = value ? Color.white : Color.black; + } + } + private bool _isCuttable=false; + + protected override void Awake() { base.Awake(); @@ -31,6 +52,7 @@ public class InteractiveLineSegment : VisualLineSegment Initialize(); } + public void Initialize() @@ -40,6 +62,7 @@ public class InteractiveLineSegment : VisualLineSegment Debug.LogError("StartTransform or EndTransform is not set."); return; } + IsCuttable=false; base.Initialize(StartTransform.position, EndTransform.position); diff --git a/Assets/Scripts/FixSystem/Line/LineManager.cs b/Assets/Scripts/FixSystem/Line/LineManager.cs index 74360754c..6f128b7b4 100644 --- a/Assets/Scripts/FixSystem/Line/LineManager.cs +++ b/Assets/Scripts/FixSystem/Line/LineManager.cs @@ -1,13 +1,169 @@ using UnityEngine; +using Yarn.Unity; +using System; +using System.Collections.Generic; +using System.Collections; +using AibisDream; +using System.Linq; public class LineManager : MonoBehaviour { //public GameObject interactiveLineSegmentPrefab; public GameObject visualLineSegmentPrefab; + public CustomCursor customCursor; // 自定义光标,你可以在 Inspector 中设置 + + private bool isScissorsMode; + + public bool IsScissorsMode + { + get + { + return isScissorsMode; + } + set + { + isScissorsMode = value; + + if (isScissorsMode) + { + SetScissorsCursor(); + } + else + { + ResetCursor(); + } + } + } + private Dictionary lineSegmentDictionary = new Dictionary(); + + public IEnumerable GetLineSegmentNames() +{ + return lineSegmentDictionary.Keys; +} + + private void SetScissorsCursor() + { + // 启用自定义光标 + customCursor.gameObject.SetActive(true); + } + + private void ResetCursor() + { + // 禁用自定义光标 + customCursor.gameObject.SetActive(false); + } + + + + + private void Start() + { + // 查找场景中的所有 InteractiveLineSegment 并添加到字典中 + InteractiveLineSegment[] lineSegments = FindObjectsOfType(); + foreach (InteractiveLineSegment lineSegment in lineSegments) + { + lineSegmentDictionary.Add(lineSegment.name, lineSegment); + } + } + public InteractiveLineSegment GetLineSegmentByName(string lineSegmentName) + { + if (lineSegmentDictionary.TryGetValue(lineSegmentName, out InteractiveLineSegment lineSegment)) + { + return lineSegment; + } + else + { + Debug.LogError("Invalid line segment name: " + lineSegmentName); + return null; + } + } + public string GetLineSegmentName(string input) + { + // 转换为小写并移除所有的下划线 + string[] inputWords = input.ToLower().Split('_'); + + foreach (var lineSegmentName in lineSegmentDictionary.Keys) + { + // 转换为小写并移除所有的下划线 + string[] lineSegmentWords = lineSegmentName.ToLower().Split('_'); + + // 检查是否包含相同的单词 + if (inputWords.All(word => lineSegmentWords.Contains(word)) && lineSegmentWords.All(word => inputWords.Contains(word))) + { + return lineSegmentName; + } + } + + return null; + } + + + // Yarn 命令,设置线段的可剪断性 + [YarnCommand("set_line_cuttable")] + public void SetLineCuttable(string lineSegmentName, bool isCuttable) + { + string recognizedName = GetLineSegmentName(lineSegmentName); + if (recognizedName != null) + { + InteractiveLineSegment lineSegment = GetLineSegmentByName(recognizedName); + if (lineSegment != null) + { + lineSegment.IsCuttable = isCuttable; + } + } + else + { + Debug.LogError("Invalid line segment name: " + lineSegmentName); + } + } + + + // Yarn 命令,设置剪刀模式 + [YarnCommand("set_scissors_mode")] + public void SetScissorsMode(bool isEnabled) + { + IsScissorsMode = isEnabled; + } + + public void CutLine(InteractiveLineSegment originalLineSegment, Vector3 splitPoint) + { + // 如果线段不可剪断,就直接返回,不进行剪断操作 + if (!originalLineSegment.IsCuttable) + { + return; + } + + // Create the first new line segment + GameObject firstLineSegmentObject = Instantiate(visualLineSegmentPrefab, transform); + VisualLineSegment firstLineSegment = firstLineSegmentObject.GetComponent(); + firstLineSegment.Initialize(originalLineSegment.StartPoint, splitPoint); + + // Create the second new line segment + GameObject secondLineSegmentObject = Instantiate(visualLineSegmentPrefab, transform); + VisualLineSegment secondLineSegment = secondLineSegmentObject.GetComponent(); + secondLineSegment.Initialize(originalLineSegment.EndPoint, splitPoint); + + // Immediately destroy the original line segment + Destroy(originalLineSegment.gameObject); + + // Shrink and disappear the new line segments + firstLineSegment.ShrinkAndDisappear(); + secondLineSegment.ShrinkAndDisappear(); + } + + public void BindOptionToLineSegment(string lineSegmentName, YarnOption option) +{ + InteractiveLineSegment lineSegment = GetLineSegmentByName(lineSegmentName); + if (lineSegment != null) + { + lineSegment.Option = option; + } +} + private void Update() { - if (Input.GetMouseButtonDown(0)) + if (Input.GetMouseButtonDown(0) && isScissorsMode) { // Convert the mouse position to a 2D ray Vector2 ray = Camera.main.ScreenToWorldPoint(Input.mousePosition); @@ -23,35 +179,23 @@ public class LineManager : MonoBehaviour { Debug.Log("Line segment hit: " + originalLineSegment.name); - // Calculate the split point - Vector3 splitPoint = hit.point; - - // Create the first new line segment - GameObject firstLineSegmentObject = Instantiate(visualLineSegmentPrefab, transform); - VisualLineSegment firstLineSegment = firstLineSegmentObject.GetComponent(); - firstLineSegment.Initialize(originalLineSegment.StartPoint, splitPoint); - - // Create the second new line segment - GameObject secondLineSegmentObject = Instantiate(visualLineSegmentPrefab, transform); - VisualLineSegment secondLineSegment = secondLineSegmentObject.GetComponent(); - secondLineSegment.Initialize(originalLineSegment.EndPoint,splitPoint); - - // Immediately destroy the original line segment - Destroy(originalLineSegment.gameObject); - - // Shrink and disappear the new line segments - firstLineSegment.ShrinkAndDisappear(); - secondLineSegment.ShrinkAndDisappear(); + CutLine(originalLineSegment,hit.point); + + // Check if Option is not null before selecting it + if (originalLineSegment.Option != null) + { + originalLineSegment.Option.SelectOption(); + } } else { - Debug.Log("Hit object is not a line segment"); + //Debug.Log("Hit object is not a line segment"); } } - else - { - Debug.Log("No raycast hit"); - } } } + + + + } diff --git a/Assets/Scripts/FixSystem/Module/Module.cs b/Assets/Scripts/FixSystem/Module/Module.cs deleted file mode 100644 index 0dd9b6dd4..000000000 --- a/Assets/Scripts/FixSystem/Module/Module.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class Module : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -}