diff --git a/Assets/Scenes/xianchang.unity b/Assets/Scenes/xianchang.unity
index ad90fc7..fc944a1 100644
--- a/Assets/Scenes/xianchang.unity
+++ b/Assets/Scenes/xianchang.unity
@@ -170,7 +170,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 23
+ interfaceType: 27
+ IsNotLine: 0
--- !u!65 &31259008
BoxCollider:
m_ObjectHideFlags: 0
@@ -384,6 +385,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 13
+ IsNotLine: 0
--- !u!65 &82777332
BoxCollider:
m_ObjectHideFlags: 0
@@ -495,6 +497,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 4
+ IsNotLine: 0
--- !u!65 &96211648
BoxCollider:
m_ObjectHideFlags: 0
@@ -605,7 +608,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 32
+ interfaceType: 36
+ IsNotLine: 1
--- !u!65 &127228039
BoxCollider:
m_ObjectHideFlags: 0
@@ -682,6 +686,7 @@ GameObject:
- component: {fileID: 140014611}
- component: {fileID: 140014614}
- component: {fileID: 140014615}
+ - component: {fileID: 140014616}
m_Layer: 0
m_Name: Manager
m_TagString: Untagged
@@ -705,6 +710,17 @@ MonoBehaviour:
point2: {fileID: 0}
Tips: {fileID: 1843818177}
TipTexts: {fileID: 328649576}
+ Models:
+ - {fileID: 430381704085068992}
+ - {fileID: 4300108389634983148}
+ - {fileID: 8667564567584011752}
+ - {fileID: 1844046986138721254}
+ - {fileID: 7006734113389019125}
+ - {fileID: 385327144811188757}
+ - {fileID: 8446424303547330454}
+ - {fileID: 601978073058571682}
+ - {fileID: 229573283299024619}
+ - {fileID: 4824165716070450316}
--- !u!114 &140014612
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -712,7 +728,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 140014610}
- m_Enabled: 1
+ m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7bdb490d0652e874091b855aabfa9122, type: 3}
m_Name:
@@ -826,7 +842,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 140014610}
- m_Enabled: 1
+ m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9de98abaf88316a4da82930a8eb6668e, type: 3}
m_Name:
@@ -848,6 +864,38 @@ MonoBehaviour:
manualSaveKey: 286
manualLoadKey: 290
debugInfoKey: 292
+--- !u!114 &140014616
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 140014610}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 239a36da09e63484eb88aed17b731dea, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ wireMaterial: {fileID: 2100000, guid: 60de1ea540cb9d0488799f6838e98c54, type: 2}
+ wireColor: {r: 1, g: 0, b: 0, a: 1}
+ wireWidth: 0.002
+ enableSnapping: 1
+ snapDistance: 1
+ snapLayers:
+ serializedVersion: 2
+ m_Bits: 64
+ snapToColliderCenter: 1
+ snapHighlightColor: {r: 0, g: 1, b: 1, a: 1}
+ useCylinderWire: 1
+ cylinderWireMaterial: {fileID: 2100000, guid: 60de1ea540cb9d0488799f6838e98c54, type: 2}
+ cylinderWireDiameter: 0.002
+ cylinderSegments: 8
+ previewMaterial: {fileID: 0}
+ previewColor: {r: 1, g: 0, b: 0, a: 0.5}
+ previewWireDiameter: 0.002
+ deleteKey: 325
+ deleteDetectionRadius: 0.5
+ currentState: 0
--- !u!1 &154209944
GameObject:
m_ObjectHideFlags: 0
@@ -895,7 +943,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 27
+ interfaceType: 32
+ IsNotLine: 1
--- !u!65 &154209947
BoxCollider:
m_ObjectHideFlags: 0
@@ -990,6 +1039,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 15
+ IsNotLine: 1
--- !u!1 &189223157 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6501468878996255, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
@@ -1021,6 +1071,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 16
+ IsNotLine: 0
--- !u!1 &195981657
GameObject:
m_ObjectHideFlags: 0
@@ -1068,7 +1119,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 34
+ interfaceType: 38
+ IsNotLine: 1
--- !u!65 &195981660
BoxCollider:
m_ObjectHideFlags: 0
@@ -1167,9 +1219,9 @@ RectTransform:
m_Father: {fileID: 1359383648}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 101.92045, y: -147.25677}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &211242735
@@ -1313,7 +1365,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 14
+ interfaceType: 17
+ IsNotLine: 1
--- !u!65 &239612375
BoxCollider:
m_ObjectHideFlags: 0
@@ -1458,7 +1511,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 16
+ interfaceType: 20
+ IsNotLine: 1
--- !u!65 &309747188
BoxCollider:
m_ObjectHideFlags: 0
@@ -1762,6 +1816,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 7
+ IsNotLine: 0
--- !u!65 &380543102
BoxCollider:
m_ObjectHideFlags: 0
@@ -1966,7 +2021,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 19
+ interfaceType: 23
+ IsNotLine: 1
--- !u!65 &492161853
BoxCollider:
m_ObjectHideFlags: 0
@@ -2077,7 +2133,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 19
+ interfaceType: 22
+ IsNotLine: 1
--- !u!65 &503603841
BoxCollider:
m_ObjectHideFlags: 0
@@ -2189,6 +2246,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 12
+ IsNotLine: 1
--- !u!65 &512441041
BoxCollider:
m_ObjectHideFlags: 0
@@ -2299,7 +2357,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 34
+ interfaceType: 39
+ IsNotLine: 1
--- !u!65 &517604014
BoxCollider:
m_ObjectHideFlags: 0
@@ -2487,7 +2546,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 21
+ interfaceType: 24
+ IsNotLine: 1
--- !u!65 &561287913
BoxCollider:
m_ObjectHideFlags: 0
@@ -2914,6 +2974,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 8
+ IsNotLine: 0
--- !u!1 &769986614
GameObject:
m_ObjectHideFlags: 0
@@ -2962,6 +3023,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 11
+ IsNotLine: 1
--- !u!65 &769986617
BoxCollider:
m_ObjectHideFlags: 0
@@ -3060,9 +3122,9 @@ RectTransform:
m_Father: {fileID: 1359383648}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 101.92045, y: -15}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &809263221
@@ -3207,6 +3269,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 9
+ IsNotLine: 0
--- !u!65 &845795820
BoxCollider:
m_ObjectHideFlags: 0
@@ -3300,7 +3363,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 42
+ interfaceType: 43
+ IsNotLine: 0
--- !u!1 &853107033 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: -5266785677919700964, guid: b11e3115ad4164947957f5e35d5527cf, type: 3}
@@ -3366,7 +3430,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 27
+ interfaceType: 30
+ IsNotLine: 1
--- !u!65 &871829734
BoxCollider:
m_ObjectHideFlags: 0
@@ -3478,6 +3543,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 10
+ IsNotLine: 1
--- !u!65 &900714113
BoxCollider:
m_ObjectHideFlags: 0
@@ -3588,7 +3654,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 23
+ interfaceType: 28
+ IsNotLine: 1
--- !u!65 &925892943
BoxCollider:
m_ObjectHideFlags: 0
@@ -3699,7 +3766,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 35
+ interfaceType: 40
+ IsNotLine: 1
--- !u!65 &1021607069
BoxCollider:
m_ObjectHideFlags: 0
@@ -3810,7 +3878,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 15
+ interfaceType: 18
+ IsNotLine: 1
--- !u!65 &1040294132
BoxCollider:
m_ObjectHideFlags: 0
@@ -3909,9 +3978,9 @@ RectTransform:
m_Father: {fileID: 1359383648}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 101.92045, y: -279.51355}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1042182378
@@ -4067,6 +4136,10 @@ PrefabInstance:
propertyPath: m_Layer
value: 6
objectReference: {fileID: 0}
+ - target: {fileID: -7848099655778327179, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
+ propertyPath: m_Layer
+ value: 6
+ objectReference: {fileID: 0}
- target: {fileID: -6880166670635558359, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
propertyPath: m_Layer
value: 6
@@ -4075,6 +4148,10 @@ PrefabInstance:
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
+ - target: {fileID: -3176553419678292264, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
+ propertyPath: m_Layer
+ value: 6
+ objectReference: {fileID: 0}
- target: {fileID: -2578546517966586142, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
propertyPath: m_Layer
value: 6
@@ -4099,6 +4176,10 @@ PrefabInstance:
propertyPath: m_Layer
value: 6
objectReference: {fileID: 0}
+ - target: {fileID: 8304324904651862010, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
+ propertyPath: m_Layer
+ value: 6
+ objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
--- !u!4 &1045066282 stripped
@@ -4123,7 +4204,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 41
+ interfaceType: 42
+ IsNotLine: 0
--- !u!65 &1045066285
BoxCollider:
m_ObjectHideFlags: 0
@@ -4154,7 +4236,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 43
+ interfaceType: 44
+ IsNotLine: 0
--- !u!65 &1075926906
BoxCollider:
m_ObjectHideFlags: 0
@@ -4168,6 +4251,37 @@ BoxCollider:
serializedVersion: 2
m_Size: {x: 0.76161194, y: 0.7243271, z: 0.19907904}
m_Center: {x: -0.000015258789, y: 0.0000038146973, z: -0.00000667572}
+--- !u!1 &1098063709
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1098063710}
+ m_Layer: 0
+ m_Name: "\u63D2\u5934\u5728\u63D2\u53E3\u7684\u4F4D\u7F6E"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1098063710
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1098063709}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -2, y: -0.293, z: -0.15}
+ m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 15
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1172298543
GameObject:
m_ObjectHideFlags: 0
@@ -4215,7 +4329,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 18
+ interfaceType: 21
+ IsNotLine: 1
--- !u!65 &1172298546
BoxCollider:
m_ObjectHideFlags: 0
@@ -4462,6 +4577,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 5
+ IsNotLine: 1
--- !u!65 &1245005138
BoxCollider:
m_ObjectHideFlags: 0
@@ -4618,6 +4734,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 14
+ IsNotLine: 1
--- !u!1 &1292734983 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6073914910648615971, guid: e908463f3f6b7e54cb2ffaa2e941c53e, type: 3}
@@ -4649,6 +4766,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 16
+ IsNotLine: 0
--- !u!65 &1303211144
BoxCollider:
m_ObjectHideFlags: 0
@@ -4697,9 +4815,9 @@ RectTransform:
m_Father: {fileID: 1359383648}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 101.92045, y: -411.77032}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1307015857
@@ -5028,7 +5146,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!224 &1359383648
RectTransform:
m_ObjectHideFlags: 0
@@ -5148,6 +5266,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 25
+ IsNotLine: 0
--- !u!1 &1416330993
GameObject:
m_ObjectHideFlags: 0
@@ -5195,7 +5314,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 33
+ interfaceType: 37
+ IsNotLine: 1
--- !u!65 &1416330996
BoxCollider:
m_ObjectHideFlags: 0
@@ -5355,6 +5475,37 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1434276876
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1434276877}
+ m_Layer: 0
+ m_Name: "\u63D2\u5934\u5728\u5730\u4E0A\u7684\u4F4D\u7F6E"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1434276877
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1434276876}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -2.0099363, y: -0.377, z: -0.15516374}
+ m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 14
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1445656028
PrefabInstance:
m_ObjectHideFlags: 0
@@ -5468,7 +5619,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 25
+ interfaceType: 26
+ IsNotLine: 0
--- !u!65 &1515177978
BoxCollider:
m_ObjectHideFlags: 0
@@ -5550,6 +5702,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 45
+ IsNotLine: 0
--- !u!65 &1615636847
BoxCollider:
m_ObjectHideFlags: 0
@@ -5611,6 +5764,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 6
+ IsNotLine: 1
--- !u!65 &1678785028
BoxCollider:
m_ObjectHideFlags: 0
@@ -5722,6 +5876,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 1
+ IsNotLine: 0
--- !u!65 &1720349210
BoxCollider:
m_ObjectHideFlags: 0
@@ -5832,7 +5987,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 28
+ interfaceType: 33
+ IsNotLine: 1
--- !u!65 &1735319914
BoxCollider:
m_ObjectHideFlags: 0
@@ -5944,6 +6100,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 2
+ IsNotLine: 1
--- !u!65 &1767234965
BoxCollider:
m_ObjectHideFlags: 0
@@ -6054,7 +6211,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 25
+ interfaceType: 29
+ IsNotLine: 1
--- !u!65 &1774313875
BoxCollider:
m_ObjectHideFlags: 0
@@ -6240,7 +6398,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 29
+ interfaceType: 34
+ IsNotLine: 1
--- !u!65 &1818029208
BoxCollider:
m_ObjectHideFlags: 0
@@ -6589,6 +6748,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 8
+ IsNotLine: 0
--- !u!65 &2020965151
BoxCollider:
m_ObjectHideFlags: 0
@@ -6699,7 +6859,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 26
+ interfaceType: 31
+ IsNotLine: 1
--- !u!65 &2033294238
BoxCollider:
m_ObjectHideFlags: 0
@@ -7041,7 +7202,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 16
+ interfaceType: 19
+ IsNotLine: 1
--- !u!65 &2065793936
BoxCollider:
m_ObjectHideFlags: 0
@@ -7152,7 +7314,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 31
+ interfaceType: 35
+ IsNotLine: 1
--- !u!65 &2070614957
BoxCollider:
m_ObjectHideFlags: 0
@@ -7264,6 +7427,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 3
+ IsNotLine: 1
--- !u!65 &2085638282
BoxCollider:
m_ObjectHideFlags: 0
@@ -7358,6 +7522,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
interfaceType: 13
+ IsNotLine: 0
--- !u!1 &2098517107
GameObject:
m_ObjectHideFlags: 0
@@ -7405,7 +7570,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
m_Name:
m_EditorClassIdentifier:
- interfaceType: 36
+ interfaceType: 41
+ IsNotLine: 1
--- !u!65 &2098517110
BoxCollider:
m_ObjectHideFlags: 0
@@ -7757,12 +7923,12 @@ GameObject:
m_Component:
- component: {fileID: 3150416692739349881}
m_Layer: 0
- m_Name: xian9
+ m_Name: "AD2\u8FDEIN1"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!23 &378114153369630115
MeshRenderer:
m_ObjectHideFlags: 0
@@ -7815,12 +7981,12 @@ GameObject:
m_Component:
- component: {fileID: 4271719479381916268}
m_Layer: 0
- m_Name: xian6
+ m_Name: "OUT1\u8FDEIN4"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!1 &430381704085068992
GameObject:
m_ObjectHideFlags: 0
@@ -7831,12 +7997,12 @@ GameObject:
m_Component:
- component: {fileID: 5995273574770118330}
m_Layer: 0
- m_Name: xian1
+ m_Name: "\u8D1F12V\u8FDE\u8D1F12V"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!4 &435944714890923873 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7256217081674647743, guid: d078ca4e433c6f045bccc0dd9acb4fd8, type: 3}
@@ -7907,7 +8073,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 919132148175229397}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: -13.07}
+ m_LocalPosition: {x: -1.451, y: 0, z: 0.003}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@@ -7944,12 +8110,12 @@ GameObject:
m_Component:
- component: {fileID: 8818355676258105931}
m_Layer: 0
- m_Name: xian8
+ m_Name: "OUT\u8FDEIN1"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!4 &698346336316105428
Transform:
m_ObjectHideFlags: 0
@@ -8341,12 +8507,12 @@ GameObject:
m_Component:
- component: {fileID: 698346336316105428}
m_Layer: 0
- m_Name: xian4
+ m_Name: "\u96F6V\u8FDEIII"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!23 &1889257504621397117
MeshRenderer:
m_ObjectHideFlags: 0
@@ -9095,12 +9261,12 @@ GameObject:
m_Component:
- component: {fileID: 2242849901158410428}
m_Layer: 0
- m_Name: xian2
+ m_Name: "\u6B6312V\u8FDE\u6B6312V"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!33 &4385593541941988605
MeshFilter:
m_ObjectHideFlags: 0
@@ -9154,6 +9320,8 @@ GameObject:
- component: {fileID: 7587113396328959638}
- component: {fileID: 2960245785289707152}
- component: {fileID: 4251157638611693837}
+ - component: {fileID: 7587113396328959639}
+ - component: {fileID: 7587113396328959640}
m_Layer: 0
m_Name: diannaoxian
m_TagString: Untagged
@@ -9709,12 +9877,12 @@ GameObject:
m_Component:
- component: {fileID: 2446499898162477886}
m_Layer: 0
- m_Name: xian5
+ m_Name: "OUT1\u8FDEIN2_200K"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!1001 &7115559408580331486
PrefabInstance:
m_ObjectHideFlags: 0
@@ -9863,14 +10031,41 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4824165716070450316}
- m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: -0.5589363, y: -0.28709245, z: -0.15816374}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.55893636, y: -0.377, z: -0.15816374}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 543450652430306159}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &7587113396328959639
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4824165716070450316}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 6282401d280c18d488e073bf54edbc11, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ interfaceType: 0
+ IsNotLine: 0
+--- !u!65 &7587113396328959640
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4824165716070450316}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 2.0035684, y: 9.241698, z: 6.1390786}
+ m_Center: {x: 12.193081, y: 0, z: 26.267164}
--- !u!23 &7977243180361879557
MeshRenderer:
m_ObjectHideFlags: 0
@@ -10115,12 +10310,12 @@ GameObject:
m_Component:
- component: {fileID: 1947694940705415576}
m_Layer: 0
- m_Name: xian7
+ m_Name: "AD1\u8FDEOUT2"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!23 &8447598666252558499
MeshRenderer:
m_ObjectHideFlags: 0
@@ -10232,12 +10427,12 @@ GameObject:
m_Component:
- component: {fileID: 7131730346368750079}
m_Layer: 0
- m_Name: xian3
+ m_Name: "\u96F6V\u8FDEGND"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!1 &8741073888561617728
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Line/LineConnect.cs b/Assets/Scripts/Line/LineConnect.cs
index b4bf846..8239c2f 100644
--- a/Assets/Scripts/Line/LineConnect.cs
+++ b/Assets/Scripts/Line/LineConnect.cs
@@ -55,6 +55,10 @@ public enum InterfaceType
public class LineConnect : MonoBehaviour
{
public InterfaceType interfaceType = InterfaceType.None;
+ ///
+ /// 是否是不需要连接的接口
+ ///
+ public bool IsNotLine = false;
private void OnMouseDown()
{
Debug.Log(transform.name);
diff --git a/Assets/Scripts/Line/LineManager.cs b/Assets/Scripts/Line/LineManager.cs
index 09dd613..e558e07 100644
--- a/Assets/Scripts/Line/LineManager.cs
+++ b/Assets/Scripts/Line/LineManager.cs
@@ -1,8 +1,12 @@
+using DG.Tweening;
+using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Drawing;
using TMPro;
using UnityEngine;
+using UnityEngine.Tilemaps;
public class LineManager : MonoBehaviour
{
@@ -11,17 +15,38 @@ public class LineManager : MonoBehaviour
public Transform point2;
public GameObject Tips;
public TextMeshProUGUI TipTexts;
+ public List Models = new List();
+ LineData lineData = new LineData();
private void Awake()
{
instance = this;
}
void Start()
{
- //// 测试连接
- //TestConnection(InterfaceType.IN1, InterfaceType.OUT1); // 应该正确
- //TestConnection(InterfaceType.IN1, InterfaceType.GND); // 应该错误
- //TestConnection(InterfaceType.正12V, InterfaceType.GND); // 应该正确
- //TestConnection(InterfaceType._1uF_star, InterfaceType._1uF_end); // 应该正确
+ Initialization();
+ }
+ private void Initialization()
+ {
+ if (PlayerPrefs.GetString("LineData") != "")
+ {
+ lineData = JsonConvert.DeserializeObject(PlayerPrefs.GetString("LineData"));
+
+ for (int i = 0; i < lineData.Modelname.Count; i++)
+ {
+ for (int j = 0; j < Models.Count; j++)
+ {
+ if (lineData.Modelname[i].Contains(Models[j].name))
+ {
+ Models[j].SetActive(true);
+ }
+ if (lineData.Modelname[i].Equals(Models[j].name) && Models[j].name.Equals("diannaoxian"))
+ {
+ Models[j].transform.DOLocalMove(new Vector3(-0.56f, -0.293f, -0.163f), 0.5f);
+ }
+ }
+ }
+
+ }
}
void Update()
{
@@ -29,6 +54,7 @@ public class LineManager : MonoBehaviour
{
point1 = null;
point2 = null;
+ PlayerPrefs.SetString("LineData", "");
}
}
///
@@ -37,22 +63,32 @@ public class LineManager : MonoBehaviour
///
public void ClickPoint(Transform point)
{
- if (point1 != null)
+ //if (point1 != null)
+ //{
+ // point2 = point;
+ //}
+ //if (point1 == null)
+ //{
+ // point1 = point;
+ //}
+ //if (point1 != null && point2 != null)
+ //{
+ // //StartCoroutine(Checkconnection(point1, point2));
+ //}
+ if (point.name.Equals("diannaoxian"))
{
- point2 = point;
- }
- if (point1 == null)
- {
- point1 = point;
- }
- if (point1 != null && point2 != null)
- {
- StartCoroutine(Checkconnection(point1, point2));
+ if (!lineData.Modelname.Contains(point.name))
+ {
+ lineData.Modelname.Add(point.name);
+ string json = JsonConvert.SerializeObject(lineData);
+ PlayerPrefs.SetString("LineData", json);
+ }
+ point.DOLocalMove(new Vector3(-0.56f, -0.293f, -0.163f), 0.5f);
}
}
- IEnumerator Checkconnection(Transform transform, Transform transform2)
+ public IEnumerator Checkconnection(Transform transform, Transform transform2)
{
LineConnect line = transform.GetComponent();
@@ -76,9 +112,7 @@ public class LineManager : MonoBehaviour
line2.interfaceType == InterfaceType.负12V && line1.interfaceType != InterfaceType.负12V)
{
TipTexts.text = "连接错误,-12V应该与-12V相连!";
- //WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.正12V && line2.interfaceType != InterfaceType.正12V
@@ -86,88 +120,90 @@ public class LineManager : MonoBehaviour
)
{
TipTexts.text = "连接错误,12V应该与12V相连!";
- //WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
- return false;
- }
- else if (line1.interfaceType == InterfaceType.零V && line2.interfaceType != InterfaceType.GND
- || line2.interfaceType == InterfaceType.GND && line1.interfaceType != InterfaceType.零V)
- {
- TipTexts.text = "连接错误,0V应该与GND相连!";
- // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
+ //else if (line1.interfaceType == InterfaceType.零V && line2.interfaceType != InterfaceType.GND
+ // || line2.interfaceType == InterfaceType.GND && line1.interfaceType != InterfaceType.零V)
+ //{
+ // TipTexts.text = "连接错误,0V应该与GND相连!";
+ // // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
+ // //WireDrawingSystem.instance.HandleDelete();
+ // //WireDrawingSystem.instance.ClearSnapPreview();
+ // LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
+ // return false;
+ //}
else if (line1.interfaceType == InterfaceType.IN2_200K && line2.interfaceType != InterfaceType.OUT1
|| line2.interfaceType == InterfaceType.IN2_200K && line1.interfaceType != InterfaceType.OUT1)
{
TipTexts.text = "连接错误,200K应该与OUT1相连!";
- //WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
- else if (line1.interfaceType == InterfaceType.OUT1 && line2.interfaceType != InterfaceType.IN4
+ else if (line1.interfaceType == InterfaceType.OUT1 && (line2.interfaceType != InterfaceType.IN4 && line2.interfaceType != InterfaceType.IN2_200K)
|| line2.interfaceType == InterfaceType.OUT1 && line1.interfaceType != InterfaceType.IN4)
{
TipTexts.text = "连接错误,OUT1应该与IN4相连!";
- // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.AD1 && line2.interfaceType != InterfaceType.OUT2
|| line2.interfaceType == InterfaceType.AD1 && line1.interfaceType != InterfaceType.OUT2)
{
- TipTexts.text = "连接错误,200K应该与OUT1相连!";
- //WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ TipTexts.text = "连接错误,AD1应该与OUT2相连!";
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
- else if (line1.interfaceType == InterfaceType.零V && line2.interfaceType != InterfaceType.GND
+ else if ((line1.interfaceType == InterfaceType.零V && (line2.interfaceType != InterfaceType.GND && line2.interfaceType != InterfaceType.III)
|| line2.interfaceType == InterfaceType.GND && line1.interfaceType != InterfaceType.零V)
+ )
{
TipTexts.text = "连接错误,0V应该与GND相连!";
- //WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.OUT && line2.interfaceType != InterfaceType.IN1
|| line2.interfaceType == InterfaceType.OUT && line1.interfaceType != InterfaceType.IN1)
{
TipTexts.text = "连接错误,OUT应该与IN1相连!";
- // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.AD2 && line2.interfaceType != InterfaceType.IN1
|| line2.interfaceType == InterfaceType.AD2 && line1.interfaceType != InterfaceType.IN1)
{
- TipTexts.text = "连接错误,OUT应该与IN1相连!";
- // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ TipTexts.text = "连接错误,AD2应该与IN1相连!";
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
- else if ((line1.interfaceType != InterfaceType.AD2 || line1.interfaceType != InterfaceType.OUT || line1.interfaceType != InterfaceType.零V
- || line1.interfaceType != InterfaceType.AD1 || line1.interfaceType != InterfaceType.OUT1 || line1.interfaceType != InterfaceType.IN2_200K ||
- line1.interfaceType != InterfaceType.正12V || line1.interfaceType != InterfaceType.负12V) && (line2.interfaceType != InterfaceType.AD2 || line2.interfaceType != InterfaceType.OUT || line2.interfaceType != InterfaceType.零V
- || line2.interfaceType != InterfaceType.AD1 || line2.interfaceType != InterfaceType.OUT1 || line2.interfaceType != InterfaceType.IN2_200K ||
- line2.interfaceType != InterfaceType.正12V || line2.interfaceType != InterfaceType.负12V))
+ else if (line1.IsNotLine == true || line2.IsNotLine == true)
{
TipTexts.text = "连接错误,不需要此连线";
- // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
- WireDrawingSystem.instance.HandleDelete();
- WireDrawingSystem.instance.ClearSnapPreview();
+ // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
+ //WireDrawingSystem.instance.HandleDelete();
+ //WireDrawingSystem.instance.ClearSnapPreview();
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else
{
+ for (int i = 0; i < Models.Count; i++)
+ {
+ string[] splitname = Models[i].name.Split('连');
+ if (splitname[0] == line1.interfaceType.ToString() && splitname[1] == line2.interfaceType.ToString() ||
+ splitname[0] == line2.interfaceType.ToString() && splitname[1] == line1.interfaceType.ToString())
+ {
+ if (!lineData.Modelname.Contains(Models[i].name))
+ {
+ lineData.Modelname.Add(Models[i].name);
+ string json = JsonConvert.SerializeObject(lineData);
+ PlayerPrefs.SetString("LineData", json);
+ }
+ Models[i].SetActive(true);
+ }
+
+ }
+ LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return true;
}
}
@@ -177,3 +213,8 @@ public class LineManager : MonoBehaviour
point1 = null;
}
}
+
+public class LineData
+{
+ public List Modelname = new List();
+}
diff --git a/Assets/Scripts/Line/LineShowModel.cs b/Assets/Scripts/Line/LineShowModel.cs
new file mode 100644
index 0000000..e5023fc
--- /dev/null
+++ b/Assets/Scripts/Line/LineShowModel.cs
@@ -0,0 +1,862 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+public class LineShowModel : MonoBehaviour
+{
+ public enum DrawingState
+ {
+ Idle, // 空闲状态
+ SelectingStart, // 选择起点
+ SelectingEnd // 选择终点
+ }
+
+ [Header("连线设置")]
+ public Material wireMaterial;
+ public Color wireColor = Color.red;
+ public float wireWidth = 0.02f;
+
+ [Header("吸附设置")]
+ public bool enableSnapping = true; // 启用吸附功能
+ public float snapDistance = 1.0f; // 吸附距离
+ public LayerMask snapLayers = -1; // 可吸附的层
+ public bool snapToColliderCenter = true; // 吸附到碰撞体中心
+ public Color snapHighlightColor = Color.cyan; // 吸附高亮颜色
+
+ [Header("圆柱体连线设置")]
+ public bool useCylinderWire = true; // 启用圆柱体连线
+ public Material cylinderWireMaterial;
+ public float cylinderWireDiameter = 0.02f;
+ public int cylinderSegments = 8; // 圆柱体面数,影响性能
+
+ [Header("预览设置")]
+ public Material previewMaterial; // 预览线材质
+ public Color previewColor = new Color(1, 1, 1, 0.5f); // 预览线颜色(半透明)
+ public float previewWireDiameter = 0.015f; // 预览线直径
+
+ [Header("删除设置")]
+ public KeyCode deleteKey = KeyCode.Mouse2; // 默认为鼠标右键
+ public float deleteDetectionRadius = 0.5f; // 删除检测半径
+
+ [Header("状态显示")]
+ public DrawingState currentState = DrawingState.Idle;
+
+ // 连线数据
+ private Vector3 startPoint;
+ private Vector3 endPoint;
+ private GameObject currentWireObject;
+ private GameObject previewWireObject; // 预览连线对象
+
+ // 吸附相关
+ private GameObject snapTarget; // 当前吸附目标
+ private Renderer snapTargetRenderer; // 吸附目标的渲染器
+ private Color snapTargetOriginalColor; // 吸附目标原始颜色
+ private bool isSnapTargetHighlighted = false;
+
+ // 存储所有已创建的连线
+ private List allWires = new List();
+
+ // 起点和终点的碰撞体
+ private GameObject startColliderObject;
+ private GameObject endColliderObject;
+
+ // 单例模式,便于外部调用
+ public static LineShowModel Instance { get; private set; }
+
+ void Awake()
+ {
+ // 设置单例
+ if (Instance == null)
+ {
+ Instance = this;
+ }
+ else
+ {
+ Destroy(gameObject);
+ }
+ }
+
+ void Update()
+ {
+ HandleInput();
+
+ if (currentState == DrawingState.SelectingEnd)
+ {
+ UpdateWirePreview();
+ }
+
+ // 在选择终点状态时检查吸附
+ if (currentState == DrawingState.SelectingEnd && enableSnapping)
+ {
+ CheckForSnapTargets();
+ }
+ else
+ {
+ ClearSnapHighlight();
+ }
+ }
+
+ void HandleInput()
+ {
+ if (Input.GetMouseButtonDown(0)) // 左键点击
+ {
+ HandleMouseClick();
+ }
+
+ if (Input.GetKeyDown(KeyCode.Escape)) // 取消当前操作
+ {
+ CancelDrawing();
+ }
+
+ if (Input.GetKeyDown(deleteKey)) // 删除操作
+ {
+ HandleDelete();
+ }
+ }
+
+ void HandleMouseClick()
+ {
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+ RaycastHit hit;
+
+ // 首先检查是否有吸附目标
+ if (snapTarget != null)
+ {
+ HandleSnapTargetClick();
+ }
+ else if (Physics.Raycast(ray, out hit, Mathf.Infinity, snapLayers))
+ {
+ HandleColliderClick(hit.collider.gameObject, hit.point);
+ }
+ else
+ {
+ // 如果没有击中任何物体,且不在选择起点状态,则忽略
+ if (currentState == DrawingState.Idle)
+ {
+ Debug.Log("请点击一个碰撞体作为连线起点");
+ }
+ }
+ }
+
+ void HandleSnapTargetClick()
+ {
+ if (snapTarget == null) return;
+
+ switch (currentState)
+ {
+ case DrawingState.Idle:
+ // 选择起点
+ StartNewWire(snapTarget);
+ break;
+
+ case DrawingState.SelectingEnd:
+ // 选择终点
+ CompleteWire(snapTarget);
+ break;
+ }
+ }
+
+ void HandleColliderClick(GameObject colliderObject, Vector3 hitPoint)
+ {
+ switch (currentState)
+ {
+ case DrawingState.Idle:
+ // 选择起点
+ StartNewWire(colliderObject);
+ break;
+
+ case DrawingState.SelectingEnd:
+ // 选择终点
+ CompleteWire(colliderObject);
+ break;
+ }
+ }
+
+ void StartNewWire(GameObject startCollider)
+ {
+ if (startCollider == null) return;
+
+ startColliderObject = startCollider;
+ startPoint = GetObjectCenter(startCollider);
+ currentState = DrawingState.SelectingEnd;
+
+ // 创建预览连线
+ CreatePreviewWire();
+
+ // 高亮起点碰撞体
+ HighlightObject(startCollider);
+
+ Debug.Log($"选择起点: {startCollider.name}");
+ }
+
+ void CompleteWire(GameObject endCollider)
+ {
+ if (endCollider == null || startColliderObject == null) return;
+
+ // 检查是否连接到自身
+ if (endCollider == startColliderObject)
+ {
+ Debug.LogWarning("不能连接到自身!");
+ CancelDrawing();
+ return;
+ }
+
+ endColliderObject = endCollider;
+ endPoint = GetObjectCenter(endCollider);
+
+ // 创建最终的连线
+ GameObject newWire = CreateFinalWire();
+
+ currentState = DrawingState.Idle;
+
+ // 清除预览和高亮
+ ClearPreviewWire();
+ ClearSnapHighlight();
+
+ Debug.Log($"选择终点: {endCollider.name}, 连线完成");
+
+ // 返回新创建的连线对象,供外部使用
+ OnWireCreated?.Invoke(newWire, startColliderObject, endColliderObject);
+ }
+
+ void CreatePreviewWire()
+ {
+ // 清除之前的预览
+ ClearPreviewWire();
+
+ previewWireObject = new GameObject("PreviewWire");
+
+ if (useCylinderWire)
+ {
+ CreateCylinderPreviewWire();
+ }
+ else
+ {
+ CreateLineRendererPreviewWire();
+ }
+ }
+
+ void CreateCylinderPreviewWire()
+ {
+ // 创建预览圆柱体
+ GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
+ cylinder.name = "PreviewCylinder";
+ cylinder.transform.SetParent(previewWireObject.transform);
+
+ // 设置预览材质
+ Renderer renderer = cylinder.GetComponent();
+ if (previewMaterial != null)
+ {
+ renderer.material = previewMaterial;
+ }
+ else
+ {
+ // 创建默认预览材质
+ Material defaultPreviewMaterial = new Material(Shader.Find("Standard"));
+ defaultPreviewMaterial.color = previewColor;
+ renderer.material = defaultPreviewMaterial;
+ }
+
+ // 初始位置和缩放
+ cylinder.transform.position = startPoint;
+ cylinder.transform.localScale = new Vector3(
+ previewWireDiameter,
+ 0.001f, // 初始高度很小
+ previewWireDiameter
+ );
+
+ // 移除碰撞器,避免干扰
+ Destroy(cylinder.GetComponent());
+ }
+
+ void CreateLineRendererPreviewWire()
+ {
+ // 使用LineRenderer作为备选预览
+ LineRenderer lr = previewWireObject.AddComponent();
+ lr.positionCount = 2;
+ lr.SetPosition(0, startPoint);
+ lr.SetPosition(1, startPoint);
+
+ // 配置LineRenderer
+ if (previewMaterial != null)
+ {
+ lr.material = previewMaterial;
+ }
+ else
+ {
+ lr.material = new Material(Shader.Find("Sprites/Default"));
+ }
+
+ lr.startColor = previewColor;
+ lr.endColor = previewColor;
+ lr.startWidth = previewWireDiameter;
+ lr.endWidth = previewWireDiameter;
+ lr.useWorldSpace = true;
+ }
+
+ void UpdateWirePreview()
+ {
+ if (currentState == DrawingState.SelectingEnd && previewWireObject != null)
+ {
+ Vector3 targetPoint;
+
+ if (snapTarget != null)
+ {
+ targetPoint = GetObjectCenter(snapTarget);
+ }
+ else
+ {
+ targetPoint = GetMouseWorldPosition();
+ }
+
+ if (useCylinderWire)
+ {
+ UpdateCylinderPreviewWire(startPoint, targetPoint);
+ }
+ else
+ {
+ UpdateLineRendererPreviewWire(startPoint, targetPoint);
+ }
+ }
+ }
+
+ void UpdateCylinderPreviewWire(Vector3 start, Vector3 end)
+ {
+ Transform cylinderTransform = previewWireObject.transform.Find("PreviewCylinder");
+ if (cylinderTransform == null) return;
+
+ GameObject cylinder = cylinderTransform.gameObject;
+
+ // 计算连线的方向、长度和中点
+ Vector3 direction = end - start;
+ float distance = direction.magnitude;
+
+ if (distance < 0.001f)
+ {
+ // 距离太短,隐藏圆柱体
+ cylinder.transform.localScale = new Vector3(previewWireDiameter, 0.001f, previewWireDiameter);
+ return;
+ }
+
+ Vector3 midPoint = (start + end) / 2f;
+
+ // 设置圆柱体的位置和旋转
+ cylinder.transform.position = midPoint;
+ cylinder.transform.up = direction.normalized;
+
+ // 设置圆柱体的缩放
+ cylinder.transform.localScale = new Vector3(
+ previewWireDiameter,
+ distance / 2f,
+ previewWireDiameter
+ );
+ }
+
+ void UpdateLineRendererPreviewWire(Vector3 start, Vector3 end)
+ {
+ LineRenderer lr = previewWireObject.GetComponent();
+ if (lr != null)
+ {
+ lr.SetPosition(0, start);
+ lr.SetPosition(1, end);
+ }
+ }
+
+ GameObject CreateFinalWire()
+ {
+ if (startColliderObject == null || endColliderObject == null) return null;
+
+ GameObject wireObject = new GameObject($"Wire_{System.DateTime.Now:yyyyMMddHHmmss}");
+
+ if (useCylinderWire)
+ {
+ CreateCylinderWire(wireObject, startPoint, endPoint);
+ }
+ else
+ {
+ CreateLineRendererWire(wireObject, startPoint, endPoint);
+ }
+
+ // 添加连线数据组件
+ LineShowModelCylinderWireData wireData = wireObject.AddComponent();
+ wireData.startPoint = startPoint;
+ wireData.endPoint = endPoint;
+ wireData.startCollider = startColliderObject;
+ wireData.endCollider = endColliderObject;
+ wireData.wireDiameter = cylinderWireDiameter;
+ wireData.creationTime = System.DateTime.Now;
+
+ // 添加到连线列表
+ allWires.Add(wireObject);
+ StartCoroutine(LineManager.instance.Checkconnection(startColliderObject.transform, endColliderObject.transform));
+ // 重置起点和终点
+ startColliderObject = null;
+ endColliderObject = null;
+
+ return wireObject;
+ }
+
+ void CreateCylinderWire(GameObject wireObject, Vector3 start, Vector3 end)
+ {
+ GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
+ cylinder.name = "WireCylinder";
+ cylinder.transform.SetParent(wireObject.transform);
+
+ // 设置材质
+ if (cylinderWireMaterial != null)
+ {
+ Renderer renderer = cylinder.GetComponent();
+ renderer.material = cylinderWireMaterial;
+ }
+ else if (wireMaterial != null)
+ {
+ Renderer renderer = cylinder.GetComponent();
+ renderer.material = wireMaterial;
+ }
+
+ // 计算连线的方向、长度和中点
+ Vector3 direction = end - start;
+ float distance = direction.magnitude;
+ Vector3 midPoint = (start + end) / 2f;
+
+ // 设置圆柱体的位置和旋转
+ cylinder.transform.position = midPoint;
+ cylinder.transform.up = direction.normalized;
+
+ // 设置圆柱体的缩放
+ cylinder.transform.localScale = new Vector3(
+ cylinderWireDiameter,
+ distance / 2f,
+ cylinderWireDiameter
+ );
+
+ // 可选:添加碰撞器
+ if (cylinder.GetComponent() != null)
+ {
+ Destroy(cylinder.GetComponent());
+ }
+ }
+
+ void CreateLineRendererWire(GameObject wireObject, Vector3 start, Vector3 end)
+ {
+ LineRenderer lr = wireObject.AddComponent();
+ lr.positionCount = 2;
+ lr.SetPosition(0, start);
+ lr.SetPosition(1, end);
+
+ // 配置LineRenderer
+ if (wireMaterial != null)
+ {
+ lr.material = wireMaterial;
+ }
+ else
+ {
+ lr.material = new Material(Shader.Find("Sprites/Default"));
+ }
+
+ lr.startColor = wireColor;
+ lr.endColor = wireColor;
+ lr.startWidth = wireWidth;
+ lr.endWidth = wireWidth;
+ lr.useWorldSpace = true;
+ }
+
+ void ClearPreviewWire()
+ {
+ if (previewWireObject != null)
+ {
+ Destroy(previewWireObject);
+ previewWireObject = null;
+ }
+ }
+
+ void CheckForSnapTargets()
+ {
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+ RaycastHit hit;
+
+ // 清除之前的吸附高亮
+ ClearSnapHighlight();
+
+ // 检查鼠标位置附近是否有可吸附的物体
+ if (Physics.Raycast(ray, out hit, Mathf.Infinity, snapLayers))
+ {
+ GameObject hitObject = hit.collider.gameObject;
+
+ // 跳过起点碰撞体
+ if (hitObject == startColliderObject)
+ {
+ return;
+ }
+
+ // 计算鼠标位置与物体中心的距离
+ Vector3 objectCenter = GetObjectCenter(hitObject);
+ float distance = Vector3.Distance(GetMouseWorldPosition(), objectCenter);
+
+ if (distance <= snapDistance)
+ {
+ // 设置吸附目标
+ snapTarget = hitObject;
+
+ // 高亮显示可吸附的物体
+ HighlightSnapTarget(snapTarget);
+ }
+ }
+ }
+
+ Vector3 GetObjectCenter(GameObject obj)
+ {
+ if (obj == null) return Vector3.zero;
+
+ if (snapToColliderCenter)
+ {
+ Collider collider = obj.GetComponent();
+ if (collider != null)
+ {
+ return collider.bounds.center;
+ }
+ }
+
+ // 默认使用变换位置
+ return obj.transform.position;
+ }
+
+ void HighlightSnapTarget(GameObject target)
+ {
+ if (target == null) return;
+
+ snapTargetRenderer = target.GetComponent();
+ if (snapTargetRenderer != null)
+ {
+ // 记录原始颜色
+ snapTargetOriginalColor = snapTargetRenderer.material.color;
+
+ // 设置高亮颜色
+ snapTargetRenderer.material.color = snapHighlightColor;
+ isSnapTargetHighlighted = true;
+ }
+ }
+
+ void HighlightObject(GameObject obj)
+ {
+ if (obj == null) return;
+
+ Renderer renderer = obj.GetComponent();
+ if (renderer != null)
+ {
+ // 临时高亮物体
+ Color originalColor = renderer.material.color;
+ renderer.material.color = Color.green;
+
+ // 可以在这里添加一个协程来在一段时间后恢复颜色
+ StartCoroutine(RestoreColorAfterDelay(renderer, originalColor, 1.0f));
+ }
+ }
+
+ IEnumerator RestoreColorAfterDelay(Renderer renderer, Color originalColor, float delay)
+ {
+ yield return new WaitForSeconds(delay);
+
+ if (renderer != null)
+ {
+ renderer.material.color = originalColor;
+ }
+ }
+
+ void ClearSnapHighlight()
+ {
+ if (snapTargetRenderer != null && isSnapTargetHighlighted)
+ {
+ snapTargetRenderer.material.color = snapTargetOriginalColor;
+ snapTargetRenderer = null;
+ isSnapTargetHighlighted = false;
+ }
+ snapTarget = null;
+ }
+
+ public void CancelDrawing()
+ {
+ ClearPreviewWire();
+ ClearSnapHighlight();
+ currentState = DrawingState.Idle;
+
+ // 重置起点和终点
+ startColliderObject = null;
+ endColliderObject = null;
+
+ Debug.Log("取消连线操作");
+ }
+
+ Vector3 GetMouseWorldPosition()
+ {
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+ RaycastHit hit;
+
+ // 优先使用吸附目标的位置
+ if (snapTarget != null)
+ {
+ return GetObjectCenter(snapTarget);
+ }
+
+ // 其次使用射线击中的位置
+ if (Physics.Raycast(ray, out hit, Mathf.Infinity, snapLayers))
+ {
+ return hit.point;
+ }
+
+ // 如果没有击中任何物体,使用默认平面
+ Plane defaultPlane = new Plane(Vector3.up, Vector3.zero);
+ float enter;
+ if (defaultPlane.Raycast(ray, out enter))
+ {
+ return ray.GetPoint(enter);
+ }
+
+ // 最后使用射线上的一个点
+ return ray.origin + ray.direction * 10f;
+ }
+
+ // 公共方法:开始新连线
+ public void StartNewWire()
+ {
+ if (currentState != DrawingState.Idle)
+ {
+ CancelDrawing();
+ }
+ currentState = DrawingState.SelectingStart;
+ }
+
+ // 公共方法:删除所有连线
+ public void ClearAllWires()
+ {
+ foreach (GameObject wire in allWires)
+ {
+ if (wire != null)
+ Destroy(wire);
+ }
+ allWires.Clear();
+ Debug.Log("已清除所有连线");
+
+ // 触发事件
+ OnAllWiresDeleted?.Invoke();
+ }
+
+ // 公共方法:删除最后一个连线
+ public void DeleteLastWire()
+ {
+ if (allWires.Count > 0)
+ {
+ GameObject lastWire = allWires[allWires.Count - 1];
+ DeleteWire(lastWire);
+ }
+ else
+ {
+ Debug.Log("没有可删除的连线");
+ }
+ }
+
+ // 公共方法:删除指定连线
+ public void DeleteWire(GameObject wireObject)
+ {
+ if (wireObject == null) return;
+
+ // 获取连线数据
+ LineShowModelCylinderWireData wireData = wireObject.GetComponent();
+ GameObject startCollider = wireData?.startCollider;
+ GameObject endCollider = wireData?.endCollider;
+
+ // 从列表中移除
+ allWires.Remove(wireObject);
+
+ // 销毁连线对象
+ Destroy(wireObject);
+
+ Debug.Log($"删除连线: {wireObject.name}");
+
+ // 触发事件
+ OnWireDeleted?.Invoke(wireObject, startCollider, endCollider);
+ }
+
+ // 公共方法:根据碰撞体删除连线
+ public void DeleteWiresByCollider(GameObject colliderObject)
+ {
+ List wiresToDelete = new List();
+
+ // 查找所有连接到该碰撞体的连线
+ foreach (GameObject wire in allWires)
+ {
+ LineShowModelCylinderWireData wireData = wire?.GetComponent();
+ if (wireData != null && (wireData.startCollider == colliderObject || wireData.endCollider == colliderObject))
+ {
+ wiresToDelete.Add(wire);
+ }
+ }
+
+ // 删除找到的连线
+ foreach (GameObject wire in wiresToDelete)
+ {
+ DeleteWire(wire);
+ }
+
+ if (wiresToDelete.Count > 0)
+ {
+ Debug.Log($"删除了 {wiresToDelete.Count} 条连接到 {colliderObject.name} 的连线");
+ }
+ }
+
+ // 公共方法:根据两个碰撞体删除特定连线
+ public void DeleteWireByColliders(GameObject startCollider, GameObject endCollider)
+ {
+ foreach (GameObject wire in allWires)
+ {
+ LineShowModelCylinderWireData wireData = wire?.GetComponent();
+ if (wireData != null &&
+ ((wireData.startCollider == startCollider && wireData.endCollider == endCollider) ||
+ (wireData.startCollider == endCollider && wireData.endCollider == startCollider)))
+ {
+ DeleteWire(wire);
+ Debug.Log($"删除了 {startCollider.name} 和 {endCollider.name} 之间的连线");
+ return;
+ }
+ }
+
+ Debug.Log($"未找到 {startCollider.name} 和 {endCollider.name} 之间的连线");
+ }
+
+ // 公共方法:设置吸附目标(用于编程控制)
+ public void SetSnapTarget(GameObject target)
+ {
+ if (enableSnapping && target != null)
+ {
+ snapTarget = target;
+ HighlightSnapTarget(target);
+ }
+ }
+
+ // 公共方法:清除吸附目标
+ public void ClearSnapTarget()
+ {
+ ClearSnapHighlight();
+ }
+
+ // 公共方法:检查物体是否可以吸附
+ public bool CanSnapToObject(GameObject obj)
+ {
+ if (obj == null) return false;
+
+ // 检查物体是否在可吸附层
+ if (((1 << obj.layer) & snapLayers) == 0) return false;
+
+ // 检查物体是否有碰撞体
+ Collider collider = obj.GetComponent();
+ if (collider == null) return false;
+
+ return true;
+ }
+
+ // 公共方法:获取所有连线
+ public List GetAllWires()
+ {
+ return new List(allWires);
+ }
+
+ // 公共方法:获取连接到特定碰撞体的所有连线
+ public List GetWiresByCollider(GameObject colliderObject)
+ {
+ List connectedWires = new List();
+
+ foreach (GameObject wire in allWires)
+ {
+ LineShowModelCylinderWireData wireData = wire?.GetComponent();
+ if (wireData != null && (wireData.startCollider == colliderObject || wireData.endCollider == colliderObject))
+ {
+ connectedWires.Add(wire);
+ }
+ }
+
+ return connectedWires;
+ }
+
+ // 公共方法:检查两个碰撞体之间是否有连线
+ public bool AreCollidersConnected(GameObject collider1, GameObject collider2)
+ {
+ foreach (GameObject wire in allWires)
+ {
+ LineShowModelCylinderWireData wireData = wire?.GetComponent();
+ if (wireData != null &&
+ ((wireData.startCollider == collider1 && wireData.endCollider == collider2) ||
+ (wireData.startCollider == collider2 && wireData.endCollider == collider1)))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ // 处理删除操作
+ void HandleDelete()
+ {
+ // 如果正在绘制连线,先取消绘制
+ if (currentState != DrawingState.Idle)
+ {
+ CancelDrawing();
+ return;
+ }
+
+ // 查找鼠标位置附近的连线
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+ RaycastHit hit;
+
+ if (Physics.Raycast(ray, out hit, Mathf.Infinity))
+ {
+ GameObject hitObject = hit.collider.gameObject;
+
+ // 检查是否点击到了连线
+ if (IsWire(hitObject))
+ {
+ DeleteWire(hitObject);
+ return;
+ }
+
+ // 检查是否是连线的子物体
+ if (hitObject.transform.parent != null)
+ {
+ GameObject parent = hitObject.transform.parent.gameObject;
+ if (IsWire(parent))
+ {
+ DeleteWire(parent);
+ return;
+ }
+ }
+ }
+
+ // 如果没有找到可删除的对象,尝试删除最后一个连线
+ DeleteLastWire();
+ }
+
+ // 检查对象是否是连线
+ bool IsWire(GameObject obj)
+ {
+ if (obj == null) return false;
+
+ // 检查是否是连线
+ if (obj.name.StartsWith("Wire_") || obj.GetComponent() != null)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ // 事件定义
+ public delegate void WireCreatedHandler(GameObject wire, GameObject startCollider, GameObject endCollider);
+ public delegate void WireDeletedHandler(GameObject wire, GameObject startCollider, GameObject endCollider);
+ public delegate void AllWiresDeletedHandler();
+
+ // 事件
+ public static event WireCreatedHandler OnWireCreated;
+ public static event WireDeletedHandler OnWireDeleted;
+ public static event AllWiresDeletedHandler OnAllWiresDeleted;
+}
+
diff --git a/Assets/Scripts/Line/LineShowModel.cs.meta b/Assets/Scripts/Line/LineShowModel.cs.meta
new file mode 100644
index 0000000..7ab0bbc
--- /dev/null
+++ b/Assets/Scripts/Line/LineShowModel.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 239a36da09e63484eb88aed17b731dea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Line/LineShowModelCylinderWireData.cs b/Assets/Scripts/Line/LineShowModelCylinderWireData.cs
new file mode 100644
index 0000000..16d90a5
--- /dev/null
+++ b/Assets/Scripts/Line/LineShowModelCylinderWireData.cs
@@ -0,0 +1,13 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+// 圆柱体连线数据组件
+public class LineShowModelCylinderWireData : MonoBehaviour
+{
+ public Vector3 startPoint;
+ public Vector3 endPoint;
+ public GameObject startCollider;
+ public GameObject endCollider;
+ public float wireDiameter;
+ public System.DateTime creationTime;
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Line/LineShowModelCylinderWireData.cs.meta b/Assets/Scripts/Line/LineShowModelCylinderWireData.cs.meta
new file mode 100644
index 0000000..ac918fe
--- /dev/null
+++ b/Assets/Scripts/Line/LineShowModelCylinderWireData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c0143d1e349fc9a42a74001b6be63db8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: