diff --git a/Assets/Prefabs/PhysicLinePrefab.prefab b/Assets/Prefabs/PhysicLinePrefab.prefab new file mode 100644 index 000000000..aec399aa2 --- /dev/null +++ b/Assets/Prefabs/PhysicLinePrefab.prefab @@ -0,0 +1,152 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3614166255594274803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9034087187549040666} + - component: {fileID: 8979707155830308861} + - component: {fileID: -3073236352691771152} + m_Layer: 0 + m_Name: PhysicLinePrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9034087187549040666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3614166255594274803} + 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!120 &8979707155830308861 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3614166255594274803} + 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} + 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!114 &-3073236352691771152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3614166255594274803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1198bee0150e12d4aa20514b2c8f3362, type: 3} + m_Name: + m_EditorClassIdentifier: + segmentPrefab: {fileID: 0} + segmentSpacing: 0.1 diff --git a/Assets/Prefabs/PhysicLinePrefab.prefab.meta b/Assets/Prefabs/PhysicLinePrefab.prefab.meta new file mode 100644 index 000000000..34eee49cf --- /dev/null +++ b/Assets/Prefabs/PhysicLinePrefab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: de9108583f2ddb646a6dc8e87e791e48 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs index 6d610aa25..33513e359 100644 --- a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs +++ b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs @@ -69,7 +69,10 @@ public class EyeTransitionManager : MonoBehaviour MainView, EyeView, UFView, - MemoryView + MemoryView, + ColorView + + // 为未来的视图添加更多状态 } diff --git a/Assets/Prototype/佩佩/佩佩视觉模块.unity b/Assets/Prototype/佩佩/佩佩视觉模块.unity index 3564f7dd3..1d5699f14 100644 --- a/Assets/Prototype/佩佩/佩佩视觉模块.unity +++ b/Assets/Prototype/佩佩/佩佩视觉模块.unity @@ -123,6 +123,81 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &3590090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3590091} + - component: {fileID: 3590093} + - component: {fileID: 3590092} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3590091 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3590090} + 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: 1652508981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -4.08, y: 0.66} + m_SizeDelta: {x: 2, y: 1.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3590092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3590090} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3590093 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3590090} + m_CullTransparentMesh: 1 --- !u!1 &4115898 GameObject: m_ObjectHideFlags: 0 @@ -291,7 +366,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -4.42, y: -0.24} + m_AnchoredPosition: {x: -4.06, y: 0.64} m_SizeDelta: {x: 0.736, y: 0.696} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &7986262 @@ -496,7 +571,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &19183080 RectTransform: m_ObjectHideFlags: 0 @@ -5201,6 +5276,94 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 583286921} m_CullTransparentMesh: 1 +--- !u!1 &585617289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 585617290} + - component: {fileID: 585617293} + - component: {fileID: 585617292} + - component: {fileID: 585617291} + m_Layer: 5 + m_Name: SocketColor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &585617290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585617289} + m_LocalRotation: {x: -0, y: -0, z: 1, w: 0.0000029504295} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1652508981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -2.35, y: 0.64} + m_SizeDelta: {x: 0.736, y: 0.696} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &585617291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585617289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2a37d0f43cb6f14c8011e55a756c448, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &585617292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585617289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 83cee37d2be8ac244ad6900c361ef447, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &585617293 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585617289} + m_CullTransparentMesh: 1 --- !u!1 &587665586 GameObject: m_ObjectHideFlags: 0 @@ -5253,7 +5416,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &590852442 RectTransform: m_ObjectHideFlags: 0 @@ -9462,6 +9625,12 @@ MonoBehaviour: socket: {fileID: 1451543708} lineSegment: {fileID: 0} viewState: 3 + - viewPanel: {fileID: 1882925196} + activateButton: {fileID: 590852443} + returnToMainViewButton: {fileID: 254003903} + socket: {fileID: 1451543708} + lineSegment: {fileID: 0} + viewState: 4 --- !u!4 &1102365682 Transform: m_ObjectHideFlags: 0 @@ -10177,7 +10346,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 11d7356c830440f48bbd0208dde62749, type: 3} m_Name: m_EditorClassIdentifier: - visualLineSegmentPrefab: {fileID: 3614166255594274803, guid: 094e209d31320554891f54b63c125b31, type: 3} + physicLineSegmentPrefab: {fileID: 3614166255594274803, guid: de9108583f2ddb646a6dc8e87e791e48, type: 3} customCursor: {fileID: 1761949063} --- !u!4 &1182811777 Transform: @@ -11306,7 +11475,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -2310062875034526340, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: -1673691481530324010, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} propertyPath: m_SortingLayer @@ -11396,6 +11565,10 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} + - target: {fileID: 7782309787341107538, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} - target: {fileID: 9218586654918191133, guid: d8489dc41f8c4c9479ba48d5bf39e02e, type: 3} propertyPath: m_IsActive value: 0 @@ -13211,7 +13384,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -2.42, y: 2.03} + m_AnchoredPosition: {x: -2.37, y: 2.67} m_SizeDelta: {x: 0.736, y: 0.696} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1451543708 @@ -14920,9 +15093,11 @@ RectTransform: - {fileID: 1887941706} - {fileID: 19183080} - {fileID: 590852442} + - {fileID: 3590091} - {fileID: 1079123346} - {fileID: 7986261} - {fileID: 1451543707} + - {fileID: 585617290} - {fileID: 2031366193} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -18032,7 +18207,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1887941706 RectTransform: m_ObjectHideFlags: 0 @@ -18674,7 +18849,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.27, y: -0.06} + m_AnchoredPosition: {x: -0.27, y: 0.57} m_SizeDelta: {x: 0.736, y: 0.696} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2031366194 diff --git a/Assets/Resources/Art/Background/colorRemap.png b/Assets/Resources/Art/Background/colorRemap.png new file mode 100644 index 000000000..4bc123b66 Binary files /dev/null and b/Assets/Resources/Art/Background/colorRemap.png differ diff --git a/Assets/Resources/Art/Background/colorRemap.png.meta b/Assets/Resources/Art/Background/colorRemap.png.meta new file mode 100644 index 000000000..90b2643b0 --- /dev/null +++ b/Assets/Resources/Art/Background/colorRemap.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 07f0e92a84eb90c43a1e3ebacb573796 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn index d71969a6b..34a9455ac 100644 --- a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn +++ b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn @@ -24,16 +24,16 @@ position: 63,-958 ///表示UF模块在当前维修阶段是否已经进入过了 <> <> -<> -<> +//<> +<> <> === title: Test position: 537,-1196 --- -<> -<> +//<> +//<> <> <> [command name=activate_socket_choice /] @@ -49,20 +49,20 @@ position: 537,-1196 title: Test2 position: 537,-1196 --- -[command name=activate_socket_choice /] -[options /] - -> UFView - <> - 我::插入UFview - <> - -> EyeView - <> - 我::插入Eyeview - <> - -> MemoryView - <> - 我::插入Memoryview - <> +// [command name=activate_socket_choice /] +// [options /] +// -> UFView +// <> +// 我::插入UFview +// <> +// -> EyeView +// <> +// 我::插入Eyeview +// <> +// -> MemoryView +// <> +// 我::插入Memoryview +// <> === @@ -84,6 +84,7 @@ position: 72,-688 佩佩: 是的,组长。 佩佩: …… <> + === title: InDoorTalk position: 74,-513 diff --git a/Assets/Scripts/FixSystem/Line/CustomCursor.cs b/Assets/Scripts/FixSystem/Line/CustomCursor.cs index 0e1719deb..d326a040e 100644 --- a/Assets/Scripts/FixSystem/Line/CustomCursor.cs +++ b/Assets/Scripts/FixSystem/Line/CustomCursor.cs @@ -31,6 +31,11 @@ public class CustomCursor : MonoBehaviour // 当禁用自定义光标时,显示默认的鼠标光标 Cursor.visible = true; } + public void Shake(float intensity, float speed) +{ + float shakeAmount = Mathf.Sin(Time.time * speed) * intensity; + transform.rotation = Quaternion.Euler(rotationCorrection + new Vector3(0, 0, shakeAmount)); +} } diff --git a/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs b/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs index a25f69791..b4471102a 100644 --- a/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs +++ b/Assets/Scripts/FixSystem/Line/InteractiveLineSegment.cs @@ -36,12 +36,27 @@ public class InteractiveLineSegment : VisualLineSegment { _isCuttable = value; // Change the color of the line segment based on its cuttability - GetComponent().material.color = value ? Color.white : Color.black; + //GetComponent().material.color = value ? Color.white : Color.black; } } private bool _isCuttable=false; + public void OnHover() + { + if (IsCuttable) + { + TurnGreen(); + } + else + { + TurnRed(); + } + } + public void OnHoverExit() + { + TurnGrey(); + } protected override void Awake() { base.Awake(); @@ -52,11 +67,26 @@ public class InteractiveLineSegment : VisualLineSegment Initialize(); } - + + + public void TurnGreen() + { + lineRenderer.material.color = Color.green; // 改变 LineRenderer 的颜色 + } + + public void TurnGrey() + { + lineRenderer.material.color = Color.grey; // 改变 LineRenderer 的颜色 + } + public void TurnRed() + { + lineRenderer.material.color = Color.red; // 改变 LineRenderer 的颜色 + } public void Initialize() { + TurnGrey(); if (StartTransform == null || EndTransform == null) { Debug.LogError("StartTransform or EndTransform is not set."); @@ -84,5 +114,7 @@ public class InteractiveLineSegment : VisualLineSegment // Set the position of the BoxCollider2D to the start point boxCollider.transform.position = StartPoint; + + } } diff --git a/Assets/Scripts/FixSystem/Line/LineManager.cs b/Assets/Scripts/FixSystem/Line/LineManager.cs index 6f128b7b4..42727aa1c 100644 --- a/Assets/Scripts/FixSystem/Line/LineManager.cs +++ b/Assets/Scripts/FixSystem/Line/LineManager.cs @@ -5,11 +5,12 @@ using System.Collections.Generic; using System.Collections; using AibisDream; using System.Linq; +using DG.Tweening; public class LineManager : MonoBehaviour { //public GameObject interactiveLineSegmentPrefab; - public GameObject visualLineSegmentPrefab; + public GameObject physicLineSegmentPrefab; public CustomCursor customCursor; // 自定义光标,你可以在 Inspector 中设置 @@ -41,6 +42,131 @@ public class LineManager : MonoBehaviour { return lineSegmentDictionary.Keys; } +private InteractiveLineSegment currentLineSegment; // 当前要被剪断的线段 + +private const float LONG_PRESS_THRESHOLD = 3.0f; // 长按阈值,可以根据需要调整 +private float longPressTime = 0.0f; // 长按时间 +private float detectionRadius=0.4f; + +public void CutLine(InteractiveLineSegment originalLineSegment, Vector3 splitPoint) +{ + // 如果线段不可剪断,就直接返回,不进行剪断操作 + if (!originalLineSegment.IsCuttable) + { + return; + } + + // Create the first new line segment + GameObject firstLineSegmentObject = Instantiate(physicLineSegmentPrefab, transform); + PhysicLineSegment firstLineSegment = firstLineSegmentObject.GetComponent(); + firstLineSegment.Initialize(originalLineSegment.StartTransform.position, splitPoint); + + // Create the second new line segment + GameObject secondLineSegmentObject = Instantiate(physicLineSegmentPrefab, transform); + PhysicLineSegment secondLineSegment = secondLineSegmentObject.GetComponent(); + secondLineSegment.Initialize(originalLineSegment.EndTransform.position,splitPoint); + + // Immediately destroy the original line segment + Destroy(originalLineSegment.gameObject); +} + + +private void AddPhysicsComponents(GameObject lineSegmentObject) + { + // Add Rigidbody2D + Rigidbody2D rb = lineSegmentObject.AddComponent(); + rb.gravityScale = 1; // Enable gravity + + // Add HingeJoint2D + HingeJoint2D hinge = lineSegmentObject.AddComponent(); + hinge.anchor = Vector2.zero; // Set the anchor at one end of the line segment + } + public void BindOptionToLineSegment(string lineSegmentName, YarnOption option) +{ + InteractiveLineSegment lineSegment = GetLineSegmentByName(lineSegmentName); + if (lineSegment != null) + { + lineSegment.Option = option; + } +} +private void EnterLineSegment(InteractiveLineSegment lineSegment) +{ + if (currentLineSegment != null) + { + lineSegment.OnHoverExit(); + } + lineSegment.OnHover(); + currentLineSegment = lineSegment; +} +private void LongPressLineSegment(InteractiveLineSegment lineSegment) +{ + longPressTime += Time.deltaTime; + Vector3 midpoint = (lineSegment.StartPoint + lineSegment.EndPoint) / 2; + + // Make the scissors shake and the line segment turn red + if (longPressTime < LONG_PRESS_THRESHOLD) + { + customCursor.Shake(longPressTime * 5.0f, 10.0f); // 抖动强度随时间增加 + //lineSegment.TurnRed(longPressTime / LONG_PRESS_THRESHOLD); // 线段变红的程度随时间增加 + + // Calculate the midpoint of the line segment + + // Move the scissors towards the midpoint + //customCursor.transform.DOMove(midpoint, 0.1f); + } + else + { + // Cut the line segment + CutLine(lineSegment,midpoint); + } +} + +private void ExitLineSegment() +{ + if (currentLineSegment != null) + { + currentLineSegment.TurnGrey(); + } + currentLineSegment = null; +} + + + + private void Update() +{ + if (isScissorsMode) + { + // Get the position of the mouse in world coordinates + Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); + + // Check if there is a line segment in the scissors' detection range + Collider2D hitCollider = Physics2D.OverlapCircle(mousePosition, detectionRadius); + InteractiveLineSegment hitLineSegment = hitCollider != null ? hitCollider.GetComponent() : null; + if (hitLineSegment != null) + { + EnterLineSegment(hitLineSegment); + + if (Input.GetMouseButtonDown(0)) + { + longPressTime = 0.0f; + } + else if (Input.GetMouseButton(0)) + { + LongPressLineSegment(hitLineSegment); + } + else if (Input.GetMouseButtonUp(0)) + { + longPressTime = 0.0f; + //customCursor.ResetRotation(); // 假设你有一个方法来重置剪刀的旋转 + //currentLineSegment.ResetColor(); // 假设你有一个方法来重置线段的颜色 + } + } + else + { + ExitLineSegment(); + } + } +} private void SetScissorsCursor() { @@ -126,74 +252,7 @@ public class LineManager : MonoBehaviour 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) && isScissorsMode) - { - // Convert the mouse position to a 2D ray - Vector2 ray = Camera.main.ScreenToWorldPoint(Input.mousePosition); - - // Check if the ray hits a line segment - RaycastHit2D hit = Physics2D.Raycast(ray, Vector2.zero); - if (hit.collider != null) - { - Debug.Log("Raycast hit: " + hit.transform.name); - - InteractiveLineSegment originalLineSegment = hit.transform.GetComponent(); - if (originalLineSegment != null) - { - Debug.Log("Line segment hit: " + originalLineSegment.name); - - 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"); - } - } - } - } + diff --git a/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs b/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs new file mode 100644 index 000000000..780267345 --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using UnityEngine; + +[RequireComponent(typeof(LineRenderer))] +public class PhysicLineSegment : MonoBehaviour +{ + public float segmentSpacing = 0.1f; + public int k = 30; + + public Vector3 start; + public Vector3 end; + + private List particles = new List(); + private List sticks = new List(); + private LineRenderer lineRenderer; + private int segmentCount; + public float gravity = -9.8f; + +public void Initialize(Vector3 start, Vector3 end) +{ + this.start = start; + this.end = end; + //originalLength = Vector3.Distance(start, end); + + // Calculate the number of segments and the spacing between them + segmentCount = Mathf.RoundToInt(Vector3.Distance(start, end) / segmentSpacing); + lineRenderer = GetComponent(); + + // Initialize particles + for (int i = 0; i < segmentCount; i++) + { + // Calculate the position of the segment + var particle = new VerletParticle(Vector3.Lerp(start, end, i / (float)segmentCount)); + + particles.Add(particle); + } + + // Initialize sticks + for (int i = 0; i < segmentCount - 1; i++) + { + sticks.Add(new VerletStick(particles[i], particles[i + 1], segmentSpacing)); + } + + // Lock the first particle + particles[0].isLocked = true; + + lineRenderer.positionCount = segmentCount; +} + + + void FixedUpdate() + { + UpdateLine(); + for (int i = 0; i < segmentCount; i++) + { + lineRenderer.SetPosition(i, particles[i].position); + } + } + + void UpdateLine() + { + // Apply gravity to particles + for (int i = 1; i < particles.Count; i++) + { + + particles[i].ApplyForce(Vector3.up * gravity * Time.deltaTime); + particles[i].UpdatePosition(Time.deltaTime); + } + + // Update sticks + for (int ik = 0; ik < k; ik++) + { + foreach (var stick in sticks) + { + stick.UpdateStick(); + } + } + } +} + + + + diff --git a/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs.meta b/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs.meta new file mode 100644 index 000000000..0720d8a6f --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/PhysicLineSegment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1198bee0150e12d4aa20514b2c8f3362 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/FixSystem/Line/VerletParticle.cs b/Assets/Scripts/FixSystem/Line/VerletParticle.cs new file mode 100644 index 000000000..541fac213 --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/VerletParticle.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VerletParticle +{ + public Vector3 position; + public Vector3 previousPosition; + public bool isLocked; + + public VerletParticle(Vector3 position) + { + this.position = position; + this.previousPosition = position; + this.isLocked = false; + } + + public void ApplyForce(Vector3 force) + { + Vector3 temp = position; + position += position - previousPosition + force; + previousPosition = temp; + } + + public void UpdatePosition(float deltaTime) + { + Vector3 temp = position; + position += (position - previousPosition) * deltaTime; + previousPosition = temp; + } +} diff --git a/Assets/Scripts/FixSystem/Line/VerletParticle.cs.meta b/Assets/Scripts/FixSystem/Line/VerletParticle.cs.meta new file mode 100644 index 000000000..78096c3f1 --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/VerletParticle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdb6feb01313af04f8abf13c63227196 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/FixSystem/Line/VerletStick.cs b/Assets/Scripts/FixSystem/Line/VerletStick.cs new file mode 100644 index 000000000..22365793f --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/VerletStick.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VerletStick +{ + private VerletParticle particleA; + private VerletParticle particleB; + private float length; + public float stiffness = 0.8f; // Add this line + + public VerletStick(VerletParticle particleA, VerletParticle particleB, float length) + { + this.particleA = particleA; + this.particleB = particleB; + this.length = length; + } + + public void UpdateStick() + { + float currentLength = Vector3.Distance(particleA.position, particleB.position); + float difference = length - currentLength; + Vector3 direction = (particleB.position - particleA.position).normalized; + + if (!particleA.isLocked) + { + particleA.position -= direction * difference * stiffness; // Change this line + } + + if (!particleB.isLocked) + { + particleB.position += direction * difference * stiffness; // Change this line + } + } +} diff --git a/Assets/Scripts/FixSystem/Line/VerletStick.cs.meta b/Assets/Scripts/FixSystem/Line/VerletStick.cs.meta new file mode 100644 index 000000000..8d6e0f3d7 --- /dev/null +++ b/Assets/Scripts/FixSystem/Line/VerletStick.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f52ebcdf1c225c48ad6413459d49309 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/FixSystem/Line/VisualLineSegment.cs b/Assets/Scripts/FixSystem/Line/VisualLineSegment.cs index 4a583b11f..e4d55d05f 100644 --- a/Assets/Scripts/FixSystem/Line/VisualLineSegment.cs +++ b/Assets/Scripts/FixSystem/Line/VisualLineSegment.cs @@ -23,14 +23,14 @@ public class VisualLineSegment : MonoBehaviour lineRenderer.SetPosition(1, EndPoint); } - public void ShrinkAndDisappear() - { - // Shrink the line segment from the end to the start - DOTween.To(() => EndPoint, x => EndPoint = x, StartPoint, 1f) - .OnUpdate(() => { - lineRenderer.SetPosition(0, StartPoint); - lineRenderer.SetPosition(1, EndPoint); - }) - .OnComplete(() => Destroy(gameObject)); - } + // public void ShrinkAndDisappear() + // { + // // Shrink the line segment from the end to the start + // DOTween.To(() => EndPoint, x => EndPoint = x, StartPoint, 1f) + // .OnUpdate(() => { + // lineRenderer.SetPosition(0, StartPoint); + // lineRenderer.SetPosition(1, EndPoint); + // }) + // .OnComplete(() => Destroy(gameObject)); + // } }