提交极限判断
This commit is contained in:
748
Assets/LineRoot.prefab
Normal file
748
Assets/LineRoot.prefab
Normal file
@@ -0,0 +1,748 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &91479766348803601
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2258652351737169479}
|
||||
- component: {fileID: 8145809924423166305}
|
||||
- component: {fileID: 1467947541314689392}
|
||||
- component: {fileID: 5226597904622542923}
|
||||
- component: {fileID: 3311555237946392294}
|
||||
m_Layer: 0
|
||||
m_Name: LineRoot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2258652351737169479
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 91479766348803601}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0, y: 1, z: -0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6723299894093031200}
|
||||
- {fileID: 6351458799753807016}
|
||||
- {fileID: 8897553716173025276}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8145809924423166305
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 91479766348803601}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 77af114bb80f3904a83cdeaacd5af508, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineTestController
|
||||
solver: {fileID: 1467947541314689392}
|
||||
initialFirstSegmentLength: 1.2
|
||||
minFirstSegmentLength: 0.1
|
||||
maxFirstSegmentLength: 50
|
||||
lineAdjustSpeed: 0.5
|
||||
extendKey: 273
|
||||
retractKey: 274
|
||||
--- !u!114 &1467947541314689392
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 91479766348803601}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dcd0fd8d96f994444b2d8663af6b915d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineSolver
|
||||
anchorTransform: {fileID: 0}
|
||||
logicalNodes:
|
||||
- {fileID: 3579389174949393522}
|
||||
- {fileID: 2510386467436740679}
|
||||
- {fileID: 4233893683771612084}
|
||||
lineRenderer: {fileID: 3311555237946392294}
|
||||
firstSegmentLength: 1.2
|
||||
firstSegmentStep: 0.1
|
||||
jointSolverIterations: 12
|
||||
jointProjectionDistance: 0.02
|
||||
jointProjectionAngle: 1
|
||||
lengthLimitTolerance: 0.02
|
||||
autoBuildOnStart: 1
|
||||
--- !u!120 &5226597904622542923
|
||||
LineRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 91479766348803601}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 0
|
||||
m_LightProbeUsage: 0
|
||||
m_ReflectionProbeUsage: 0
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Positions:
|
||||
- {x: 0, y: 2.012, z: 0}
|
||||
- {x: 1.10369775e-13, y: 1.9120001, z: -9.238828e-14}
|
||||
- {x: 2.2073923e-13, y: 1.812, z: -1.8477624e-13}
|
||||
- {x: 3.3111009e-13, y: 1.7120001, z: -2.7716544e-13}
|
||||
- {x: 4.4147954e-13, y: 1.6120001, z: -3.6955335e-13}
|
||||
- {x: 5.518494e-13, y: 1.5120001, z: -4.619417e-13}
|
||||
- {x: 6.622193e-13, y: 1.4120001, z: -5.5433e-13}
|
||||
- {x: 7.7258924e-13, y: 1.312, z: -6.467184e-13}
|
||||
- {x: 8.829591e-13, y: 1.212, z: -7.3910675e-13}
|
||||
- {x: 9.93329e-13, y: 1.112, z: -8.314948e-13}
|
||||
- {x: 1.1036988e-12, y: 1.0120001, z: -9.238834e-13}
|
||||
- {x: 1.2140688e-12, y: 0.9120001, z: -1.0162718e-12}
|
||||
- {x: 1.3244386e-12, y: 0.8120001, z: -1.10866e-12}
|
||||
- {x: 5.60398e-13, y: 0.62396073, z: -7.782542e-13}
|
||||
- {x: -2.0364301e-13, y: 0.43592137, z: -4.478483e-13}
|
||||
- {x: -8.808423e-13, y: 0.26925468, z: -1.5499673e-13}
|
||||
m_Parameters:
|
||||
serializedVersion: 3
|
||||
widthMultiplier: 1
|
||||
widthCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0.002
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
colorGradient:
|
||||
serializedVersion: 2
|
||||
key0: {r: 1, g: 1, b: 1, a: 1}
|
||||
key1: {r: 1, g: 1, b: 1, a: 1}
|
||||
key2: {r: 0, g: 0, b: 0, a: 0}
|
||||
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||
key5: {r: 0, g: 0, b: 0, a: 0}
|
||||
key6: {r: 0, g: 0, b: 0, a: 0}
|
||||
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||
ctime0: 0
|
||||
ctime1: 65535
|
||||
ctime2: 0
|
||||
ctime3: 0
|
||||
ctime4: 0
|
||||
ctime5: 0
|
||||
ctime6: 0
|
||||
ctime7: 0
|
||||
atime0: 0
|
||||
atime1: 65535
|
||||
atime2: 0
|
||||
atime3: 0
|
||||
atime4: 0
|
||||
atime5: 0
|
||||
atime6: 0
|
||||
atime7: 0
|
||||
m_Mode: 0
|
||||
m_ColorSpace: -1
|
||||
m_NumColorKeys: 2
|
||||
m_NumAlphaKeys: 2
|
||||
numCornerVertices: 0
|
||||
numCapVertices: 0
|
||||
alignment: 0
|
||||
textureMode: 0
|
||||
textureScale: {x: 1, y: 1}
|
||||
shadowBias: 0.5
|
||||
generateLightingData: 0
|
||||
m_UseWorldSpace: 1
|
||||
m_Loop: 0
|
||||
m_ApplyActiveColorSpace: 1
|
||||
--- !u!114 &3311555237946392294
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 91479766348803601}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 827786ffede4e7b4781c522e8a4ba9d0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineRenderer
|
||||
solver: {fileID: 1467947541314689392}
|
||||
lineRenderer: {fileID: 5226597904622542923}
|
||||
solverIterations: 8
|
||||
damping: 0.98
|
||||
gravityScale: 1
|
||||
simulationStep: 0.0166667
|
||||
maxDeltaTime: 0.0333333
|
||||
constrainToWaterSurface: 1
|
||||
waterSurfaceTransform: {fileID: 0}
|
||||
waterSurfaceHeight: 0.01
|
||||
ignoreHeadNodeCount: 1
|
||||
ignoreTailNodeCount: 1
|
||||
waterSurfaceFollowSpeed: 12
|
||||
maxSubStepsPerFrame: 2
|
||||
sleepVelocityThreshold: 0.001
|
||||
sleepDistanceThreshold: 0.002
|
||||
stableFramesBeforeSleep: 4
|
||||
wakeDistanceThreshold: 0.001
|
||||
tautSegmentThreshold: 0.002
|
||||
tautTransitionRange: 0.03
|
||||
smoothCorners: 1
|
||||
minCornerAngle: 12
|
||||
maxCornerSmoothDistance: 0.03
|
||||
cornerSmoothSubdivisions: 3
|
||||
drawDebugSamples: 0
|
||||
debugLogicalSampleColor: {r: 0, g: 1, b: 1, a: 1}
|
||||
debugVirtualSampleColor: {r: 1, g: 0.55, b: 0.15, a: 1}
|
||||
debugLogicalSampleRadius: 0.018
|
||||
debugVirtualSampleRadius: 0.012
|
||||
--- !u!1 &557589608090734031
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6723299894093031200}
|
||||
- component: {fileID: 3579389174949393522}
|
||||
- component: {fileID: 5723695353297987443}
|
||||
m_Layer: 0
|
||||
m_Name: Start
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6723299894093031200
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 557589608090734031}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.0120001, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2258652351737169479}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &3579389174949393522
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 557589608090734031}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 610df5569209e4b4997cb2dbf3b94cdc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineNode
|
||||
nodeType: 0
|
||||
body: {fileID: 5723695353297987443}
|
||||
interaction: {fileID: 0}
|
||||
segmentLengthToNext: 0.5
|
||||
fixedVirtualNodesToNext: 2
|
||||
runtimeVirtualNode: 0
|
||||
runtimeChainIndex: -1
|
||||
drawDebugGizmo: 1
|
||||
debugGizmoRadius: 0.03
|
||||
logicalNodeColor: {r: 0.2, g: 0.9, b: 0.2, a: 1}
|
||||
virtualNodeColor: {r: 1, g: 0.6, b: 0.1, a: 1}
|
||||
--- !u!54 &5723695353297987443
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 557589608090734031}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 1
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 2
|
||||
--- !u!1 &2934937872823224413
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8897553716173025276}
|
||||
- component: {fileID: 5892147773343321515}
|
||||
- component: {fileID: 4233893683771612084}
|
||||
- component: {fileID: 8408021804090298851}
|
||||
- component: {fileID: 3783315171019821957}
|
||||
m_Layer: 0
|
||||
m_Name: End
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8897553716173025276
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2934937872823224413}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.00006560718, y: -0.0000073850256, z: -0.0000878417, w: 1}
|
||||
m_LocalPosition: {x: -8.808423e-13, y: -0.7307453, z: -1.5499673e-13}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2258652351737169479}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &5892147773343321515
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2934937872823224413}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 1
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 2
|
||||
--- !u!114 &4233893683771612084
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2934937872823224413}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 610df5569209e4b4997cb2dbf3b94cdc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineNode
|
||||
nodeType: 3
|
||||
body: {fileID: 5892147773343321515}
|
||||
interaction: {fileID: 0}
|
||||
segmentLengthToNext: 0.5
|
||||
fixedVirtualNodesToNext: 2
|
||||
runtimeVirtualNode: 0
|
||||
runtimeChainIndex: -1
|
||||
drawDebugGizmo: 1
|
||||
debugGizmoRadius: 0.03
|
||||
logicalNodeColor: {r: 0.2, g: 0.9, b: 0.2, a: 1}
|
||||
virtualNodeColor: {r: 1, g: 0.6, b: 0.1, a: 1}
|
||||
--- !u!65 &8408021804090298851
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2934937872823224413}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!153 &3783315171019821957
|
||||
ConfigurableJoint:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2934937872823224413}
|
||||
serializedVersion: 4
|
||||
m_ConnectedBody: {fileID: 1821920303142153024}
|
||||
m_ConnectedArticulationBody: {fileID: 0}
|
||||
m_Anchor: {x: 0, y: 0, z: 0}
|
||||
m_Axis: {x: 1, y: 0, z: 0}
|
||||
m_AutoConfigureConnectedAnchor: 1
|
||||
m_ConnectedAnchor: {x: 0, y: 0, z: 0}
|
||||
m_SecondaryAxis: {x: 0, y: 1, z: 0}
|
||||
m_XMotion: 1
|
||||
m_YMotion: 1
|
||||
m_ZMotion: 1
|
||||
m_AngularXMotion: 2
|
||||
m_AngularYMotion: 2
|
||||
m_AngularZMotion: 2
|
||||
m_LinearLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LinearLimit:
|
||||
limit: 0.5
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularXLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LowAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_HighAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularYZLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_AngularYLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularZLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_TargetPosition: {x: 0, y: 0, z: 0}
|
||||
m_TargetVelocity: {x: 0, y: 0, z: 0}
|
||||
m_XDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_YDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_TargetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_TargetAngularVelocity: {x: 0, y: 0, z: 0}
|
||||
m_RotationDriveMode: 0
|
||||
m_AngularXDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_AngularYZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_SlerpDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ProjectionMode: 1
|
||||
m_ProjectionDistance: 0.02
|
||||
m_ProjectionAngle: 1
|
||||
m_ConfiguredInWorldSpace: 0
|
||||
m_SwapBodies: 0
|
||||
m_BreakForce: Infinity
|
||||
m_BreakTorque: Infinity
|
||||
m_EnableCollision: 0
|
||||
m_EnablePreprocessing: 1
|
||||
m_MassScale: 1
|
||||
m_ConnectedMassScale: 1
|
||||
--- !u!1 &8846185197365154463
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6351458799753807016}
|
||||
- component: {fileID: 1821920303142153024}
|
||||
- component: {fileID: 2510386467436740679}
|
||||
- component: {fileID: 6269782168754981410}
|
||||
- component: {fileID: 8935316774750517628}
|
||||
m_Layer: 0
|
||||
m_Name: Float
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6351458799753807016
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846185197365154463}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.000016194257, y: -0.00000094081116, z: -0.0000045387405, w: 1}
|
||||
m_LocalPosition: {x: 1.3244386e-12, y: -0.1879999, z: -1.10866e-12}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2258652351737169479}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &1821920303142153024
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846185197365154463}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 11
|
||||
m_AngularDamping: 11111
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 1
|
||||
--- !u!114 &2510386467436740679
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846185197365154463}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 610df5569209e4b4997cb2dbf3b94cdc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::F2RopeLine2.FishingLine.FishingLineNode
|
||||
nodeType: 1
|
||||
body: {fileID: 1821920303142153024}
|
||||
interaction: {fileID: 0}
|
||||
segmentLengthToNext: 0.5
|
||||
fixedVirtualNodesToNext: 2
|
||||
runtimeVirtualNode: 0
|
||||
runtimeChainIndex: -1
|
||||
drawDebugGizmo: 1
|
||||
debugGizmoRadius: 0.03
|
||||
logicalNodeColor: {r: 0.2, g: 0.9, b: 0.2, a: 1}
|
||||
virtualNodeColor: {r: 1, g: 0.6, b: 0.1, a: 1}
|
||||
--- !u!65 &6269782168754981410
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846185197365154463}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!153 &8935316774750517628
|
||||
ConfigurableJoint:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846185197365154463}
|
||||
serializedVersion: 4
|
||||
m_ConnectedBody: {fileID: 5723695353297987443}
|
||||
m_ConnectedArticulationBody: {fileID: 0}
|
||||
m_Anchor: {x: 0, y: 0, z: 0}
|
||||
m_Axis: {x: 1, y: 0, z: 0}
|
||||
m_AutoConfigureConnectedAnchor: 1
|
||||
m_ConnectedAnchor: {x: 0, y: 0, z: 0}
|
||||
m_SecondaryAxis: {x: 0, y: 1, z: 0}
|
||||
m_XMotion: 1
|
||||
m_YMotion: 1
|
||||
m_ZMotion: 1
|
||||
m_AngularXMotion: 2
|
||||
m_AngularYMotion: 2
|
||||
m_AngularZMotion: 2
|
||||
m_LinearLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LinearLimit:
|
||||
limit: 1.2
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularXLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LowAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_HighAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularYZLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_AngularYLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularZLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_TargetPosition: {x: 0, y: 0, z: 0}
|
||||
m_TargetVelocity: {x: 0, y: 0, z: 0}
|
||||
m_XDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_YDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_TargetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_TargetAngularVelocity: {x: 0, y: 0, z: 0}
|
||||
m_RotationDriveMode: 0
|
||||
m_AngularXDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_AngularYZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_SlerpDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ProjectionMode: 0
|
||||
m_ProjectionDistance: 0
|
||||
m_ProjectionAngle: 1
|
||||
m_ConfiguredInWorldSpace: 0
|
||||
m_SwapBodies: 0
|
||||
m_BreakForce: Infinity
|
||||
m_BreakTorque: Infinity
|
||||
m_EnableCollision: 0
|
||||
m_EnablePreprocessing: 0
|
||||
m_MassScale: 1
|
||||
m_ConnectedMassScale: 1
|
||||
7
Assets/LineRoot.prefab.meta
Normal file
7
Assets/LineRoot.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da77dabd97d06da46a6c7c954a1f7b46
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -119,6 +119,11 @@ NavMeshSettings:
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!4 &237607922 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6723299894093031200, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
m_PrefabInstance: {fileID: 1013111638}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &330585543
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -383,6 +388,361 @@ MonoBehaviour:
|
||||
m_ShadowLayerMask: 1
|
||||
m_RenderingLayers: 1
|
||||
m_ShadowRenderingLayers: 1
|
||||
--- !u!1 &423389168
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 423389169}
|
||||
- component: {fileID: 423389172}
|
||||
- component: {fileID: 423389171}
|
||||
- component: {fileID: 423389170}
|
||||
m_Layer: 0
|
||||
m_Name: Cube
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &423389169
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 423389168}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 237607922}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &423389170
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 423389168}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &423389171
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 423389168}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &423389172
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 423389168}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &491872094
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 491872100}
|
||||
- component: {fileID: 491872099}
|
||||
- component: {fileID: 491872098}
|
||||
- component: {fileID: 491872097}
|
||||
- component: {fileID: 491872096}
|
||||
- component: {fileID: 491872095}
|
||||
m_Layer: 0
|
||||
m_Name: EndTime
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!153 &491872095
|
||||
ConfigurableJoint:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
serializedVersion: 4
|
||||
m_ConnectedBody: {fileID: 625757862}
|
||||
m_ConnectedArticulationBody: {fileID: 0}
|
||||
m_Anchor: {x: 0, y: 0.5, z: 0}
|
||||
m_Axis: {x: 1, y: 0, z: 0}
|
||||
m_AutoConfigureConnectedAnchor: 1
|
||||
m_ConnectedAnchor: {x: 0, y: 0, z: 0}
|
||||
m_SecondaryAxis: {x: 0, y: 1, z: 0}
|
||||
m_XMotion: 2
|
||||
m_YMotion: 2
|
||||
m_ZMotion: 2
|
||||
m_AngularXMotion: 2
|
||||
m_AngularYMotion: 2
|
||||
m_AngularZMotion: 2
|
||||
m_LinearLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LinearLimit:
|
||||
limit: 1
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularXLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_LowAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_HighAngularXLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularYZLimitSpring:
|
||||
spring: 0
|
||||
damper: 0
|
||||
m_AngularYLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_AngularZLimit:
|
||||
limit: 0
|
||||
bounciness: 0
|
||||
contactDistance: 0
|
||||
m_TargetPosition: {x: 0, y: 0, z: 0}
|
||||
m_TargetVelocity: {x: 0, y: 0, z: 0}
|
||||
m_XDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_YDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_TargetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_TargetAngularVelocity: {x: 0, y: 0, z: 0}
|
||||
m_RotationDriveMode: 0
|
||||
m_AngularXDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_AngularYZDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_SlerpDrive:
|
||||
serializedVersion: 4
|
||||
positionSpring: 0
|
||||
positionDamper: 0
|
||||
maximumForce: 3.4028233e+38
|
||||
useAcceleration: 0
|
||||
m_ProjectionMode: 0
|
||||
m_ProjectionDistance: 0.1
|
||||
m_ProjectionAngle: 180
|
||||
m_ConfiguredInWorldSpace: 0
|
||||
m_SwapBodies: 0
|
||||
m_BreakForce: Infinity
|
||||
m_BreakTorque: Infinity
|
||||
m_EnableCollision: 0
|
||||
m_EnablePreprocessing: 1
|
||||
m_MassScale: 1
|
||||
m_ConnectedMassScale: 1
|
||||
--- !u!54 &491872096
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!135 &491872097
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &491872098
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &491872099
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &491872100
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 491872094}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.15761, y: 0.216, z: -0.14555}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &603012223
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -444,13 +804,8 @@ MonoBehaviour:
|
||||
jointSolverIterations: 12
|
||||
jointProjectionDistance: 0.02
|
||||
jointProjectionAngle: 1
|
||||
lengthLimitTolerance: 0.02
|
||||
autoBuildOnStart: 1
|
||||
drawDebugChain: 1
|
||||
debugColor: {r: 0, g: 1, b: 1, a: 1}
|
||||
debugLengthColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||
debugNodeRadius: 0.025
|
||||
showNodeLabels: 1
|
||||
showSegmentLabels: 1
|
||||
--- !u!114 &603012226
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -482,13 +837,16 @@ MonoBehaviour:
|
||||
stableFramesBeforeSleep: 4
|
||||
wakeDistanceThreshold: 0.001
|
||||
tautSegmentThreshold: 0.002
|
||||
tautTransitionRange: 0.03
|
||||
smoothCorners: 1
|
||||
minCornerAngle: 12
|
||||
maxCornerSmoothDistance: 0.03
|
||||
cornerSmoothSubdivisions: 3
|
||||
drawDebugSamples: 0
|
||||
debugSampleColor: {r: 1, g: 0.2, b: 0.2, a: 1}
|
||||
debugSampleRadius: 0.015
|
||||
debugLogicalSampleColor: {r: 0, g: 1, b: 1, a: 1}
|
||||
debugVirtualSampleColor: {r: 1, g: 0.55, b: 0.15, a: 1}
|
||||
debugLogicalSampleRadius: 0.018
|
||||
debugVirtualSampleRadius: 0.012
|
||||
--- !u!120 &603012227
|
||||
LineRenderer:
|
||||
serializedVersion: 3
|
||||
@@ -615,9 +973,154 @@ MonoBehaviour:
|
||||
initialFirstSegmentLength: 1.2
|
||||
minFirstSegmentLength: 0.1
|
||||
maxFirstSegmentLength: 50
|
||||
lineAdjustSpeed: 1
|
||||
lineAdjustSpeed: 0.5
|
||||
extendKey: 273
|
||||
retractKey: 274
|
||||
--- !u!4 &616258654 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 6351458799753807016, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
m_PrefabInstance: {fileID: 1013111638}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &625757861
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 625757866}
|
||||
- component: {fileID: 625757865}
|
||||
- component: {fileID: 625757864}
|
||||
- component: {fileID: 625757863}
|
||||
- component: {fileID: 625757862}
|
||||
m_Layer: 0
|
||||
m_Name: TipTest
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!54 &625757862
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 625757861}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 1
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!135 &625757863
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 625757861}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &625757864
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 625757861}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &625757865
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 625757861}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &625757866
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 625757861}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.15761, y: 0.45164, z: -0.14555}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &832575517
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -667,6 +1170,203 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &915051044
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 915051045}
|
||||
- component: {fileID: 915051048}
|
||||
- component: {fileID: 915051047}
|
||||
- component: {fileID: 915051046}
|
||||
m_Layer: 0
|
||||
m_Name: Cube
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &915051045
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 915051044}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 616258654}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &915051046
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 915051044}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &915051047
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 915051044}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &915051048
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 915051044}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1001 &1013111638
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 91479766348803601, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: LineRootTest
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 91479766348803601, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0.32473
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -0.00001
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 1.00763
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2258652351737169479, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3311555237946392294, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: solver
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8145809924423166305, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 8145809924423166305, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 1467947541314689392, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 3311555237946392294, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 5226597904622542923, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 3579389174949393522, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 2510386467436740679, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
- {fileID: 4233893683771612084, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: 6723299894093031200, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 423389169}
|
||||
- targetCorrespondingSourceObject: {fileID: 6351458799753807016, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 915051045}
|
||||
- targetCorrespondingSourceObject: {fileID: 8897553716173025276, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1928973612}
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
--- !u!1 &1265290371
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -744,8 +1444,8 @@ Rigidbody:
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_ImplicitCom: 0
|
||||
m_ImplicitTensor: 0
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
@@ -770,7 +1470,7 @@ BoxCollider:
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_Size: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1470501307
|
||||
GameObject:
|
||||
@@ -837,7 +1537,7 @@ Rigidbody:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1470501307}
|
||||
serializedVersion: 5
|
||||
m_Mass: 1
|
||||
m_Mass: 0.1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
@@ -849,8 +1549,8 @@ Rigidbody:
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_ImplicitCom: 0
|
||||
m_ImplicitTensor: 0
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
@@ -875,8 +1575,13 @@ BoxCollider:
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_Size: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!4 &1480698140 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 8897553716173025276, guid: da77dabd97d06da46a6c7c954a1f7b46, type: 3}
|
||||
m_PrefabInstance: {fileID: 1013111638}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &1769698868
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -960,6 +1665,118 @@ MonoBehaviour:
|
||||
debugGizmoRadius: 0.03
|
||||
logicalNodeColor: {r: 0.2, g: 0.9, b: 0.2, a: 1}
|
||||
virtualNodeColor: {r: 1, g: 0.6, b: 0.1, a: 1}
|
||||
--- !u!1 &1928973611
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1928973612}
|
||||
- component: {fileID: 1928973615}
|
||||
- component: {fileID: 1928973614}
|
||||
- component: {fileID: 1928973613}
|
||||
m_Layer: 0
|
||||
m_Name: Cube (1)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1928973612
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1928973611}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.00008180148, y: 0.0000064459346, z: 0.00008330278, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1480698140}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &1928973613
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1928973611}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &1928973614
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1928973611}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &1928973615
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1928973611}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &1939106081
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1094,3 +1911,6 @@ SceneRoots:
|
||||
- {fileID: 2003292182}
|
||||
- {fileID: 603012224}
|
||||
- {fileID: 1939106084}
|
||||
- {fileID: 625757866}
|
||||
- {fileID: 491872100}
|
||||
- {fileID: 1013111638}
|
||||
|
||||
@@ -46,6 +46,8 @@ namespace F2RopeLine2.FishingLine
|
||||
[SerializeField] private float wakeDistanceThreshold = 0.001f;
|
||||
[Min(0f)]
|
||||
[SerializeField] private float tautSegmentThreshold = 0.002f;
|
||||
[Min(0.001f)]
|
||||
[SerializeField] private float tautTransitionRange = 0.03f;
|
||||
|
||||
[Header("Corner Smoothing")]
|
||||
[SerializeField] private bool smoothCorners = true;
|
||||
@@ -58,9 +60,12 @@ namespace F2RopeLine2.FishingLine
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool drawDebugSamples;
|
||||
[SerializeField] private Color debugSampleColor = new(1f, 0.2f, 0.2f, 1f);
|
||||
[SerializeField] private Color debugLogicalSampleColor = Color.cyan;
|
||||
[SerializeField] private Color debugVirtualSampleColor = new(1f, 0.55f, 0.15f, 1f);
|
||||
[Min(0.001f)]
|
||||
[SerializeField] private float debugSampleRadius = 0.015f;
|
||||
[SerializeField] private float debugLogicalSampleRadius = 0.018f;
|
||||
[Min(0.001f)]
|
||||
[SerializeField] private float debugVirtualSampleRadius = 0.012f;
|
||||
|
||||
private readonly List<Vector3> positions = new();
|
||||
private readonly List<Vector3> renderPositions = new();
|
||||
@@ -253,6 +258,7 @@ namespace F2RopeLine2.FishingLine
|
||||
ApplyWaterSurfaceConstraint(stepDelta);
|
||||
SolveDistanceConstraints(points, restLengths);
|
||||
StraightenTautLogicalSegments(points, restLengths);
|
||||
SolveDistanceConstraints(points, restLengths);
|
||||
PinLogicalPoints(points);
|
||||
ApplySleep();
|
||||
}
|
||||
@@ -382,19 +388,32 @@ namespace F2RopeLine2.FishingLine
|
||||
var end = positions[endIndex];
|
||||
var delta = end - start;
|
||||
var endpointDistance = delta.magnitude;
|
||||
if (endpointDistance <= 0.0001f || endpointDistance + tautSegmentThreshold < segmentRestLength)
|
||||
if (endpointDistance <= 0.0001f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var fullTautDistance = Mathf.Max(0f, segmentRestLength - tautSegmentThreshold);
|
||||
var blendStartDistance = Mathf.Max(0f, fullTautDistance - tautTransitionRange);
|
||||
if (endpointDistance < blendStartDistance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var straightenBlend = blendStartDistance >= fullTautDistance
|
||||
? 1f
|
||||
: Mathf.SmoothStep(0f, 1f, Mathf.InverseLerp(blendStartDistance, fullTautDistance, endpointDistance));
|
||||
|
||||
var direction = delta / endpointDistance;
|
||||
var accumulatedDistance = 0f;
|
||||
for (var pointIndex = startIndex + 1; pointIndex < endIndex; pointIndex++)
|
||||
{
|
||||
accumulatedDistance += restLengths[pointIndex - 1];
|
||||
var projectedPosition = start + direction * accumulatedDistance;
|
||||
positions[pointIndex] = projectedPosition;
|
||||
previousPositions[pointIndex] = projectedPosition;
|
||||
var currentPosition = positions[pointIndex];
|
||||
var blendedPosition = Vector3.Lerp(currentPosition, projectedPosition, straightenBlend);
|
||||
positions[pointIndex] = blendedPosition;
|
||||
previousPositions[pointIndex] = Vector3.Lerp(previousPositions[pointIndex], blendedPosition, straightenBlend);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -681,10 +700,17 @@ namespace F2RopeLine2.FishingLine
|
||||
return;
|
||||
}
|
||||
|
||||
Gizmos.color = debugSampleColor;
|
||||
for (var i = 0; i < positions.Count; i++)
|
||||
{
|
||||
Gizmos.DrawSphere(positions[i], debugSampleRadius);
|
||||
var isLogicalPoint = solver != null
|
||||
&& solver.ChainPoints != null
|
||||
&& i < solver.ChainPoints.Count
|
||||
&& solver.ChainPoints[i].IsLogical;
|
||||
|
||||
Gizmos.color = isLogicalPoint ? debugLogicalSampleColor : debugVirtualSampleColor;
|
||||
Gizmos.DrawSphere(
|
||||
positions[i],
|
||||
isLogicalPoint ? debugLogicalSampleRadius : debugVirtualSampleRadius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,16 +53,14 @@ namespace F2RopeLine2.FishingLine
|
||||
[SerializeField] private float jointProjectionDistance = 0.02f;
|
||||
[SerializeField] private float jointProjectionAngle = 1f;
|
||||
|
||||
[Header("Limit Detection")]
|
||||
[Min(0f)]
|
||||
// 极限判定的长度容差,允许链路在总长或单段长度上存在少量误差。
|
||||
[SerializeField] private float lengthLimitTolerance = 0.02f;
|
||||
|
||||
[Header("Runtime Debug")]
|
||||
[SerializeField] private bool autoBuildOnStart = true;
|
||||
[SerializeField] private bool drawDebugChain = true;
|
||||
[SerializeField] private Color debugColor = Color.cyan;
|
||||
[SerializeField] private Color debugLengthColor = Color.yellow;
|
||||
[Min(0.001f)]
|
||||
[SerializeField] private float debugNodeRadius = 0.025f;
|
||||
[SerializeField] private bool showNodeLabels = true;
|
||||
[SerializeField] private bool showSegmentLabels = true;
|
||||
|
||||
|
||||
private readonly List<ChainPoint> chainPoints = new();
|
||||
private readonly List<float> restLengths = new();
|
||||
private readonly List<int> pinnedIndices = new();
|
||||
@@ -81,8 +79,61 @@ namespace F2RopeLine2.FishingLine
|
||||
|
||||
public IReadOnlyList<int> PinnedIndices => pinnedIndices;
|
||||
|
||||
/// <summary>
|
||||
/// 当前配置的逻辑节点只读列表。
|
||||
/// 外部可读取节点顺序,但不应直接修改数组内容。
|
||||
/// </summary>
|
||||
public IReadOnlyList<FishingLineNode> LogicalNodes => logicalNodes;
|
||||
|
||||
/// <summary>
|
||||
/// 当前整条鱼线的配置总长度,等于所有段的静止长度之和。
|
||||
/// </summary>
|
||||
public float TotalLineLength { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前逻辑节点链路的实际总长度,按相邻逻辑节点的实际距离累加。
|
||||
/// </summary>
|
||||
public float CurrentLogicalChainLength { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前首尾逻辑节点之间的直线距离,仅作为端点跨度观察值。
|
||||
/// </summary>
|
||||
public float CurrentEndpointDistance { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前逻辑链总长度超出配置总长度的部分,小于等于零时记为 0。
|
||||
/// </summary>
|
||||
public float CurrentStretchLength { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前所有逻辑段中,单段超出配置长度的最大值。
|
||||
/// </summary>
|
||||
public float MaxSegmentStretchLength { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前超限最明显的逻辑段索引;为 -1 表示没有段处于超限。
|
||||
/// </summary>
|
||||
public int MaxOverstretchedSegmentIndex { get; private set; } = -1;
|
||||
|
||||
/// <summary>
|
||||
/// 当前受拉比例。
|
||||
/// 该值取“单段实际长度 / 单段配置长度”和“整链实际长度 / 整链配置长度”中的最大值。
|
||||
/// 约等于 1 表示接近拉直,大于 1 表示已经出现超限拉伸。
|
||||
/// </summary>
|
||||
public float CurrentTensionRatio { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前是否处于极限状态。
|
||||
/// 只要整链超出总长度容差,或任一逻辑段超出单段容差,即认为到达极限。
|
||||
/// </summary>
|
||||
public bool IsAtLimit { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前连续处于极限状态的累计时间,退出极限时会重置为 0。
|
||||
/// 可用于上层决定是否触发切线。
|
||||
/// </summary>
|
||||
public float LimitStateTime { get; private set; }
|
||||
|
||||
public int LogicalNodeCount => logicalNodes?.Length ?? 0;
|
||||
|
||||
public int RuntimeVirtualNodeCount => runtimeVirtualPointCount;
|
||||
@@ -115,6 +166,7 @@ namespace F2RopeLine2.FishingLine
|
||||
{
|
||||
if (logicalNodes == null || logicalNodes.Length == 0)
|
||||
{
|
||||
ResetLimitState();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -124,6 +176,8 @@ namespace F2RopeLine2.FishingLine
|
||||
{
|
||||
RebuildRuntimeChain();
|
||||
}
|
||||
|
||||
EvaluateLimitState(Time.fixedDeltaTime);
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
@@ -146,17 +200,26 @@ namespace F2RopeLine2.FishingLine
|
||||
firstSegmentLength = Mathf.Max(0f, firstSegmentLength);
|
||||
firstSegmentStep = Mathf.Max(0.001f, firstSegmentStep);
|
||||
jointSolverIterations = Mathf.Max(1, jointSolverIterations);
|
||||
lengthLimitTolerance = Mathf.Max(0f, lengthLimitTolerance);
|
||||
chainDirty = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按当前配置重建整条鱼线的运行时链路,并立即刷新极限状态。
|
||||
/// </summary>
|
||||
[ContextMenu("Build Line")]
|
||||
public void BuildLine()
|
||||
{
|
||||
ConfigureStartNode();
|
||||
ConfigureLogicalJoints();
|
||||
RebuildRuntimeChain();
|
||||
EvaluateLimitState(0f);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置指定逻辑段的配置长度。
|
||||
/// segmentIndex 为 0 时表示第一段;大于 0 时表示对应逻辑节点到下一个逻辑节点的线长。
|
||||
/// </summary>
|
||||
public void SetLenght(float length, int segmentIndex = 0)
|
||||
{
|
||||
var clamped = Mathf.Max(0f, length);
|
||||
@@ -190,11 +253,60 @@ namespace F2RopeLine2.FishingLine
|
||||
chainDirty = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 立即按当前配置重建鱼线。
|
||||
/// </summary>
|
||||
public void RebuildNow()
|
||||
{
|
||||
BuildLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定顺序索引的逻辑节点。
|
||||
/// 索引基于 logicalNodes 配置顺序;超出范围或节点为空时返回 null。
|
||||
/// </summary>
|
||||
public FishingLineNode GetLogicalNode(int logicalIndex)
|
||||
{
|
||||
if (logicalNodes == null || logicalIndex < 0 || logicalIndex >= logicalNodes.Length)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return logicalNodes[logicalIndex];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试获取指定顺序索引的逻辑节点。
|
||||
/// 获取失败时返回 false,并将 node 置为 null。
|
||||
/// </summary>
|
||||
public bool TryGetLogicalNode(int logicalIndex, out FishingLineNode node)
|
||||
{
|
||||
node = GetLogicalNode(logicalIndex);
|
||||
return node != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前起点逻辑节点。
|
||||
/// 会返回配置顺序中第一个非空节点。
|
||||
/// </summary>
|
||||
public FishingLineNode GetStartNode()
|
||||
{
|
||||
return FindFirstValidLogicalNode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前终点逻辑节点。
|
||||
/// 会返回配置顺序中最后一个非空节点。
|
||||
/// </summary>
|
||||
public FishingLineNode GetEndNode()
|
||||
{
|
||||
return FindLastValidLogicalNode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前运行时链路中相邻采样点的实际距离。
|
||||
/// 这里的采样点包含逻辑节点和虚拟节点。
|
||||
/// </summary>
|
||||
public float GetActualDistance(int segmentIndex)
|
||||
{
|
||||
if (segmentIndex < 0 || segmentIndex >= chainPoints.Count - 1)
|
||||
@@ -205,6 +317,9 @@ namespace F2RopeLine2.FishingLine
|
||||
return Vector3.Distance(chainPoints[segmentIndex].Position, chainPoints[segmentIndex + 1].Position);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回当前鱼线运行时调试摘要,包含链路结构、长度和极限状态信息。
|
||||
/// </summary>
|
||||
public string GetRuntimeDebugSummary()
|
||||
{
|
||||
var builder = new StringBuilder(512);
|
||||
@@ -218,7 +333,17 @@ namespace F2RopeLine2.FishingLine
|
||||
.Append(OrderedNodeCount)
|
||||
.Append(" total:")
|
||||
.Append(TotalLineLength.ToString("F2"))
|
||||
.Append("m");
|
||||
.Append("m")
|
||||
.Append(" chain:")
|
||||
.Append(CurrentLogicalChainLength.ToString("F2"))
|
||||
.Append("m")
|
||||
.Append(" tension:")
|
||||
.Append(CurrentTensionRatio.ToString("F3"))
|
||||
.Append(" limit:")
|
||||
.Append(IsAtLimit ? "yes" : "no")
|
||||
.Append(" limitTime:")
|
||||
.Append(LimitStateTime.ToString("F2"))
|
||||
.Append("s");
|
||||
|
||||
for (var i = 0; i < chainPoints.Count; i++)
|
||||
{
|
||||
@@ -329,11 +454,116 @@ namespace F2RopeLine2.FishingLine
|
||||
|
||||
if (startNode.Body != null)
|
||||
{
|
||||
startNode.Body.linearVelocity = Vector3.zero;
|
||||
startNode.Body.angularVelocity = Vector3.zero;
|
||||
if (!startNode.Body.isKinematic)
|
||||
{
|
||||
startNode.Body.linearVelocity = Vector3.zero;
|
||||
startNode.Body.angularVelocity = Vector3.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void EvaluateLimitState(float deltaTime)
|
||||
{
|
||||
CurrentLogicalChainLength = 0f;
|
||||
CurrentEndpointDistance = 0f;
|
||||
CurrentStretchLength = 0f;
|
||||
MaxSegmentStretchLength = 0f;
|
||||
MaxOverstretchedSegmentIndex = -1;
|
||||
CurrentTensionRatio = 0f;
|
||||
|
||||
if (logicalNodes == null || logicalNodes.Length < 2)
|
||||
{
|
||||
SetLimitState(false, deltaTime);
|
||||
return;
|
||||
}
|
||||
|
||||
FishingLineNode firstNode = null;
|
||||
FishingLineNode lastNode = null;
|
||||
|
||||
for (var segmentIndex = 0; segmentIndex < logicalNodes.Length; segmentIndex++)
|
||||
{
|
||||
var node = logicalNodes[segmentIndex];
|
||||
if (node == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
firstNode ??= node;
|
||||
lastNode = node;
|
||||
|
||||
if (segmentIndex >= logicalNodes.Length - 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var nextNode = logicalNodes[segmentIndex + 1];
|
||||
if (nextNode == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var actualDistance = Vector3.Distance(node.Position, nextNode.Position);
|
||||
var configuredLength = GetSegmentLength(segmentIndex);
|
||||
CurrentLogicalChainLength += actualDistance;
|
||||
|
||||
if (configuredLength > 0.0001f)
|
||||
{
|
||||
CurrentTensionRatio = Mathf.Max(CurrentTensionRatio, actualDistance / configuredLength);
|
||||
}
|
||||
|
||||
var segmentStretchLength = Mathf.Max(0f, actualDistance - configuredLength);
|
||||
if (segmentStretchLength > MaxSegmentStretchLength)
|
||||
{
|
||||
MaxSegmentStretchLength = segmentStretchLength;
|
||||
MaxOverstretchedSegmentIndex = segmentStretchLength > 0f ? segmentIndex : -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstNode != null && lastNode != null && !ReferenceEquals(firstNode, lastNode))
|
||||
{
|
||||
CurrentEndpointDistance = Vector3.Distance(firstNode.Position, lastNode.Position);
|
||||
}
|
||||
|
||||
if (TotalLineLength > 0.0001f)
|
||||
{
|
||||
CurrentStretchLength = Mathf.Max(0f, CurrentLogicalChainLength - TotalLineLength);
|
||||
CurrentTensionRatio = Mathf.Max(CurrentTensionRatio, CurrentLogicalChainLength / TotalLineLength);
|
||||
}
|
||||
else if (CurrentLogicalChainLength > 0f)
|
||||
{
|
||||
CurrentStretchLength = CurrentLogicalChainLength;
|
||||
CurrentTensionRatio = Mathf.Max(CurrentTensionRatio, 1f);
|
||||
}
|
||||
|
||||
var exceedsTotalLength = CurrentStretchLength > lengthLimitTolerance;
|
||||
var exceedsSegmentLength = MaxSegmentStretchLength > lengthLimitTolerance;
|
||||
SetLimitState(exceedsTotalLength || exceedsSegmentLength, deltaTime);
|
||||
}
|
||||
|
||||
private void SetLimitState(bool isAtLimit, float deltaTime)
|
||||
{
|
||||
IsAtLimit = isAtLimit;
|
||||
if (IsAtLimit)
|
||||
{
|
||||
LimitStateTime += Mathf.Max(0f, deltaTime);
|
||||
return;
|
||||
}
|
||||
|
||||
LimitStateTime = 0f;
|
||||
}
|
||||
|
||||
private void ResetLimitState()
|
||||
{
|
||||
CurrentLogicalChainLength = 0f;
|
||||
CurrentEndpointDistance = 0f;
|
||||
CurrentStretchLength = 0f;
|
||||
MaxSegmentStretchLength = 0f;
|
||||
MaxOverstretchedSegmentIndex = -1;
|
||||
CurrentTensionRatio = 0f;
|
||||
IsAtLimit = false;
|
||||
LimitStateTime = 0f;
|
||||
}
|
||||
|
||||
private void RebuildRuntimeChain()
|
||||
{
|
||||
chainPoints.Clear();
|
||||
@@ -507,14 +737,7 @@ namespace F2RopeLine2.FishingLine
|
||||
|
||||
return divisibleGaps;
|
||||
}
|
||||
|
||||
private void UpdateJointLimitsFromConfig()
|
||||
{
|
||||
for (var i = 1; i < logicalNodes.Length; i++)
|
||||
{
|
||||
UpdateJointLimit(i, GetSegmentLength(i - 1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void UpdateJointLimit(int logicalNodeIndex, float limitValue)
|
||||
{
|
||||
@@ -556,6 +779,42 @@ namespace F2RopeLine2.FishingLine
|
||||
return sourceNode != null ? sourceNode.SegmentLengthToNext : 0f;
|
||||
}
|
||||
|
||||
private FishingLineNode FindFirstValidLogicalNode()
|
||||
{
|
||||
if (logicalNodes == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = 0; i < logicalNodes.Length; i++)
|
||||
{
|
||||
if (logicalNodes[i] != null)
|
||||
{
|
||||
return logicalNodes[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private FishingLineNode FindLastValidLogicalNode()
|
||||
{
|
||||
if (logicalNodes == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = logicalNodes.Length - 1; i >= 0; i--)
|
||||
{
|
||||
if (logicalNodes[i] != null)
|
||||
{
|
||||
return logicalNodes[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static long BuildLogicalPointKey(int logicalIndex)
|
||||
{
|
||||
return (1L << 62) | (uint)logicalIndex;
|
||||
@@ -565,55 +824,5 @@ namespace F2RopeLine2.FishingLine
|
||||
{
|
||||
return ((long)(segmentIndex + 1) << 32) | (uint)stableIndex;
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
if (!drawDebugChain || chainPoints.Count < 2 || restLengths.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Gizmos.color = debugColor;
|
||||
for (var i = 0; i < chainPoints.Count - 1; i++)
|
||||
{
|
||||
var from = chainPoints[i].Position;
|
||||
var to = chainPoints[i + 1].Position;
|
||||
Gizmos.DrawLine(from, to);
|
||||
Gizmos.DrawSphere(from, debugNodeRadius);
|
||||
|
||||
var midPoint = (from + to) * 0.5f;
|
||||
var actualLength = Vector3.Distance(from, to);
|
||||
var restLength = i < restLengths.Count ? restLengths[i] : 0f;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (showSegmentLabels)
|
||||
{
|
||||
UnityEditor.Handles.color = debugLengthColor;
|
||||
UnityEditor.Handles.Label(
|
||||
midPoint,
|
||||
$"S{i} rest:{restLength:F2} act:{actualLength:F2}");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
Gizmos.DrawSphere(chainPoints[^1].Position, debugNodeRadius);
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (!showNodeLabels)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < chainPoints.Count; i++)
|
||||
{
|
||||
var point = chainPoints[i];
|
||||
var pinned = pinnedIndices.Contains(i) ? " Pinned" : string.Empty;
|
||||
UnityEditor.Handles.color = debugColor;
|
||||
UnityEditor.Handles.Label(
|
||||
point.Position + Vector3.up * 0.04f,
|
||||
$"#{i} {point.GetDebugName()}{pinned}");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,21 +4,17 @@ namespace F2RopeLine2.FishingLine
|
||||
{
|
||||
public class FishingLineTestController : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private FishingLineSolver solver;
|
||||
[Header("References")] [SerializeField]
|
||||
private FishingLineSolver solver;
|
||||
|
||||
[Header("Length Test")]
|
||||
[Min(0f)]
|
||||
[SerializeField] private float initialFirstSegmentLength = 1.2f;
|
||||
[Min(0f)]
|
||||
[SerializeField] private float minFirstSegmentLength = 0.1f;
|
||||
[Min(0f)]
|
||||
[SerializeField] private float maxFirstSegmentLength = 5f;
|
||||
[Min(0f)]
|
||||
[SerializeField] private float lineAdjustSpeed = 1f;
|
||||
[Header("Length Test")] [Min(0f)] [SerializeField]
|
||||
private float initialFirstSegmentLength = 1.2f;
|
||||
|
||||
[Header("Input")]
|
||||
[SerializeField] private KeyCode extendKey = KeyCode.UpArrow;
|
||||
[Min(0f)] [SerializeField] private float minFirstSegmentLength = 0.1f;
|
||||
[Min(0f)] [SerializeField] private float maxFirstSegmentLength = 5f;
|
||||
[Min(0f)] [SerializeField] private float lineAdjustSpeed = 1f;
|
||||
|
||||
[Header("Input")] [SerializeField] private KeyCode extendKey = KeyCode.UpArrow;
|
||||
[SerializeField] private KeyCode retractKey = KeyCode.DownArrow;
|
||||
|
||||
private float targetFirstSegmentLength;
|
||||
@@ -38,7 +34,8 @@ namespace F2RopeLine2.FishingLine
|
||||
return;
|
||||
}
|
||||
|
||||
targetFirstSegmentLength = Mathf.Clamp(initialFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
targetFirstSegmentLength =
|
||||
Mathf.Clamp(initialFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
solver.SetLenght(targetFirstSegmentLength);
|
||||
solver.BuildLine();
|
||||
}
|
||||
@@ -64,10 +61,26 @@ namespace F2RopeLine2.FishingLine
|
||||
if (!Mathf.Approximately(input, 0f))
|
||||
{
|
||||
targetFirstSegmentLength += input * lineAdjustSpeed * Time.deltaTime;
|
||||
targetFirstSegmentLength = Mathf.Clamp(targetFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
targetFirstSegmentLength =
|
||||
Mathf.Clamp(targetFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
solver.SetLenght(targetFirstSegmentLength);
|
||||
}
|
||||
|
||||
if (solver.IsAtLimit)
|
||||
{
|
||||
if (solver.CurrentStretchLength > 0.04)
|
||||
Debug.LogError($"CurrentStretchLength={solver.CurrentStretchLength}");
|
||||
if (solver.CurrentStretchLength > 0.1 && solver.LimitStateTime > 2f)
|
||||
{
|
||||
Debug.LogError(
|
||||
$"当前拉力达到极限,切线,极限时间={solver.LimitStateTime} CurrentStretchLength={solver.CurrentStretchLength} CurrentTensionRatio={solver.CurrentTensionRatio}");
|
||||
var endNode = solver.GetEndNode();
|
||||
if (endNode != null)
|
||||
{
|
||||
endNode.Body.isKinematic = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user