├── README.md └── Rope ├── Chain.png ├── Chain.png.meta ├── Example.unity ├── Example.unity.meta ├── Rope.cs ├── Rope.cs.meta ├── Rope2.cs ├── Rope2.cs.meta ├── Rope3.cs └── Rope3.cs.meta /README.md: -------------------------------------------------------------------------------- 1 | # UnityEngineRope 2 | 10行代码在Unity中实现一条绳子 3 | 4 | ![Rope](https://user-images.githubusercontent.com/41114110/153342869-7af25099-7fdb-4bd0-8c0d-b9b8e91475fe.gif) 5 | -------------------------------------------------------------------------------- /Rope/Chain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sass00n1/UnityEngineRope/f7ba55ba95027cef9c63858e6fe61fa865bac435/Rope/Chain.png -------------------------------------------------------------------------------- /Rope/Chain.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: 1 36 | aniso: 1 37 | mipBias: 0 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 4 48 | spritePivot: {x: 0, y: 0.5} 49 | spritePixelsToUnits: 200 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 8 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 5e97eb03825dee720800000000000000 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Rope/Example.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 512 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 256 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 1 83 | m_PVRDenoiserTypeDirect: 1 84 | m_PVRDenoiserTypeIndirect: 1 85 | m_PVRDenoiserTypeAO: 1 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 1 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1 &142138869 127 | GameObject: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | serializedVersion: 6 133 | m_Component: 134 | - component: {fileID: 142138870} 135 | m_Layer: 0 136 | m_Name: "------\u4E8C\u6761\u7EBF------" 137 | m_TagString: Untagged 138 | m_Icon: {fileID: 0} 139 | m_NavMeshLayer: 0 140 | m_StaticEditorFlags: 0 141 | m_IsActive: 1 142 | --- !u!4 &142138870 143 | Transform: 144 | m_ObjectHideFlags: 0 145 | m_CorrespondingSourceObject: {fileID: 0} 146 | m_PrefabInstance: {fileID: 0} 147 | m_PrefabAsset: {fileID: 0} 148 | m_GameObject: {fileID: 142138869} 149 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 150 | m_LocalPosition: {x: 0, y: 0, z: 0} 151 | m_LocalScale: {x: 1, y: 1, z: 1} 152 | m_Children: [] 153 | m_Father: {fileID: 0} 154 | m_RootOrder: 3 155 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 156 | --- !u!1 &295648080 157 | GameObject: 158 | m_ObjectHideFlags: 0 159 | m_CorrespondingSourceObject: {fileID: 0} 160 | m_PrefabInstance: {fileID: 0} 161 | m_PrefabAsset: {fileID: 0} 162 | serializedVersion: 6 163 | m_Component: 164 | - component: {fileID: 295648082} 165 | - component: {fileID: 295648081} 166 | - component: {fileID: 295648083} 167 | m_Layer: 0 168 | m_Name: Rope 169 | m_TagString: Untagged 170 | m_Icon: {fileID: 0} 171 | m_NavMeshLayer: 0 172 | m_StaticEditorFlags: 0 173 | m_IsActive: 0 174 | --- !u!212 &295648081 175 | SpriteRenderer: 176 | m_ObjectHideFlags: 0 177 | m_CorrespondingSourceObject: {fileID: 0} 178 | m_PrefabInstance: {fileID: 0} 179 | m_PrefabAsset: {fileID: 0} 180 | m_GameObject: {fileID: 295648080} 181 | m_Enabled: 1 182 | m_CastShadows: 0 183 | m_ReceiveShadows: 0 184 | m_DynamicOccludee: 1 185 | m_MotionVectors: 1 186 | m_LightProbeUsage: 1 187 | m_ReflectionProbeUsage: 1 188 | m_RayTracingMode: 0 189 | m_RayTraceProcedural: 0 190 | m_RenderingLayerMask: 1 191 | m_RendererPriority: 0 192 | m_Materials: 193 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 194 | m_StaticBatchInfo: 195 | firstSubMesh: 0 196 | subMeshCount: 0 197 | m_StaticBatchRoot: {fileID: 0} 198 | m_ProbeAnchor: {fileID: 0} 199 | m_LightProbeVolumeOverride: {fileID: 0} 200 | m_ScaleInLightmap: 1 201 | m_ReceiveGI: 1 202 | m_PreserveUVs: 0 203 | m_IgnoreNormalsForChartDetection: 0 204 | m_ImportantGI: 0 205 | m_StitchLightmapSeams: 1 206 | m_SelectedEditorRenderState: 0 207 | m_MinimumChartSize: 4 208 | m_AutoUVMaxDistance: 0.5 209 | m_AutoUVMaxAngle: 89 210 | m_LightmapParameters: {fileID: 0} 211 | m_SortingLayerID: 0 212 | m_SortingLayer: 0 213 | m_SortingOrder: 0 214 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 215 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 216 | m_FlipX: 0 217 | m_FlipY: 0 218 | m_DrawMode: 0 219 | m_Size: {x: 1, y: 1} 220 | m_AdaptiveModeThreshold: 0.5 221 | m_SpriteTileMode: 0 222 | m_WasSpriteAssigned: 1 223 | m_MaskInteraction: 0 224 | m_SpriteSortPoint: 0 225 | --- !u!4 &295648082 226 | Transform: 227 | m_ObjectHideFlags: 0 228 | m_CorrespondingSourceObject: {fileID: 0} 229 | m_PrefabInstance: {fileID: 0} 230 | m_PrefabAsset: {fileID: 0} 231 | m_GameObject: {fileID: 295648080} 232 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 233 | m_LocalPosition: {x: 0, y: 0, z: 0} 234 | m_LocalScale: {x: 1, y: 1, z: 1} 235 | m_Children: [] 236 | m_Father: {fileID: 0} 237 | m_RootOrder: 2 238 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 239 | --- !u!114 &295648083 240 | MonoBehaviour: 241 | m_ObjectHideFlags: 0 242 | m_CorrespondingSourceObject: {fileID: 0} 243 | m_PrefabInstance: {fileID: 0} 244 | m_PrefabAsset: {fileID: 0} 245 | m_GameObject: {fileID: 295648080} 246 | m_Enabled: 1 247 | m_EditorHideFlags: 0 248 | m_Script: {fileID: 11500000, guid: b1dd67216674b174d9407a10f044904a, type: 3} 249 | m_Name: 250 | m_EditorClassIdentifier: 251 | ropeLength: 1 252 | --- !u!1 &298106280 253 | GameObject: 254 | m_ObjectHideFlags: 0 255 | m_CorrespondingSourceObject: {fileID: 0} 256 | m_PrefabInstance: {fileID: 0} 257 | m_PrefabAsset: {fileID: 0} 258 | serializedVersion: 6 259 | m_Component: 260 | - component: {fileID: 298106282} 261 | - component: {fileID: 298106281} 262 | m_Layer: 0 263 | m_Name: Rope1 264 | m_TagString: Untagged 265 | m_Icon: {fileID: 0} 266 | m_NavMeshLayer: 0 267 | m_StaticEditorFlags: 0 268 | m_IsActive: 0 269 | --- !u!212 &298106281 270 | SpriteRenderer: 271 | m_ObjectHideFlags: 0 272 | m_CorrespondingSourceObject: {fileID: 0} 273 | m_PrefabInstance: {fileID: 0} 274 | m_PrefabAsset: {fileID: 0} 275 | m_GameObject: {fileID: 298106280} 276 | m_Enabled: 1 277 | m_CastShadows: 0 278 | m_ReceiveShadows: 0 279 | m_DynamicOccludee: 1 280 | m_MotionVectors: 1 281 | m_LightProbeUsage: 1 282 | m_ReflectionProbeUsage: 1 283 | m_RayTracingMode: 0 284 | m_RayTraceProcedural: 0 285 | m_RenderingLayerMask: 1 286 | m_RendererPriority: 0 287 | m_Materials: 288 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 289 | m_StaticBatchInfo: 290 | firstSubMesh: 0 291 | subMeshCount: 0 292 | m_StaticBatchRoot: {fileID: 0} 293 | m_ProbeAnchor: {fileID: 0} 294 | m_LightProbeVolumeOverride: {fileID: 0} 295 | m_ScaleInLightmap: 1 296 | m_ReceiveGI: 1 297 | m_PreserveUVs: 0 298 | m_IgnoreNormalsForChartDetection: 0 299 | m_ImportantGI: 0 300 | m_StitchLightmapSeams: 1 301 | m_SelectedEditorRenderState: 0 302 | m_MinimumChartSize: 4 303 | m_AutoUVMaxDistance: 0.5 304 | m_AutoUVMaxAngle: 89 305 | m_LightmapParameters: {fileID: 0} 306 | m_SortingLayerID: 0 307 | m_SortingLayer: 0 308 | m_SortingOrder: 0 309 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 310 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 311 | m_FlipX: 0 312 | m_FlipY: 0 313 | m_DrawMode: 0 314 | m_Size: {x: 1, y: 1} 315 | m_AdaptiveModeThreshold: 0.5 316 | m_SpriteTileMode: 0 317 | m_WasSpriteAssigned: 1 318 | m_MaskInteraction: 0 319 | m_SpriteSortPoint: 0 320 | --- !u!4 &298106282 321 | Transform: 322 | m_ObjectHideFlags: 0 323 | m_CorrespondingSourceObject: {fileID: 0} 324 | m_PrefabInstance: {fileID: 0} 325 | m_PrefabAsset: {fileID: 0} 326 | m_GameObject: {fileID: 298106280} 327 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 328 | m_LocalPosition: {x: 0, y: 0, z: 0} 329 | m_LocalScale: {x: 1, y: 1, z: 1} 330 | m_Children: [] 331 | m_Father: {fileID: 0} 332 | m_RootOrder: 6 333 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 334 | --- !u!1 &400366188 335 | GameObject: 336 | m_ObjectHideFlags: 0 337 | m_CorrespondingSourceObject: {fileID: 0} 338 | m_PrefabInstance: {fileID: 0} 339 | m_PrefabAsset: {fileID: 0} 340 | serializedVersion: 6 341 | m_Component: 342 | - component: {fileID: 400366190} 343 | - component: {fileID: 400366189} 344 | m_Layer: 0 345 | m_Name: Rope2 346 | m_TagString: Untagged 347 | m_Icon: {fileID: 0} 348 | m_NavMeshLayer: 0 349 | m_StaticEditorFlags: 0 350 | m_IsActive: 1 351 | --- !u!212 &400366189 352 | SpriteRenderer: 353 | m_ObjectHideFlags: 0 354 | m_CorrespondingSourceObject: {fileID: 0} 355 | m_PrefabInstance: {fileID: 0} 356 | m_PrefabAsset: {fileID: 0} 357 | m_GameObject: {fileID: 400366188} 358 | m_Enabled: 1 359 | m_CastShadows: 0 360 | m_ReceiveShadows: 0 361 | m_DynamicOccludee: 1 362 | m_MotionVectors: 1 363 | m_LightProbeUsage: 1 364 | m_ReflectionProbeUsage: 1 365 | m_RayTracingMode: 0 366 | m_RayTraceProcedural: 0 367 | m_RenderingLayerMask: 1 368 | m_RendererPriority: 0 369 | m_Materials: 370 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 371 | m_StaticBatchInfo: 372 | firstSubMesh: 0 373 | subMeshCount: 0 374 | m_StaticBatchRoot: {fileID: 0} 375 | m_ProbeAnchor: {fileID: 0} 376 | m_LightProbeVolumeOverride: {fileID: 0} 377 | m_ScaleInLightmap: 1 378 | m_ReceiveGI: 1 379 | m_PreserveUVs: 0 380 | m_IgnoreNormalsForChartDetection: 0 381 | m_ImportantGI: 0 382 | m_StitchLightmapSeams: 1 383 | m_SelectedEditorRenderState: 0 384 | m_MinimumChartSize: 4 385 | m_AutoUVMaxDistance: 0.5 386 | m_AutoUVMaxAngle: 89 387 | m_LightmapParameters: {fileID: 0} 388 | m_SortingLayerID: 0 389 | m_SortingLayer: 0 390 | m_SortingOrder: 0 391 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 392 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 393 | m_FlipX: 0 394 | m_FlipY: 0 395 | m_DrawMode: 0 396 | m_Size: {x: 1, y: 1} 397 | m_AdaptiveModeThreshold: 0.5 398 | m_SpriteTileMode: 0 399 | m_WasSpriteAssigned: 1 400 | m_MaskInteraction: 0 401 | m_SpriteSortPoint: 0 402 | --- !u!4 &400366190 403 | Transform: 404 | m_ObjectHideFlags: 0 405 | m_CorrespondingSourceObject: {fileID: 0} 406 | m_PrefabInstance: {fileID: 0} 407 | m_PrefabAsset: {fileID: 0} 408 | m_GameObject: {fileID: 400366188} 409 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 410 | m_LocalPosition: {x: 0, y: 0, z: 0} 411 | m_LocalScale: {x: 1, y: 1, z: 1} 412 | m_Children: [] 413 | m_Father: {fileID: 0} 414 | m_RootOrder: 11 415 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 416 | --- !u!1 &474377597 417 | GameObject: 418 | m_ObjectHideFlags: 0 419 | m_CorrespondingSourceObject: {fileID: 0} 420 | m_PrefabInstance: {fileID: 0} 421 | m_PrefabAsset: {fileID: 0} 422 | serializedVersion: 6 423 | m_Component: 424 | - component: {fileID: 474377599} 425 | - component: {fileID: 474377598} 426 | m_Layer: 0 427 | m_Name: Rope1 428 | m_TagString: Untagged 429 | m_Icon: {fileID: 0} 430 | m_NavMeshLayer: 0 431 | m_StaticEditorFlags: 0 432 | m_IsActive: 1 433 | --- !u!212 &474377598 434 | SpriteRenderer: 435 | m_ObjectHideFlags: 0 436 | m_CorrespondingSourceObject: {fileID: 0} 437 | m_PrefabInstance: {fileID: 0} 438 | m_PrefabAsset: {fileID: 0} 439 | m_GameObject: {fileID: 474377597} 440 | m_Enabled: 1 441 | m_CastShadows: 0 442 | m_ReceiveShadows: 0 443 | m_DynamicOccludee: 1 444 | m_MotionVectors: 1 445 | m_LightProbeUsage: 1 446 | m_ReflectionProbeUsage: 1 447 | m_RayTracingMode: 0 448 | m_RayTraceProcedural: 0 449 | m_RenderingLayerMask: 1 450 | m_RendererPriority: 0 451 | m_Materials: 452 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 453 | m_StaticBatchInfo: 454 | firstSubMesh: 0 455 | subMeshCount: 0 456 | m_StaticBatchRoot: {fileID: 0} 457 | m_ProbeAnchor: {fileID: 0} 458 | m_LightProbeVolumeOverride: {fileID: 0} 459 | m_ScaleInLightmap: 1 460 | m_ReceiveGI: 1 461 | m_PreserveUVs: 0 462 | m_IgnoreNormalsForChartDetection: 0 463 | m_ImportantGI: 0 464 | m_StitchLightmapSeams: 1 465 | m_SelectedEditorRenderState: 0 466 | m_MinimumChartSize: 4 467 | m_AutoUVMaxDistance: 0.5 468 | m_AutoUVMaxAngle: 89 469 | m_LightmapParameters: {fileID: 0} 470 | m_SortingLayerID: 0 471 | m_SortingLayer: 0 472 | m_SortingOrder: 0 473 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 474 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 475 | m_FlipX: 0 476 | m_FlipY: 0 477 | m_DrawMode: 0 478 | m_Size: {x: 1, y: 1} 479 | m_AdaptiveModeThreshold: 0.5 480 | m_SpriteTileMode: 0 481 | m_WasSpriteAssigned: 1 482 | m_MaskInteraction: 0 483 | m_SpriteSortPoint: 0 484 | --- !u!4 &474377599 485 | Transform: 486 | m_ObjectHideFlags: 0 487 | m_CorrespondingSourceObject: {fileID: 0} 488 | m_PrefabInstance: {fileID: 0} 489 | m_PrefabAsset: {fileID: 0} 490 | m_GameObject: {fileID: 474377597} 491 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 492 | m_LocalPosition: {x: 0, y: 0, z: 0} 493 | m_LocalScale: {x: 1, y: 1, z: 1} 494 | m_Children: [] 495 | m_Father: {fileID: 0} 496 | m_RootOrder: 10 497 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 498 | --- !u!1 &526317329 499 | GameObject: 500 | m_ObjectHideFlags: 0 501 | m_CorrespondingSourceObject: {fileID: 0} 502 | m_PrefabInstance: {fileID: 0} 503 | m_PrefabAsset: {fileID: 0} 504 | serializedVersion: 6 505 | m_Component: 506 | - component: {fileID: 526317330} 507 | m_Layer: 0 508 | m_Name: "------\u7EF3\u5B50------" 509 | m_TagString: Untagged 510 | m_Icon: {fileID: 0} 511 | m_NavMeshLayer: 0 512 | m_StaticEditorFlags: 0 513 | m_IsActive: 1 514 | --- !u!4 &526317330 515 | Transform: 516 | m_ObjectHideFlags: 0 517 | m_CorrespondingSourceObject: {fileID: 0} 518 | m_PrefabInstance: {fileID: 0} 519 | m_PrefabAsset: {fileID: 0} 520 | m_GameObject: {fileID: 526317329} 521 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 522 | m_LocalPosition: {x: 0, y: 0, z: 0} 523 | m_LocalScale: {x: 1, y: 1, z: 1} 524 | m_Children: [] 525 | m_Father: {fileID: 0} 526 | m_RootOrder: 7 527 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 528 | --- !u!1 &957020628 529 | GameObject: 530 | m_ObjectHideFlags: 0 531 | m_CorrespondingSourceObject: {fileID: 0} 532 | m_PrefabInstance: {fileID: 0} 533 | m_PrefabAsset: {fileID: 0} 534 | serializedVersion: 6 535 | m_Component: 536 | - component: {fileID: 957020630} 537 | - component: {fileID: 957020629} 538 | m_Layer: 0 539 | m_Name: Rope0 540 | m_TagString: Untagged 541 | m_Icon: {fileID: 0} 542 | m_NavMeshLayer: 0 543 | m_StaticEditorFlags: 0 544 | m_IsActive: 0 545 | --- !u!212 &957020629 546 | SpriteRenderer: 547 | m_ObjectHideFlags: 0 548 | m_CorrespondingSourceObject: {fileID: 0} 549 | m_PrefabInstance: {fileID: 0} 550 | m_PrefabAsset: {fileID: 0} 551 | m_GameObject: {fileID: 957020628} 552 | m_Enabled: 1 553 | m_CastShadows: 0 554 | m_ReceiveShadows: 0 555 | m_DynamicOccludee: 1 556 | m_MotionVectors: 1 557 | m_LightProbeUsage: 1 558 | m_ReflectionProbeUsage: 1 559 | m_RayTracingMode: 0 560 | m_RayTraceProcedural: 0 561 | m_RenderingLayerMask: 1 562 | m_RendererPriority: 0 563 | m_Materials: 564 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 565 | m_StaticBatchInfo: 566 | firstSubMesh: 0 567 | subMeshCount: 0 568 | m_StaticBatchRoot: {fileID: 0} 569 | m_ProbeAnchor: {fileID: 0} 570 | m_LightProbeVolumeOverride: {fileID: 0} 571 | m_ScaleInLightmap: 1 572 | m_ReceiveGI: 1 573 | m_PreserveUVs: 0 574 | m_IgnoreNormalsForChartDetection: 0 575 | m_ImportantGI: 0 576 | m_StitchLightmapSeams: 1 577 | m_SelectedEditorRenderState: 0 578 | m_MinimumChartSize: 4 579 | m_AutoUVMaxDistance: 0.5 580 | m_AutoUVMaxAngle: 89 581 | m_LightmapParameters: {fileID: 0} 582 | m_SortingLayerID: 0 583 | m_SortingLayer: 0 584 | m_SortingOrder: 0 585 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 586 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 587 | m_FlipX: 0 588 | m_FlipY: 0 589 | m_DrawMode: 0 590 | m_Size: {x: 1, y: 1} 591 | m_AdaptiveModeThreshold: 0.5 592 | m_SpriteTileMode: 0 593 | m_WasSpriteAssigned: 1 594 | m_MaskInteraction: 0 595 | m_SpriteSortPoint: 0 596 | --- !u!4 &957020630 597 | Transform: 598 | m_ObjectHideFlags: 0 599 | m_CorrespondingSourceObject: {fileID: 0} 600 | m_PrefabInstance: {fileID: 0} 601 | m_PrefabAsset: {fileID: 0} 602 | m_GameObject: {fileID: 957020628} 603 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 604 | m_LocalPosition: {x: 0, y: 0, z: 0} 605 | m_LocalScale: {x: 1, y: 1, z: 1} 606 | m_Children: [] 607 | m_Father: {fileID: 0} 608 | m_RootOrder: 5 609 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 610 | --- !u!1 &1083700680 611 | GameObject: 612 | m_ObjectHideFlags: 0 613 | m_CorrespondingSourceObject: {fileID: 0} 614 | m_PrefabInstance: {fileID: 0} 615 | m_PrefabAsset: {fileID: 0} 616 | serializedVersion: 6 617 | m_Component: 618 | - component: {fileID: 1083700683} 619 | - component: {fileID: 1083700682} 620 | - component: {fileID: 1083700681} 621 | m_Layer: 0 622 | m_Name: Main Camera 623 | m_TagString: MainCamera 624 | m_Icon: {fileID: 0} 625 | m_NavMeshLayer: 0 626 | m_StaticEditorFlags: 0 627 | m_IsActive: 1 628 | --- !u!81 &1083700681 629 | AudioListener: 630 | m_ObjectHideFlags: 0 631 | m_CorrespondingSourceObject: {fileID: 0} 632 | m_PrefabInstance: {fileID: 0} 633 | m_PrefabAsset: {fileID: 0} 634 | m_GameObject: {fileID: 1083700680} 635 | m_Enabled: 1 636 | --- !u!20 &1083700682 637 | Camera: 638 | m_ObjectHideFlags: 0 639 | m_CorrespondingSourceObject: {fileID: 0} 640 | m_PrefabInstance: {fileID: 0} 641 | m_PrefabAsset: {fileID: 0} 642 | m_GameObject: {fileID: 1083700680} 643 | m_Enabled: 1 644 | serializedVersion: 2 645 | m_ClearFlags: 1 646 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 647 | m_projectionMatrixMode: 1 648 | m_GateFitMode: 2 649 | m_FOVAxisMode: 0 650 | m_SensorSize: {x: 36, y: 24} 651 | m_LensShift: {x: 0, y: 0} 652 | m_FocalLength: 50 653 | m_NormalizedViewPortRect: 654 | serializedVersion: 2 655 | x: 0 656 | y: 0 657 | width: 1 658 | height: 1 659 | near clip plane: 0.3 660 | far clip plane: 1000 661 | field of view: 60 662 | orthographic: 1 663 | orthographic size: 6 664 | m_Depth: -1 665 | m_CullingMask: 666 | serializedVersion: 2 667 | m_Bits: 4294967295 668 | m_RenderingPath: -1 669 | m_TargetTexture: {fileID: 0} 670 | m_TargetDisplay: 0 671 | m_TargetEye: 3 672 | m_HDR: 1 673 | m_AllowMSAA: 1 674 | m_AllowDynamicResolution: 0 675 | m_ForceIntoRT: 0 676 | m_OcclusionCulling: 1 677 | m_StereoConvergence: 10 678 | m_StereoSeparation: 0.022 679 | --- !u!4 &1083700683 680 | Transform: 681 | m_ObjectHideFlags: 0 682 | m_CorrespondingSourceObject: {fileID: 0} 683 | m_PrefabInstance: {fileID: 0} 684 | m_PrefabAsset: {fileID: 0} 685 | m_GameObject: {fileID: 1083700680} 686 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 687 | m_LocalPosition: {x: 0, y: 0, z: -10} 688 | m_LocalScale: {x: 1, y: 1, z: 1} 689 | m_Children: [] 690 | m_Father: {fileID: 0} 691 | m_RootOrder: 0 692 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 693 | --- !u!1 &1103521980 694 | GameObject: 695 | m_ObjectHideFlags: 0 696 | m_CorrespondingSourceObject: {fileID: 0} 697 | m_PrefabInstance: {fileID: 0} 698 | m_PrefabAsset: {fileID: 0} 699 | serializedVersion: 6 700 | m_Component: 701 | - component: {fileID: 1103521982} 702 | - component: {fileID: 1103521981} 703 | m_Layer: 0 704 | m_Name: Rope4 705 | m_TagString: Untagged 706 | m_Icon: {fileID: 0} 707 | m_NavMeshLayer: 0 708 | m_StaticEditorFlags: 0 709 | m_IsActive: 1 710 | --- !u!212 &1103521981 711 | SpriteRenderer: 712 | m_ObjectHideFlags: 0 713 | m_CorrespondingSourceObject: {fileID: 0} 714 | m_PrefabInstance: {fileID: 0} 715 | m_PrefabAsset: {fileID: 0} 716 | m_GameObject: {fileID: 1103521980} 717 | m_Enabled: 1 718 | m_CastShadows: 0 719 | m_ReceiveShadows: 0 720 | m_DynamicOccludee: 1 721 | m_MotionVectors: 1 722 | m_LightProbeUsage: 1 723 | m_ReflectionProbeUsage: 1 724 | m_RayTracingMode: 0 725 | m_RayTraceProcedural: 0 726 | m_RenderingLayerMask: 1 727 | m_RendererPriority: 0 728 | m_Materials: 729 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 730 | m_StaticBatchInfo: 731 | firstSubMesh: 0 732 | subMeshCount: 0 733 | m_StaticBatchRoot: {fileID: 0} 734 | m_ProbeAnchor: {fileID: 0} 735 | m_LightProbeVolumeOverride: {fileID: 0} 736 | m_ScaleInLightmap: 1 737 | m_ReceiveGI: 1 738 | m_PreserveUVs: 0 739 | m_IgnoreNormalsForChartDetection: 0 740 | m_ImportantGI: 0 741 | m_StitchLightmapSeams: 1 742 | m_SelectedEditorRenderState: 0 743 | m_MinimumChartSize: 4 744 | m_AutoUVMaxDistance: 0.5 745 | m_AutoUVMaxAngle: 89 746 | m_LightmapParameters: {fileID: 0} 747 | m_SortingLayerID: 0 748 | m_SortingLayer: 0 749 | m_SortingOrder: 0 750 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 751 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 752 | m_FlipX: 0 753 | m_FlipY: 0 754 | m_DrawMode: 0 755 | m_Size: {x: 1, y: 1} 756 | m_AdaptiveModeThreshold: 0.5 757 | m_SpriteTileMode: 0 758 | m_WasSpriteAssigned: 1 759 | m_MaskInteraction: 0 760 | m_SpriteSortPoint: 0 761 | --- !u!4 &1103521982 762 | Transform: 763 | m_ObjectHideFlags: 0 764 | m_CorrespondingSourceObject: {fileID: 0} 765 | m_PrefabInstance: {fileID: 0} 766 | m_PrefabAsset: {fileID: 0} 767 | m_GameObject: {fileID: 1103521980} 768 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 769 | m_LocalPosition: {x: 0, y: 0, z: 0} 770 | m_LocalScale: {x: 1, y: 1, z: 1} 771 | m_Children: [] 772 | m_Father: {fileID: 0} 773 | m_RootOrder: 13 774 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 775 | --- !u!1 &1223261946 776 | GameObject: 777 | m_ObjectHideFlags: 0 778 | m_CorrespondingSourceObject: {fileID: 0} 779 | m_PrefabInstance: {fileID: 0} 780 | m_PrefabAsset: {fileID: 0} 781 | serializedVersion: 6 782 | m_Component: 783 | - component: {fileID: 1223261948} 784 | - component: {fileID: 1223261947} 785 | m_Layer: 0 786 | m_Name: RopeRoot 787 | m_TagString: Untagged 788 | m_Icon: {fileID: 0} 789 | m_NavMeshLayer: 0 790 | m_StaticEditorFlags: 0 791 | m_IsActive: 1 792 | --- !u!114 &1223261947 793 | MonoBehaviour: 794 | m_ObjectHideFlags: 0 795 | m_CorrespondingSourceObject: {fileID: 0} 796 | m_PrefabInstance: {fileID: 0} 797 | m_PrefabAsset: {fileID: 0} 798 | m_GameObject: {fileID: 1223261946} 799 | m_Enabled: 1 800 | m_EditorHideFlags: 0 801 | m_Script: {fileID: 11500000, guid: 99f232300551d3d4b83048e960c0e553, type: 3} 802 | m_Name: 803 | m_EditorClassIdentifier: 804 | ropeTransforms: 805 | - {fileID: 1727115213} 806 | - {fileID: 474377599} 807 | - {fileID: 400366190} 808 | - {fileID: 1233495307} 809 | - {fileID: 1103521982} 810 | - {fileID: 2069789397} 811 | - {fileID: 1488985889} 812 | - {fileID: 1909847595} 813 | - {fileID: 1368374306} 814 | - {fileID: 1937417104} 815 | ropeLength: 0.9 816 | --- !u!4 &1223261948 817 | Transform: 818 | m_ObjectHideFlags: 0 819 | m_CorrespondingSourceObject: {fileID: 0} 820 | m_PrefabInstance: {fileID: 0} 821 | m_PrefabAsset: {fileID: 0} 822 | m_GameObject: {fileID: 1223261946} 823 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 824 | m_LocalPosition: {x: 0, y: 0, z: 0} 825 | m_LocalScale: {x: 1, y: 1, z: 1} 826 | m_Children: [] 827 | m_Father: {fileID: 0} 828 | m_RootOrder: 8 829 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 830 | --- !u!1 &1233495305 831 | GameObject: 832 | m_ObjectHideFlags: 0 833 | m_CorrespondingSourceObject: {fileID: 0} 834 | m_PrefabInstance: {fileID: 0} 835 | m_PrefabAsset: {fileID: 0} 836 | serializedVersion: 6 837 | m_Component: 838 | - component: {fileID: 1233495307} 839 | - component: {fileID: 1233495306} 840 | m_Layer: 0 841 | m_Name: Rope3 842 | m_TagString: Untagged 843 | m_Icon: {fileID: 0} 844 | m_NavMeshLayer: 0 845 | m_StaticEditorFlags: 0 846 | m_IsActive: 1 847 | --- !u!212 &1233495306 848 | SpriteRenderer: 849 | m_ObjectHideFlags: 0 850 | m_CorrespondingSourceObject: {fileID: 0} 851 | m_PrefabInstance: {fileID: 0} 852 | m_PrefabAsset: {fileID: 0} 853 | m_GameObject: {fileID: 1233495305} 854 | m_Enabled: 1 855 | m_CastShadows: 0 856 | m_ReceiveShadows: 0 857 | m_DynamicOccludee: 1 858 | m_MotionVectors: 1 859 | m_LightProbeUsage: 1 860 | m_ReflectionProbeUsage: 1 861 | m_RayTracingMode: 0 862 | m_RayTraceProcedural: 0 863 | m_RenderingLayerMask: 1 864 | m_RendererPriority: 0 865 | m_Materials: 866 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 867 | m_StaticBatchInfo: 868 | firstSubMesh: 0 869 | subMeshCount: 0 870 | m_StaticBatchRoot: {fileID: 0} 871 | m_ProbeAnchor: {fileID: 0} 872 | m_LightProbeVolumeOverride: {fileID: 0} 873 | m_ScaleInLightmap: 1 874 | m_ReceiveGI: 1 875 | m_PreserveUVs: 0 876 | m_IgnoreNormalsForChartDetection: 0 877 | m_ImportantGI: 0 878 | m_StitchLightmapSeams: 1 879 | m_SelectedEditorRenderState: 0 880 | m_MinimumChartSize: 4 881 | m_AutoUVMaxDistance: 0.5 882 | m_AutoUVMaxAngle: 89 883 | m_LightmapParameters: {fileID: 0} 884 | m_SortingLayerID: 0 885 | m_SortingLayer: 0 886 | m_SortingOrder: 0 887 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 888 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 889 | m_FlipX: 0 890 | m_FlipY: 0 891 | m_DrawMode: 0 892 | m_Size: {x: 1, y: 1} 893 | m_AdaptiveModeThreshold: 0.5 894 | m_SpriteTileMode: 0 895 | m_WasSpriteAssigned: 1 896 | m_MaskInteraction: 0 897 | m_SpriteSortPoint: 0 898 | --- !u!4 &1233495307 899 | Transform: 900 | m_ObjectHideFlags: 0 901 | m_CorrespondingSourceObject: {fileID: 0} 902 | m_PrefabInstance: {fileID: 0} 903 | m_PrefabAsset: {fileID: 0} 904 | m_GameObject: {fileID: 1233495305} 905 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 906 | m_LocalPosition: {x: 0, y: 0, z: 0} 907 | m_LocalScale: {x: 1, y: 1, z: 1} 908 | m_Children: [] 909 | m_Father: {fileID: 0} 910 | m_RootOrder: 12 911 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 912 | --- !u!1 &1368374304 913 | GameObject: 914 | m_ObjectHideFlags: 0 915 | m_CorrespondingSourceObject: {fileID: 0} 916 | m_PrefabInstance: {fileID: 0} 917 | m_PrefabAsset: {fileID: 0} 918 | serializedVersion: 6 919 | m_Component: 920 | - component: {fileID: 1368374306} 921 | - component: {fileID: 1368374305} 922 | m_Layer: 0 923 | m_Name: Rope8 924 | m_TagString: Untagged 925 | m_Icon: {fileID: 0} 926 | m_NavMeshLayer: 0 927 | m_StaticEditorFlags: 0 928 | m_IsActive: 1 929 | --- !u!212 &1368374305 930 | SpriteRenderer: 931 | m_ObjectHideFlags: 0 932 | m_CorrespondingSourceObject: {fileID: 0} 933 | m_PrefabInstance: {fileID: 0} 934 | m_PrefabAsset: {fileID: 0} 935 | m_GameObject: {fileID: 1368374304} 936 | m_Enabled: 1 937 | m_CastShadows: 0 938 | m_ReceiveShadows: 0 939 | m_DynamicOccludee: 1 940 | m_MotionVectors: 1 941 | m_LightProbeUsage: 1 942 | m_ReflectionProbeUsage: 1 943 | m_RayTracingMode: 0 944 | m_RayTraceProcedural: 0 945 | m_RenderingLayerMask: 1 946 | m_RendererPriority: 0 947 | m_Materials: 948 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 949 | m_StaticBatchInfo: 950 | firstSubMesh: 0 951 | subMeshCount: 0 952 | m_StaticBatchRoot: {fileID: 0} 953 | m_ProbeAnchor: {fileID: 0} 954 | m_LightProbeVolumeOverride: {fileID: 0} 955 | m_ScaleInLightmap: 1 956 | m_ReceiveGI: 1 957 | m_PreserveUVs: 0 958 | m_IgnoreNormalsForChartDetection: 0 959 | m_ImportantGI: 0 960 | m_StitchLightmapSeams: 1 961 | m_SelectedEditorRenderState: 0 962 | m_MinimumChartSize: 4 963 | m_AutoUVMaxDistance: 0.5 964 | m_AutoUVMaxAngle: 89 965 | m_LightmapParameters: {fileID: 0} 966 | m_SortingLayerID: 0 967 | m_SortingLayer: 0 968 | m_SortingOrder: 0 969 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 970 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 971 | m_FlipX: 0 972 | m_FlipY: 0 973 | m_DrawMode: 0 974 | m_Size: {x: 1, y: 1} 975 | m_AdaptiveModeThreshold: 0.5 976 | m_SpriteTileMode: 0 977 | m_WasSpriteAssigned: 1 978 | m_MaskInteraction: 0 979 | m_SpriteSortPoint: 0 980 | --- !u!4 &1368374306 981 | Transform: 982 | m_ObjectHideFlags: 0 983 | m_CorrespondingSourceObject: {fileID: 0} 984 | m_PrefabInstance: {fileID: 0} 985 | m_PrefabAsset: {fileID: 0} 986 | m_GameObject: {fileID: 1368374304} 987 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 988 | m_LocalPosition: {x: 0, y: 0, z: 0} 989 | m_LocalScale: {x: 1, y: 1, z: 1} 990 | m_Children: [] 991 | m_Father: {fileID: 0} 992 | m_RootOrder: 17 993 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 994 | --- !u!1 &1468892070 995 | GameObject: 996 | m_ObjectHideFlags: 0 997 | m_CorrespondingSourceObject: {fileID: 0} 998 | m_PrefabInstance: {fileID: 0} 999 | m_PrefabAsset: {fileID: 0} 1000 | serializedVersion: 6 1001 | m_Component: 1002 | - component: {fileID: 1468892072} 1003 | - component: {fileID: 1468892071} 1004 | m_Layer: 0 1005 | m_Name: RopeRoot 1006 | m_TagString: Untagged 1007 | m_Icon: {fileID: 0} 1008 | m_NavMeshLayer: 0 1009 | m_StaticEditorFlags: 0 1010 | m_IsActive: 0 1011 | --- !u!114 &1468892071 1012 | MonoBehaviour: 1013 | m_ObjectHideFlags: 0 1014 | m_CorrespondingSourceObject: {fileID: 0} 1015 | m_PrefabInstance: {fileID: 0} 1016 | m_PrefabAsset: {fileID: 0} 1017 | m_GameObject: {fileID: 1468892070} 1018 | m_Enabled: 1 1019 | m_EditorHideFlags: 0 1020 | m_Script: {fileID: 11500000, guid: c139e1ff3997a7644ac4c8255953a46a, type: 3} 1021 | m_Name: 1022 | m_EditorClassIdentifier: 1023 | ropeTransforms: 1024 | - {fileID: 957020630} 1025 | - {fileID: 298106282} 1026 | ropeLength: 1 1027 | --- !u!4 &1468892072 1028 | Transform: 1029 | m_ObjectHideFlags: 0 1030 | m_CorrespondingSourceObject: {fileID: 0} 1031 | m_PrefabInstance: {fileID: 0} 1032 | m_PrefabAsset: {fileID: 0} 1033 | m_GameObject: {fileID: 1468892070} 1034 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1035 | m_LocalPosition: {x: 0, y: 0, z: 0} 1036 | m_LocalScale: {x: 1, y: 1, z: 1} 1037 | m_Children: [] 1038 | m_Father: {fileID: 0} 1039 | m_RootOrder: 4 1040 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1041 | --- !u!1 &1488985887 1042 | GameObject: 1043 | m_ObjectHideFlags: 0 1044 | m_CorrespondingSourceObject: {fileID: 0} 1045 | m_PrefabInstance: {fileID: 0} 1046 | m_PrefabAsset: {fileID: 0} 1047 | serializedVersion: 6 1048 | m_Component: 1049 | - component: {fileID: 1488985889} 1050 | - component: {fileID: 1488985888} 1051 | m_Layer: 0 1052 | m_Name: Rope6 1053 | m_TagString: Untagged 1054 | m_Icon: {fileID: 0} 1055 | m_NavMeshLayer: 0 1056 | m_StaticEditorFlags: 0 1057 | m_IsActive: 1 1058 | --- !u!212 &1488985888 1059 | SpriteRenderer: 1060 | m_ObjectHideFlags: 0 1061 | m_CorrespondingSourceObject: {fileID: 0} 1062 | m_PrefabInstance: {fileID: 0} 1063 | m_PrefabAsset: {fileID: 0} 1064 | m_GameObject: {fileID: 1488985887} 1065 | m_Enabled: 1 1066 | m_CastShadows: 0 1067 | m_ReceiveShadows: 0 1068 | m_DynamicOccludee: 1 1069 | m_MotionVectors: 1 1070 | m_LightProbeUsage: 1 1071 | m_ReflectionProbeUsage: 1 1072 | m_RayTracingMode: 0 1073 | m_RayTraceProcedural: 0 1074 | m_RenderingLayerMask: 1 1075 | m_RendererPriority: 0 1076 | m_Materials: 1077 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 1078 | m_StaticBatchInfo: 1079 | firstSubMesh: 0 1080 | subMeshCount: 0 1081 | m_StaticBatchRoot: {fileID: 0} 1082 | m_ProbeAnchor: {fileID: 0} 1083 | m_LightProbeVolumeOverride: {fileID: 0} 1084 | m_ScaleInLightmap: 1 1085 | m_ReceiveGI: 1 1086 | m_PreserveUVs: 0 1087 | m_IgnoreNormalsForChartDetection: 0 1088 | m_ImportantGI: 0 1089 | m_StitchLightmapSeams: 1 1090 | m_SelectedEditorRenderState: 0 1091 | m_MinimumChartSize: 4 1092 | m_AutoUVMaxDistance: 0.5 1093 | m_AutoUVMaxAngle: 89 1094 | m_LightmapParameters: {fileID: 0} 1095 | m_SortingLayerID: 0 1096 | m_SortingLayer: 0 1097 | m_SortingOrder: 0 1098 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 1099 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 1100 | m_FlipX: 0 1101 | m_FlipY: 0 1102 | m_DrawMode: 0 1103 | m_Size: {x: 1, y: 1} 1104 | m_AdaptiveModeThreshold: 0.5 1105 | m_SpriteTileMode: 0 1106 | m_WasSpriteAssigned: 1 1107 | m_MaskInteraction: 0 1108 | m_SpriteSortPoint: 0 1109 | --- !u!4 &1488985889 1110 | Transform: 1111 | m_ObjectHideFlags: 0 1112 | m_CorrespondingSourceObject: {fileID: 0} 1113 | m_PrefabInstance: {fileID: 0} 1114 | m_PrefabAsset: {fileID: 0} 1115 | m_GameObject: {fileID: 1488985887} 1116 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1117 | m_LocalPosition: {x: 0, y: 0, z: 0} 1118 | m_LocalScale: {x: 1, y: 1, z: 1} 1119 | m_Children: [] 1120 | m_Father: {fileID: 0} 1121 | m_RootOrder: 15 1122 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1123 | --- !u!1 &1727115211 1124 | GameObject: 1125 | m_ObjectHideFlags: 0 1126 | m_CorrespondingSourceObject: {fileID: 0} 1127 | m_PrefabInstance: {fileID: 0} 1128 | m_PrefabAsset: {fileID: 0} 1129 | serializedVersion: 6 1130 | m_Component: 1131 | - component: {fileID: 1727115213} 1132 | - component: {fileID: 1727115212} 1133 | m_Layer: 0 1134 | m_Name: Rope0 1135 | m_TagString: Untagged 1136 | m_Icon: {fileID: 0} 1137 | m_NavMeshLayer: 0 1138 | m_StaticEditorFlags: 0 1139 | m_IsActive: 1 1140 | --- !u!212 &1727115212 1141 | SpriteRenderer: 1142 | m_ObjectHideFlags: 0 1143 | m_CorrespondingSourceObject: {fileID: 0} 1144 | m_PrefabInstance: {fileID: 0} 1145 | m_PrefabAsset: {fileID: 0} 1146 | m_GameObject: {fileID: 1727115211} 1147 | m_Enabled: 1 1148 | m_CastShadows: 0 1149 | m_ReceiveShadows: 0 1150 | m_DynamicOccludee: 1 1151 | m_MotionVectors: 1 1152 | m_LightProbeUsage: 1 1153 | m_ReflectionProbeUsage: 1 1154 | m_RayTracingMode: 0 1155 | m_RayTraceProcedural: 0 1156 | m_RenderingLayerMask: 1 1157 | m_RendererPriority: 0 1158 | m_Materials: 1159 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 1160 | m_StaticBatchInfo: 1161 | firstSubMesh: 0 1162 | subMeshCount: 0 1163 | m_StaticBatchRoot: {fileID: 0} 1164 | m_ProbeAnchor: {fileID: 0} 1165 | m_LightProbeVolumeOverride: {fileID: 0} 1166 | m_ScaleInLightmap: 1 1167 | m_ReceiveGI: 1 1168 | m_PreserveUVs: 0 1169 | m_IgnoreNormalsForChartDetection: 0 1170 | m_ImportantGI: 0 1171 | m_StitchLightmapSeams: 1 1172 | m_SelectedEditorRenderState: 0 1173 | m_MinimumChartSize: 4 1174 | m_AutoUVMaxDistance: 0.5 1175 | m_AutoUVMaxAngle: 89 1176 | m_LightmapParameters: {fileID: 0} 1177 | m_SortingLayerID: 0 1178 | m_SortingLayer: 0 1179 | m_SortingOrder: 0 1180 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 1181 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 1182 | m_FlipX: 0 1183 | m_FlipY: 0 1184 | m_DrawMode: 0 1185 | m_Size: {x: 1, y: 1} 1186 | m_AdaptiveModeThreshold: 0.5 1187 | m_SpriteTileMode: 0 1188 | m_WasSpriteAssigned: 1 1189 | m_MaskInteraction: 0 1190 | m_SpriteSortPoint: 0 1191 | --- !u!4 &1727115213 1192 | Transform: 1193 | m_ObjectHideFlags: 0 1194 | m_CorrespondingSourceObject: {fileID: 0} 1195 | m_PrefabInstance: {fileID: 0} 1196 | m_PrefabAsset: {fileID: 0} 1197 | m_GameObject: {fileID: 1727115211} 1198 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1199 | m_LocalPosition: {x: 0, y: 0, z: 0} 1200 | m_LocalScale: {x: 1, y: 1, z: 1} 1201 | m_Children: [] 1202 | m_Father: {fileID: 0} 1203 | m_RootOrder: 9 1204 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1205 | --- !u!1 &1768284594 1206 | GameObject: 1207 | m_ObjectHideFlags: 0 1208 | m_CorrespondingSourceObject: {fileID: 0} 1209 | m_PrefabInstance: {fileID: 0} 1210 | m_PrefabAsset: {fileID: 0} 1211 | serializedVersion: 6 1212 | m_Component: 1213 | - component: {fileID: 1768284595} 1214 | m_Layer: 0 1215 | m_Name: "------\u4E00\u6761\u7EBF------" 1216 | m_TagString: Untagged 1217 | m_Icon: {fileID: 0} 1218 | m_NavMeshLayer: 0 1219 | m_StaticEditorFlags: 0 1220 | m_IsActive: 1 1221 | --- !u!4 &1768284595 1222 | Transform: 1223 | m_ObjectHideFlags: 0 1224 | m_CorrespondingSourceObject: {fileID: 0} 1225 | m_PrefabInstance: {fileID: 0} 1226 | m_PrefabAsset: {fileID: 0} 1227 | m_GameObject: {fileID: 1768284594} 1228 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1229 | m_LocalPosition: {x: 0, y: 0, z: 0} 1230 | m_LocalScale: {x: 1, y: 1, z: 1} 1231 | m_Children: [] 1232 | m_Father: {fileID: 0} 1233 | m_RootOrder: 1 1234 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1235 | --- !u!1 &1909847593 1236 | GameObject: 1237 | m_ObjectHideFlags: 0 1238 | m_CorrespondingSourceObject: {fileID: 0} 1239 | m_PrefabInstance: {fileID: 0} 1240 | m_PrefabAsset: {fileID: 0} 1241 | serializedVersion: 6 1242 | m_Component: 1243 | - component: {fileID: 1909847595} 1244 | - component: {fileID: 1909847594} 1245 | m_Layer: 0 1246 | m_Name: Rope7 1247 | m_TagString: Untagged 1248 | m_Icon: {fileID: 0} 1249 | m_NavMeshLayer: 0 1250 | m_StaticEditorFlags: 0 1251 | m_IsActive: 1 1252 | --- !u!212 &1909847594 1253 | SpriteRenderer: 1254 | m_ObjectHideFlags: 0 1255 | m_CorrespondingSourceObject: {fileID: 0} 1256 | m_PrefabInstance: {fileID: 0} 1257 | m_PrefabAsset: {fileID: 0} 1258 | m_GameObject: {fileID: 1909847593} 1259 | m_Enabled: 1 1260 | m_CastShadows: 0 1261 | m_ReceiveShadows: 0 1262 | m_DynamicOccludee: 1 1263 | m_MotionVectors: 1 1264 | m_LightProbeUsage: 1 1265 | m_ReflectionProbeUsage: 1 1266 | m_RayTracingMode: 0 1267 | m_RayTraceProcedural: 0 1268 | m_RenderingLayerMask: 1 1269 | m_RendererPriority: 0 1270 | m_Materials: 1271 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 1272 | m_StaticBatchInfo: 1273 | firstSubMesh: 0 1274 | subMeshCount: 0 1275 | m_StaticBatchRoot: {fileID: 0} 1276 | m_ProbeAnchor: {fileID: 0} 1277 | m_LightProbeVolumeOverride: {fileID: 0} 1278 | m_ScaleInLightmap: 1 1279 | m_ReceiveGI: 1 1280 | m_PreserveUVs: 0 1281 | m_IgnoreNormalsForChartDetection: 0 1282 | m_ImportantGI: 0 1283 | m_StitchLightmapSeams: 1 1284 | m_SelectedEditorRenderState: 0 1285 | m_MinimumChartSize: 4 1286 | m_AutoUVMaxDistance: 0.5 1287 | m_AutoUVMaxAngle: 89 1288 | m_LightmapParameters: {fileID: 0} 1289 | m_SortingLayerID: 0 1290 | m_SortingLayer: 0 1291 | m_SortingOrder: 0 1292 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 1293 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 1294 | m_FlipX: 0 1295 | m_FlipY: 0 1296 | m_DrawMode: 0 1297 | m_Size: {x: 1, y: 1} 1298 | m_AdaptiveModeThreshold: 0.5 1299 | m_SpriteTileMode: 0 1300 | m_WasSpriteAssigned: 1 1301 | m_MaskInteraction: 0 1302 | m_SpriteSortPoint: 0 1303 | --- !u!4 &1909847595 1304 | Transform: 1305 | m_ObjectHideFlags: 0 1306 | m_CorrespondingSourceObject: {fileID: 0} 1307 | m_PrefabInstance: {fileID: 0} 1308 | m_PrefabAsset: {fileID: 0} 1309 | m_GameObject: {fileID: 1909847593} 1310 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1311 | m_LocalPosition: {x: 0, y: 0, z: 0} 1312 | m_LocalScale: {x: 1, y: 1, z: 1} 1313 | m_Children: [] 1314 | m_Father: {fileID: 0} 1315 | m_RootOrder: 16 1316 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1317 | --- !u!1 &1937417102 1318 | GameObject: 1319 | m_ObjectHideFlags: 0 1320 | m_CorrespondingSourceObject: {fileID: 0} 1321 | m_PrefabInstance: {fileID: 0} 1322 | m_PrefabAsset: {fileID: 0} 1323 | serializedVersion: 6 1324 | m_Component: 1325 | - component: {fileID: 1937417104} 1326 | - component: {fileID: 1937417103} 1327 | m_Layer: 0 1328 | m_Name: Rope9 1329 | m_TagString: Untagged 1330 | m_Icon: {fileID: 0} 1331 | m_NavMeshLayer: 0 1332 | m_StaticEditorFlags: 0 1333 | m_IsActive: 1 1334 | --- !u!212 &1937417103 1335 | SpriteRenderer: 1336 | m_ObjectHideFlags: 0 1337 | m_CorrespondingSourceObject: {fileID: 0} 1338 | m_PrefabInstance: {fileID: 0} 1339 | m_PrefabAsset: {fileID: 0} 1340 | m_GameObject: {fileID: 1937417102} 1341 | m_Enabled: 1 1342 | m_CastShadows: 0 1343 | m_ReceiveShadows: 0 1344 | m_DynamicOccludee: 1 1345 | m_MotionVectors: 1 1346 | m_LightProbeUsage: 1 1347 | m_ReflectionProbeUsage: 1 1348 | m_RayTracingMode: 0 1349 | m_RayTraceProcedural: 0 1350 | m_RenderingLayerMask: 1 1351 | m_RendererPriority: 0 1352 | m_Materials: 1353 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 1354 | m_StaticBatchInfo: 1355 | firstSubMesh: 0 1356 | subMeshCount: 0 1357 | m_StaticBatchRoot: {fileID: 0} 1358 | m_ProbeAnchor: {fileID: 0} 1359 | m_LightProbeVolumeOverride: {fileID: 0} 1360 | m_ScaleInLightmap: 1 1361 | m_ReceiveGI: 1 1362 | m_PreserveUVs: 0 1363 | m_IgnoreNormalsForChartDetection: 0 1364 | m_ImportantGI: 0 1365 | m_StitchLightmapSeams: 1 1366 | m_SelectedEditorRenderState: 0 1367 | m_MinimumChartSize: 4 1368 | m_AutoUVMaxDistance: 0.5 1369 | m_AutoUVMaxAngle: 89 1370 | m_LightmapParameters: {fileID: 0} 1371 | m_SortingLayerID: 0 1372 | m_SortingLayer: 0 1373 | m_SortingOrder: 0 1374 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 1375 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 1376 | m_FlipX: 0 1377 | m_FlipY: 0 1378 | m_DrawMode: 0 1379 | m_Size: {x: 1, y: 1} 1380 | m_AdaptiveModeThreshold: 0.5 1381 | m_SpriteTileMode: 0 1382 | m_WasSpriteAssigned: 1 1383 | m_MaskInteraction: 0 1384 | m_SpriteSortPoint: 0 1385 | --- !u!4 &1937417104 1386 | Transform: 1387 | m_ObjectHideFlags: 0 1388 | m_CorrespondingSourceObject: {fileID: 0} 1389 | m_PrefabInstance: {fileID: 0} 1390 | m_PrefabAsset: {fileID: 0} 1391 | m_GameObject: {fileID: 1937417102} 1392 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1393 | m_LocalPosition: {x: 0, y: 0, z: 0} 1394 | m_LocalScale: {x: 1, y: 1, z: 1} 1395 | m_Children: [] 1396 | m_Father: {fileID: 0} 1397 | m_RootOrder: 18 1398 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1399 | --- !u!1 &2069789395 1400 | GameObject: 1401 | m_ObjectHideFlags: 0 1402 | m_CorrespondingSourceObject: {fileID: 0} 1403 | m_PrefabInstance: {fileID: 0} 1404 | m_PrefabAsset: {fileID: 0} 1405 | serializedVersion: 6 1406 | m_Component: 1407 | - component: {fileID: 2069789397} 1408 | - component: {fileID: 2069789396} 1409 | m_Layer: 0 1410 | m_Name: Rope5 1411 | m_TagString: Untagged 1412 | m_Icon: {fileID: 0} 1413 | m_NavMeshLayer: 0 1414 | m_StaticEditorFlags: 0 1415 | m_IsActive: 1 1416 | --- !u!212 &2069789396 1417 | SpriteRenderer: 1418 | m_ObjectHideFlags: 0 1419 | m_CorrespondingSourceObject: {fileID: 0} 1420 | m_PrefabInstance: {fileID: 0} 1421 | m_PrefabAsset: {fileID: 0} 1422 | m_GameObject: {fileID: 2069789395} 1423 | m_Enabled: 1 1424 | m_CastShadows: 0 1425 | m_ReceiveShadows: 0 1426 | m_DynamicOccludee: 1 1427 | m_MotionVectors: 1 1428 | m_LightProbeUsage: 1 1429 | m_ReflectionProbeUsage: 1 1430 | m_RayTracingMode: 0 1431 | m_RayTraceProcedural: 0 1432 | m_RenderingLayerMask: 1 1433 | m_RendererPriority: 0 1434 | m_Materials: 1435 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 1436 | m_StaticBatchInfo: 1437 | firstSubMesh: 0 1438 | subMeshCount: 0 1439 | m_StaticBatchRoot: {fileID: 0} 1440 | m_ProbeAnchor: {fileID: 0} 1441 | m_LightProbeVolumeOverride: {fileID: 0} 1442 | m_ScaleInLightmap: 1 1443 | m_ReceiveGI: 1 1444 | m_PreserveUVs: 0 1445 | m_IgnoreNormalsForChartDetection: 0 1446 | m_ImportantGI: 0 1447 | m_StitchLightmapSeams: 1 1448 | m_SelectedEditorRenderState: 0 1449 | m_MinimumChartSize: 4 1450 | m_AutoUVMaxDistance: 0.5 1451 | m_AutoUVMaxAngle: 89 1452 | m_LightmapParameters: {fileID: 0} 1453 | m_SortingLayerID: 0 1454 | m_SortingLayer: 0 1455 | m_SortingOrder: 0 1456 | m_Sprite: {fileID: 21300000, guid: 95b7fb41a3a36e342b5bcfa8c8b84b2c, type: 3} 1457 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 1458 | m_FlipX: 0 1459 | m_FlipY: 0 1460 | m_DrawMode: 0 1461 | m_Size: {x: 1, y: 1} 1462 | m_AdaptiveModeThreshold: 0.5 1463 | m_SpriteTileMode: 0 1464 | m_WasSpriteAssigned: 1 1465 | m_MaskInteraction: 0 1466 | m_SpriteSortPoint: 0 1467 | --- !u!4 &2069789397 1468 | Transform: 1469 | m_ObjectHideFlags: 0 1470 | m_CorrespondingSourceObject: {fileID: 0} 1471 | m_PrefabInstance: {fileID: 0} 1472 | m_PrefabAsset: {fileID: 0} 1473 | m_GameObject: {fileID: 2069789395} 1474 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1475 | m_LocalPosition: {x: 0, y: 0, z: 0} 1476 | m_LocalScale: {x: 1, y: 1, z: 1} 1477 | m_Children: [] 1478 | m_Father: {fileID: 0} 1479 | m_RootOrder: 14 1480 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1481 | -------------------------------------------------------------------------------- /Rope/Example.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1c85ff205cbaa6346a6b00a1b942e69b 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Rope/Rope.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class Rope : MonoBehaviour 4 | { 5 | [SerializeField] private float ropeLength = 1; 6 | 7 | private float x = 0; 8 | private float y = 0; 9 | 10 | void Update() 11 | { 12 | Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 13 | 14 | //首先计算出鼠标位置与线段原点之间的弧度 15 | float dx = mousePosition.x - x; 16 | float dy = mousePosition.y - y; 17 | float rag = Mathf.Atan2(dy, dx); 18 | 19 | //每帧都在做什么的关键所在: 20 | //最本质的原理就是:每帧根据鼠标位置和线段位置的Atan2反正切的弧度,用此弧度的正弦和余弦偏移出下一帧线段应该出现的位置。 21 | x = mousePosition.x - (Mathf.Cos(rag) * ropeLength); //比如鼠标x位置在2,那么 2 - (1 * 1) = 1,所以线段的x位置应该来到1,Cos的最大值永远为1。 22 | y = mousePosition.y - (Mathf.Sin(rag) * ropeLength); //比如鼠标y位置在2,那么 2 - (1 * 1) = 1,Sin的最大值也为1,这时Cos的值为0,所以x轴没有任何偏移。 23 | 24 | //线段的位置与旋转 25 | float deg = rag * Mathf.Rad2Deg; 26 | transform.position = new Vector2(x, y); 27 | transform.eulerAngles = new Vector3(0, 0, deg); 28 | } 29 | } -------------------------------------------------------------------------------- /Rope/Rope.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b1dd67216674b174d9407a10f044904a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Rope/Rope2.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class Rope2 : MonoBehaviour 4 | { 5 | [SerializeField] Transform[] ropeTransforms; 6 | [SerializeField] private float ropeLength = 1; 7 | 8 | private float[] x; 9 | private float[] y; 10 | 11 | private void Start() 12 | { 13 | x = new float[ropeTransforms.Length]; 14 | y = new float[ropeTransforms.Length]; 15 | } 16 | 17 | private void Update() 18 | { 19 | DragRope(0, Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); 20 | DragRope(1, x[0], y[0]); 21 | } 22 | 23 | private void DragRope(int index, float x, float y) 24 | { 25 | float dx = x - this.x[index]; 26 | float dy = y - this.y[index]; 27 | float angle = Mathf.Atan2(dy, dx); 28 | this.x[index] = x - Mathf.Cos(angle) * ropeLength; 29 | this.y[index] = y - Mathf.Sin(angle) * ropeLength; 30 | 31 | float deg = angle * Mathf.Rad2Deg; 32 | ropeTransforms[index].position = new Vector2(this.x[index], this.y[index]); 33 | ropeTransforms[index].eulerAngles = new Vector3(0, 0, deg); 34 | } 35 | } -------------------------------------------------------------------------------- /Rope/Rope2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c139e1ff3997a7644ac4c8255953a46a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Rope/Rope3.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class Rope3 : MonoBehaviour 4 | { 5 | [SerializeField] private Transform[] ropeTransforms; 6 | [SerializeField] private float ropeLength = 1; 7 | 8 | private float[] x; 9 | private float[] y; 10 | 11 | private void Start() 12 | { 13 | x = new float[ropeTransforms.Length]; 14 | y = new float[ropeTransforms.Length]; 15 | } 16 | 17 | private void Update() 18 | { 19 | DragRope(0, Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); 20 | 21 | for (int i = 0; i < ropeTransforms.Length - 1; i++) 22 | { 23 | DragRope(i + 1, x[i], y[i]); 24 | } 25 | } 26 | 27 | private void DragRope(int index, float x, float y) 28 | { 29 | //使用反正切,计算出鼠标位置与绳子原点的弧度 30 | float dx = x - this.x[index]; 31 | float dy = y - this.y[index]; 32 | float rad = Mathf.Atan2(dy, dx); 33 | 34 | //关键的每帧原理: 35 | //每帧根据此弧度的正弦和余弦偏移出绳子应该出现的位置。 36 | this.x[index] = x - Mathf.Cos(rad) * ropeLength; 37 | this.y[index] = y - Mathf.Sin(rad) * ropeLength; 38 | 39 | //将弧度转换为角度,为整条绳子的各个子线段赋值位置与旋转 40 | float deg = rad * Mathf.Rad2Deg; 41 | ropeTransforms[index].position = new Vector2(this.x[index], this.y[index]); 42 | ropeTransforms[index].eulerAngles = new Vector3(0, 0, deg); 43 | } 44 | } -------------------------------------------------------------------------------- /Rope/Rope3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 99f232300551d3d4b83048e960c0e553 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | --------------------------------------------------------------------------------