增加测试地形

This commit is contained in:
2026-04-06 23:02:52 +08:00
parent 3bf4397438
commit bcc167b928
10 changed files with 1098 additions and 18 deletions

BIN
Assets/New Terrain.asset Normal file

Binary file not shown.

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bfd3d14c6a9fe2c449bfd1accf52d11d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 15600000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -38,12 +38,12 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 12
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
@@ -248,14 +248,14 @@ MonoBehaviour:
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
quality: 3
frameInfluence: 0.1
jitterScale: 1
mipBias: 0
varianceClampScale: 0.9
contrastAdaptiveSharpening: 0
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!1 &410087039
GameObject:
m_ObjectHideFlags: 0
@@ -282,14 +282,14 @@ Light:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 410087039}
m_Enabled: 1
serializedVersion: 11
serializedVersion: 13
m_Type: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 2
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_CookieSize2D: {x: 10, y: 10}
m_Shadows:
m_Type: 2
m_Resolution: -1
@@ -334,8 +334,11 @@ Light:
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShapeRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &410087041
Transform:
m_ObjectHideFlags: 0
@@ -363,17 +366,247 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_LightLayerMask: 1
m_RenderingLayers: 1
m_CustomShadowLayers: 0
m_ShadowLayerMask: 1
m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 1
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1 &603012223
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 603012224}
- component: {fileID: 603012228}
- component: {fileID: 603012225}
- component: {fileID: 603012227}
- component: {fileID: 603012226}
m_Layer: 0
m_Name: LineRoot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &603012224
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 603012223}
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: 1769698869}
- {fileID: 1265290372}
- {fileID: 1470501308}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &603012225
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 603012223}
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: 2003292182}
logicalNodes:
- {fileID: 1769698871}
- {fileID: 1265290373}
- {fileID: 1470501309}
lineRenderer: {fileID: 603012226}
firstSegmentLength: 1.2
firstSegmentStep: 0.1
jointSolverIterations: 12
jointProjectionDistance: 0.02
jointProjectionAngle: 1
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
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 603012223}
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: 603012225}
lineRenderer: {fileID: 603012227}
solverIterations: 8
damping: 0.98
gravityScale: 1
pinFollowStrength: 50
writeBackVirtualNodeTransforms: 1
drawDebugSamples: 0
debugSampleColor: {r: 1, g: 0.2, b: 0.2, a: 1}
debugSampleRadius: 0.015
--- !u!120 &603012227
LineRenderer:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 603012223}
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: 0, z: 0}
- {x: 0, y: 0, z: 0}
m_Parameters:
serializedVersion: 3
widthMultiplier: 1
widthCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.01
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 &603012228
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 603012223}
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: 603012225}
initialFirstSegmentLength: 1.2
minFirstSegmentLength: 0.1
maxFirstSegmentLength: 5
lineAdjustSpeed: 1
extendKey: 273
retractKey: 274
rebuildKey: 114
showGui: 1
showNodeDetails: 1
showSegmentDetails: 1
detailScroll: {x: 0, y: 0}
--- !u!1 &832575517
GameObject:
m_ObjectHideFlags: 0
@@ -423,6 +656,423 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1265290371
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1265290372}
- component: {fileID: 1265290374}
- component: {fileID: 1265290373}
- component: {fileID: 1265290375}
m_Layer: 0
m_Name: Float
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1265290372
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265290371}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 603012224}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1265290373
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265290371}
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: 1265290374}
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 &1265290374
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265290371}
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!65 &1265290375
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265290371}
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.1, y: 0.1, z: 0.1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1470501307
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1470501308}
- component: {fileID: 1470501310}
- component: {fileID: 1470501309}
- component: {fileID: 1470501311}
m_Layer: 0
m_Name: End
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1470501308
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470501307}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 603012224}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1470501309
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470501307}
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: 1470501310}
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 &1470501310
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470501307}
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!65 &1470501311
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470501307}
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.1, y: 0.1, z: 0.1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1769698868
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1769698869}
- component: {fileID: 1769698871}
- component: {fileID: 1769698870}
m_Layer: 0
m_Name: Start
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1769698869
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769698868}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 603012224}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &1769698870
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769698868}
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!114 &1769698871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769698868}
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: 1769698870}
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!1 &1939106081
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1939106084}
- component: {fileID: 1939106083}
- component: {fileID: 1939106082}
m_Layer: 0
m_Name: Terrain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 2147483647
m_IsActive: 1
--- !u!154 &1939106082
TerrainCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1939106081}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_TerrainData: {fileID: 15600000, guid: bfd3d14c6a9fe2c449bfd1accf52d11d, type: 2}
m_EnableTreeColliders: 1
--- !u!218 &1939106083
Terrain:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1939106081}
m_Enabled: 1
serializedVersion: 6
m_TerrainData: {fileID: 15600000, guid: bfd3d14c6a9fe2c449bfd1accf52d11d, type: 2}
m_TreeDistance: 5000
m_TreeBillboardDistance: 50
m_TreeCrossFadeLength: 5
m_TreeMaximumFullLODCount: 50
m_DetailObjectDistance: 80
m_DetailObjectDensity: 1
m_HeightmapPixelError: 5
m_SplatMapDistance: 1000
m_HeightmapMinimumLODSimplification: 0
m_HeightmapMaximumLOD: 0
m_ShadowCastingMode: 2
m_DrawHeightmap: 1
m_DrawInstanced: 0
m_DrawTreesAndFoliage: 1
m_StaticShadowCaster: 0
m_IgnoreQualitySettings: 0
m_ReflectionProbeUsage: 1
m_MaterialTemplate: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2}
m_BakeLightProbesForTrees: 1
m_PreserveTreePrototypeLayers: 0
m_DeringLightProbesForTrees: 1
m_ReceiveGI: 1
m_ScaleInLightmap: 0.0256
m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0}
m_GroupingID: 0
m_RenderingLayerMask: 1
m_AllowAutoConnect: 1
m_EnableHeightmapRayTracing: 1
m_EnableTreesAndDetailsRayTracing: 0
m_TreeMotionVectorModeOverride: 3
--- !u!4 &1939106084
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1939106081}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -100, y: 0, z: -100}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2003292181
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2003292182}
m_Layer: 0
m_Name: Tip
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2003292182
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2003292181}
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: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -430,3 +1080,6 @@ SceneRoots:
- {fileID: 330585546}
- {fileID: 410087041}
- {fileID: 832575519}
- {fileID: 2003292182}
- {fileID: 603012224}
- {fileID: 1939106084}

View File

@@ -28,6 +28,13 @@ namespace F2RopeLine2.FishingLine
[SerializeField] private bool runtimeVirtualNode;
[SerializeField] private int runtimeChainIndex = -1;
[Header("Debug")]
[SerializeField] private bool drawDebugGizmo = true;
[Min(0.001f)]
[SerializeField] private float debugGizmoRadius = 0.03f;
[SerializeField] private Color logicalNodeColor = new(0.2f, 0.9f, 0.2f, 1f);
[SerializeField] private Color virtualNodeColor = new(1f, 0.6f, 0.1f, 1f);
public NodeType Type
{
get => nodeType;
@@ -56,6 +63,22 @@ namespace F2RopeLine2.FishingLine
public Vector3 Position => transform.position;
public string GetDebugName()
{
return runtimeVirtualNode
? $"V[{runtimeChainIndex}]"
: $"{nodeType}[{runtimeChainIndex}]";
}
public string GetDebugSummary()
{
var bodySummary = body == null
? "NoBody"
: $"v:{body.linearVelocity.magnitude:F2}";
return $"{GetDebugName()} pos:{Position} next:{segmentLengthToNext:F2} {bodySummary}";
}
private void Reset()
{
TryGetComponent(out body);
@@ -87,5 +110,16 @@ namespace F2RopeLine2.FishingLine
{
transform.position = position;
}
private void OnDrawGizmos()
{
if (!drawDebugGizmo)
{
return;
}
Gizmos.color = runtimeVirtualNode ? virtualNodeColor : logicalNodeColor;
Gizmos.DrawSphere(transform.position, debugGizmoRadius);
}
}
}

View File

@@ -23,10 +23,32 @@ namespace F2RopeLine2.FishingLine
[SerializeField] private float pinFollowStrength = 50f;
[SerializeField] private bool writeBackVirtualNodeTransforms = true;
[Header("Debug")]
[SerializeField] private bool drawDebugSamples = false;
[SerializeField] private Color debugSampleColor = new(1f, 0.2f, 0.2f, 1f);
[Min(0.001f)]
[SerializeField] private float debugSampleRadius = 0.015f;
private readonly List<Vector3> positions = new();
private readonly List<Vector3> previousPositions = new();
private bool[] pinnedFlags = System.Array.Empty<bool>();
public int SampleCount => positions.Count;
public float CurrentRenderedLength
{
get
{
var total = 0f;
for (var i = 0; i < positions.Count - 1; i++)
{
total += Vector3.Distance(positions[i], positions[i + 1]);
}
return total;
}
}
private void Reset()
{
TryGetComponent(out lineRenderer);
@@ -207,5 +229,19 @@ namespace F2RopeLine2.FishingLine
}
}
}
private void OnDrawGizmosSelected()
{
if (!drawDebugSamples || positions.Count == 0)
{
return;
}
Gizmos.color = debugSampleColor;
for (var i = 0; i < positions.Count; i++)
{
Gizmos.DrawSphere(positions[i], debugSampleRadius);
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
namespace F2RopeLine2.FishingLine
@@ -36,6 +37,11 @@ namespace F2RopeLine2.FishingLine
[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<FishingLineNode> orderedNodes = new();
private readonly List<float> restLengths = new();
@@ -60,6 +66,33 @@ namespace F2RopeLine2.FishingLine
public float TotalLineLength { get; private set; }
public int LogicalNodeCount => logicalNodes?.Length ?? 0;
public int RuntimeVirtualNodeCount => runtimeVirtualNodes.Count;
public int ActiveRuntimeVirtualNodeCount
{
get
{
var activeCount = 0;
for (var i = 0; i < runtimeVirtualNodes.Count; i++)
{
if (runtimeVirtualNodes[i] != null && runtimeVirtualNodes[i].gameObject.activeSelf)
{
activeCount++;
}
}
return activeCount;
}
}
public int OrderedNodeCount => orderedNodes.Count;
public int SegmentCount => restLengths.Count;
public bool IsChainDirty => chainDirty;
private void Reset()
{
if (lineRenderer == null)
@@ -157,6 +190,66 @@ namespace F2RopeLine2.FishingLine
return true;
}
public float GetActualDistance(int segmentIndex)
{
if (segmentIndex < 0 || segmentIndex >= orderedNodes.Count - 1)
{
return 0f;
}
var fromNode = orderedNodes[segmentIndex];
var toNode = orderedNodes[segmentIndex + 1];
if (fromNode == null || toNode == null)
{
return 0f;
}
return Vector3.Distance(fromNode.Position, toNode.Position);
}
public string GetRuntimeDebugSummary()
{
var builder = new StringBuilder(512);
builder.Append("chain:")
.Append(chainDirty ? "dirty" : "ready")
.Append(" logical:")
.Append(LogicalNodeCount)
.Append(" runtimeVirtual:")
.Append(ActiveRuntimeVirtualNodeCount)
.Append("/")
.Append(RuntimeVirtualNodeCount)
.Append(" ordered:")
.Append(OrderedNodeCount)
.Append(" total:")
.Append(TotalLineLength.ToString("F2"))
.Append("m");
for (var i = 0; i < orderedNodes.Count; i++)
{
var node = orderedNodes[i];
if (node == null)
{
continue;
}
builder.AppendLine()
.Append('#')
.Append(i)
.Append(' ')
.Append(node.GetDebugSummary());
if (i < restLengths.Count)
{
builder.Append(" seg rest:")
.Append(restLengths[i].ToString("F3"))
.Append(" actual:")
.Append(GetActualDistance(i).ToString("F3"));
}
}
return builder.ToString();
}
private void ConfigureStartNode()
{
if (logicalNodes == null || logicalNodes.Length == 0 || logicalNodes[0] == null)
@@ -557,7 +650,49 @@ namespace F2RopeLine2.FishingLine
}
Gizmos.DrawLine(orderedNodes[i].Position, orderedNodes[i + 1].Position);
Gizmos.DrawSphere(orderedNodes[i].Position, debugNodeRadius);
var midPoint = (orderedNodes[i].Position + orderedNodes[i + 1].Position) * 0.5f;
var actualLength = Vector3.Distance(orderedNodes[i].Position, orderedNodes[i + 1].Position);
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
}
if (orderedNodes.Count > 0 && orderedNodes[^1] != null)
{
Gizmos.DrawSphere(orderedNodes[^1].Position, debugNodeRadius);
}
#if UNITY_EDITOR
if (!showNodeLabels)
{
return;
}
for (var i = 0; i < orderedNodes.Count; i++)
{
var node = orderedNodes[i];
if (node == null)
{
continue;
}
var pinned = pinnedIndices.Contains(i) ? " Pinned" : string.Empty;
UnityEditor.Handles.color = debugColor;
UnityEditor.Handles.Label(
node.Position + Vector3.up * 0.04f,
$"#{i} {node.GetDebugName()}{pinned}");
}
#endif
}
}
}

View File

@@ -24,6 +24,9 @@ namespace F2RopeLine2.FishingLine
[Header("Debug")]
[SerializeField] private bool showGui = true;
[SerializeField] private bool showNodeDetails = true;
[SerializeField] private bool showSegmentDetails = true;
[SerializeField] private Vector2 detailScroll = Vector2.zero;
private float targetFirstSegmentLength;
@@ -89,6 +92,8 @@ namespace F2RopeLine2.FishingLine
GUILayout.Label("Fishing Line Test");
GUILayout.Label($"First Segment Length: {solver.FirstSegmentLength:F2} m");
GUILayout.Label($"Total Line Length: {solver.TotalLineLength:F2} m");
GUILayout.Label($"Chain: {(solver.IsChainDirty ? "Dirty" : "Ready")}");
GUILayout.Label($"Logical/Virtual/Ordered: {solver.LogicalNodeCount}/{solver.ActiveRuntimeVirtualNodeCount}/{solver.OrderedNodeCount}");
GUILayout.Label($"Keys: {extendKey} / {retractKey} / {rebuildKey}");
var nextLength = GUILayout.HorizontalSlider(
@@ -122,6 +127,44 @@ namespace F2RopeLine2.FishingLine
GUILayout.EndHorizontal();
GUILayout.EndArea();
GUILayout.BeginArea(new Rect(16f, 204f, 420f, 320f), GUI.skin.box);
GUILayout.Label("Fishing Line Debug");
if (solver.TryGetComponent<FishingLineRenderer>(out var renderer))
{
GUILayout.Label($"Render Samples: {renderer.SampleCount}");
GUILayout.Label($"Rendered Length: {renderer.CurrentRenderedLength:F2} m");
}
detailScroll = GUILayout.BeginScrollView(detailScroll, GUILayout.Width(404f), GUILayout.Height(250f));
if (showNodeDetails)
{
GUILayout.Label("Nodes");
for (var i = 0; i < solver.OrderedNodeCount; i++)
{
if (!solver.TryGetOrderedNode(i, out var node))
{
continue;
}
GUILayout.Label($"#{i} {node.GetDebugSummary()}");
}
}
if (showSegmentDetails)
{
GUILayout.Label("Segments");
for (var i = 0; i < solver.SegmentCount; i++)
{
var rest = solver.RestLengths[i];
var actual = solver.GetActualDistance(i);
GUILayout.Label($"S{i} rest:{rest:F3}m actual:{actual:F3}m diff:{(actual - rest):F3}m");
}
}
GUILayout.EndScrollView();
GUILayout.EndArea();
}
}
}

View File

@@ -920,7 +920,7 @@ PlayerSettings:
qnxGraphicConfPath:
apiCompatibilityLevel: 6
captureStartupLogs: {}
activeInputHandler: 1
activeInputHandler: 2
windowsGamepadBackendHint: 0
enableDirectStorage: 0
cloudProjectId: a1a8eead-4064-43e5-adfa-49a79ab67f2e

View File

@@ -0,0 +1,121 @@
{
"templatePinStates": [],
"dependencyTypeInfos": [
{
"userAdded": false,
"type": "UnityEngine.AnimationClip",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEditor.Animations.AnimatorController",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.AnimatorOverrideController",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEditor.Audio.AudioMixerController",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.ComputeShader",
"defaultInstantiationMode": 1
},
{
"userAdded": false,
"type": "UnityEngine.Cubemap",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.GameObject",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEditor.LightingDataAsset",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.LightingSettings",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Material",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEditor.MonoScript",
"defaultInstantiationMode": 1
},
{
"userAdded": false,
"type": "UnityEngine.PhysicsMaterial",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.PhysicsMaterial2D",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.VolumeProfile",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEditor.SceneAsset",
"defaultInstantiationMode": 1
},
{
"userAdded": false,
"type": "UnityEngine.Shader",
"defaultInstantiationMode": 1
},
{
"userAdded": false,
"type": "UnityEngine.ShaderVariantCollection",
"defaultInstantiationMode": 1
},
{
"userAdded": false,
"type": "UnityEngine.Texture",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Texture2D",
"defaultInstantiationMode": 0
},
{
"userAdded": false,
"type": "UnityEngine.Timeline.TimelineAsset",
"defaultInstantiationMode": 0
}
],
"defaultDependencyTypeInfo": {
"userAdded": false,
"type": "<default_scene_template_dependencies>",
"defaultInstantiationMode": 1
},
"newSceneOverride": 0
}

View File

@@ -11,6 +11,56 @@ showStatusBar = false
scopes = {
}
providers = {
asset = {
active = true
priority = 25
defaultAction = null
}
scene = {
active = true
priority = 50
defaultAction = null
}
adb = {
active = false
priority = 2500
defaultAction = null
}
presets_provider = {
active = false
priority = -10
defaultAction = null
}
find = {
active = true
priority = 25
defaultAction = null
}
packages = {
active = false
priority = 90
defaultAction = null
}
performance = {
active = false
priority = 100
defaultAction = null
}
store = {
active = false
priority = 100
defaultAction = null
}
profilermarkers = {
active = false
priority = 100
defaultAction = null
}
log = {
active = false
priority = 210
defaultAction = null
}
}
objectSelectors = {
}