├── .gitignore
├── .idea
└── .idea.UnityVerletRope
│ └── .idea
│ ├── .gitignore
│ ├── encodings.xml
│ ├── indexLayout.xml
│ └── vcs.xml
├── Assets
├── Materials.meta
├── Materials
│ ├── RopeMaterial.mat
│ └── RopeMaterial.mat.meta
├── Prefabs.meta
├── Prefabs
│ ├── Rope.prefab
│ └── Rope.prefab.meta
├── Scenes.meta
├── Scenes
│ ├── SampleScene.unity
│ └── SampleScene.unity.meta
├── Scripts.meta
└── Scripts
│ ├── RopeRenderer.cs
│ ├── RopeRenderer.cs.meta
│ ├── VerletRope.cs
│ └── VerletRope.cs.meta
├── Packages
├── manifest.json
└── packages-lock.json
├── ProjectSettings
├── AudioManager.asset
├── ClusterInputManager.asset
├── DynamicsManager.asset
├── EditorBuildSettings.asset
├── EditorSettings.asset
├── GraphicsSettings.asset
├── InputManager.asset
├── MemorySettings.asset
├── NavMeshAreas.asset
├── PackageManagerSettings.asset
├── Packages
│ └── com.unity.testtools.codecoverage
│ │ └── Settings.json
├── Physics2DSettings.asset
├── PresetManager.asset
├── ProjectSettings.asset
├── ProjectVersion.txt
├── QualitySettings.asset
├── SceneTemplateSettings.json
├── TagManager.asset
├── TimeManager.asset
├── TimelineSettings.asset
├── UnityConnectSettings.asset
├── VFXManager.asset
├── VersionControlSettings.asset
└── XRSettings.asset
├── README.md
├── RopeRenderer.png
├── SampleGIF.gif
└── VerletRope.png
/.gitignore:
--------------------------------------------------------------------------------
1 | # This .gitignore file should be placed at the root of your Unity project directory
2 | #
3 | # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
4 | #
5 | /[Ll]ibrary/
6 | /[Tt]emp/
7 | /[Oo]bj/
8 | /[Bb]uild/
9 | /[Bb]uilds/
10 | /[Ll]ogs/
11 | /[Uu]ser[Ss]ettings/
12 |
13 | # MemoryCaptures can get excessive in size.
14 | # They also could contain extremely sensitive data
15 | /[Mm]emoryCaptures/
16 |
17 | # Recordings can get excessive in size
18 | /[Rr]ecordings/
19 |
20 | # Uncomment this line if you wish to ignore the asset store tools plugin
21 | # /[Aa]ssets/AssetStoreTools*
22 |
23 | # Autogenerated Jetbrains Rider plugin
24 | /[Aa]ssets/Plugins/Editor/JetBrains*
25 |
26 | # Visual Studio cache directory
27 | .vs/
28 |
29 | # Gradle cache directory
30 | .gradle/
31 |
32 | # Autogenerated VS/MD/Consulo solution and project files
33 | ExportedObj/
34 | .consulo/
35 | *.csproj
36 | *.unityproj
37 | *.sln
38 | *.suo
39 | *.tmp
40 | *.user
41 | *.userprefs
42 | *.pidb
43 | *.booproj
44 | *.svd
45 | *.pdb
46 | *.mdb
47 | *.opendb
48 | *.VC.db
49 |
50 | # Unity3D generated meta files
51 | *.pidb.meta
52 | *.pdb.meta
53 | *.mdb.meta
54 |
55 | # Unity3D generated file on crash reports
56 | sysinfo.txt
57 |
58 | # Builds
59 | *.apk
60 | *.aab
61 | *.unitypackage
62 | *.app
63 |
64 | # Crashlytics generated file
65 | crashlytics-build.properties
66 |
67 | # Packed Addressables
68 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
69 |
70 | # Temporary auto-generated Android Assets
71 | /[Aa]ssets/[Ss]treamingAssets/aa.meta
72 | /[Aa]ssets/[Ss]treamingAssets/aa/*
--------------------------------------------------------------------------------
/.idea/.idea.UnityVerletRope/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Rider ignored files
5 | /contentModel.xml
6 | /.idea.UnityVerletRope.iml
7 | /projectSettingsUpdater.xml
8 | /modules.xml
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 | # Datasource local storage ignored files
12 | /dataSources/
13 | /dataSources.local.xml
14 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityVerletRope/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityVerletRope/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.idea.UnityVerletRope/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Assets/Materials.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5a4ade9e2102fff4d9abf92529b83dc5
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Materials/RopeMaterial.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 8
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: RopeMaterial
11 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
12 | m_Parent: {fileID: 0}
13 | m_ModifiedSerializedProperties: 0
14 | m_ValidKeywords: []
15 | m_InvalidKeywords: []
16 | m_LightmapFlags: 4
17 | m_EnableInstancingVariants: 0
18 | m_DoubleSidedGI: 0
19 | m_CustomRenderQueue: -1
20 | stringTagMap: {}
21 | disabledShaderPasses: []
22 | m_LockedProperties:
23 | m_SavedProperties:
24 | serializedVersion: 3
25 | m_TexEnvs:
26 | - _BumpMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailAlbedoMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailMask:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailNormalMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _EmissionMap:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _MainTex:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _MetallicGlossMap:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _OcclusionMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _ParallaxMap:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | m_Ints: []
63 | m_Floats:
64 | - _BumpScale: 1
65 | - _Cutoff: 0.5
66 | - _DetailNormalMapScale: 1
67 | - _DstBlend: 0
68 | - _GlossMapScale: 1
69 | - _Glossiness: 0.5
70 | - _GlossyReflections: 1
71 | - _Metallic: 0
72 | - _Mode: 0
73 | - _OcclusionStrength: 1
74 | - _Parallax: 0.02
75 | - _SmoothnessTextureChannel: 0
76 | - _SpecularHighlights: 1
77 | - _SrcBlend: 1
78 | - _UVSec: 0
79 | - _ZWrite: 1
80 | m_Colors:
81 | - _Color: {r: 0.7207546, g: 0.48048553, b: 0.23254535, a: 1}
82 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
83 | m_BuildTextureStacks: []
84 |
--------------------------------------------------------------------------------
/Assets/Materials/RopeMaterial.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5fb5274d7c5008940809983dfbd1bcdb
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Prefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2ec4b0f033d151146836b2e33ad563bd
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Prefabs/Rope.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &335404251662400873
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 1644046959965677927}
12 | - component: {fileID: 6488651178797480579}
13 | - component: {fileID: 8645735507458250410}
14 | - component: {fileID: 2935775028103291107}
15 | - component: {fileID: 4848276576545318302}
16 | m_Layer: 0
17 | m_Name: Rope
18 | m_TagString: Untagged
19 | m_Icon: {fileID: 0}
20 | m_NavMeshLayer: 0
21 | m_StaticEditorFlags: 0
22 | m_IsActive: 1
23 | --- !u!4 &1644046959965677927
24 | Transform:
25 | m_ObjectHideFlags: 0
26 | m_CorrespondingSourceObject: {fileID: 0}
27 | m_PrefabInstance: {fileID: 0}
28 | m_PrefabAsset: {fileID: 0}
29 | m_GameObject: {fileID: 335404251662400873}
30 | serializedVersion: 2
31 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
32 | m_LocalPosition: {x: 0.02, y: 0, z: 0}
33 | m_LocalScale: {x: 1, y: 1, z: 1}
34 | m_ConstrainProportionsScale: 0
35 | m_Children: []
36 | m_Father: {fileID: 0}
37 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
38 | --- !u!114 &6488651178797480579
39 | MonoBehaviour:
40 | m_ObjectHideFlags: 0
41 | m_CorrespondingSourceObject: {fileID: 0}
42 | m_PrefabInstance: {fileID: 0}
43 | m_PrefabAsset: {fileID: 0}
44 | m_GameObject: {fileID: 335404251662400873}
45 | m_Enabled: 1
46 | m_EditorHideFlags: 0
47 | m_Script: {fileID: 11500000, guid: 8c50c20d2344cd641839086a56789943, type: 3}
48 | m_Name:
49 | m_EditorClassIdentifier:
50 | m_RopeLength: 4
51 | m_NumberOfNodesPerLength: 5
52 | m_ConstraintIterationCount: 10
53 | m_Gravity: {x: 0, y: -9.8, z: 0}
54 | m_RopeRadius: 0.02
55 | m_SubSteps: 4
56 | --- !u!114 &8645735507458250410
57 | MonoBehaviour:
58 | m_ObjectHideFlags: 0
59 | m_CorrespondingSourceObject: {fileID: 0}
60 | m_PrefabInstance: {fileID: 0}
61 | m_PrefabAsset: {fileID: 0}
62 | m_GameObject: {fileID: 335404251662400873}
63 | m_Enabled: 1
64 | m_EditorHideFlags: 0
65 | m_Script: {fileID: 11500000, guid: f419a5bb03a6cc941a638acaaf0211c8, type: 3}
66 | m_Name:
67 | m_EditorClassIdentifier:
68 | m_RopeSegmentSides: 5
69 | --- !u!23 &2935775028103291107
70 | MeshRenderer:
71 | m_ObjectHideFlags: 0
72 | m_CorrespondingSourceObject: {fileID: 0}
73 | m_PrefabInstance: {fileID: 0}
74 | m_PrefabAsset: {fileID: 0}
75 | m_GameObject: {fileID: 335404251662400873}
76 | m_Enabled: 1
77 | m_CastShadows: 0
78 | m_ReceiveShadows: 0
79 | m_DynamicOccludee: 1
80 | m_StaticShadowCaster: 0
81 | m_MotionVectors: 1
82 | m_LightProbeUsage: 1
83 | m_ReflectionProbeUsage: 1
84 | m_RayTracingMode: 2
85 | m_RayTraceProcedural: 0
86 | m_RenderingLayerMask: 1
87 | m_RendererPriority: 0
88 | m_Materials:
89 | - {fileID: 2100000, guid: 5fb5274d7c5008940809983dfbd1bcdb, type: 2}
90 | m_StaticBatchInfo:
91 | firstSubMesh: 0
92 | subMeshCount: 0
93 | m_StaticBatchRoot: {fileID: 0}
94 | m_ProbeAnchor: {fileID: 0}
95 | m_LightProbeVolumeOverride: {fileID: 0}
96 | m_ScaleInLightmap: 1
97 | m_ReceiveGI: 1
98 | m_PreserveUVs: 0
99 | m_IgnoreNormalsForChartDetection: 0
100 | m_ImportantGI: 0
101 | m_StitchLightmapSeams: 1
102 | m_SelectedEditorRenderState: 3
103 | m_MinimumChartSize: 4
104 | m_AutoUVMaxDistance: 0.5
105 | m_AutoUVMaxAngle: 89
106 | m_LightmapParameters: {fileID: 0}
107 | m_SortingLayerID: 0
108 | m_SortingLayer: 0
109 | m_SortingOrder: 0
110 | m_AdditionalVertexStreams: {fileID: 0}
111 | --- !u!33 &4848276576545318302
112 | MeshFilter:
113 | m_ObjectHideFlags: 0
114 | m_CorrespondingSourceObject: {fileID: 0}
115 | m_PrefabInstance: {fileID: 0}
116 | m_PrefabAsset: {fileID: 0}
117 | m_GameObject: {fileID: 335404251662400873}
118 | m_Mesh: {fileID: 0}
119 |
--------------------------------------------------------------------------------
/Assets/Prefabs/Rope.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 73e8f23d7d9cc1f49973d2e18f3e262b
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/Scenes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4ca8b65e6293eaa4184e654cc90eb87b
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Scenes/SampleScene.unity:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!29 &1
4 | OcclusionCullingSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_OcclusionBakeSettings:
8 | smallestOccluder: 5
9 | smallestHole: 0.25
10 | backfaceThreshold: 100
11 | m_SceneGUID: 00000000000000000000000000000000
12 | m_OcclusionCullingData: {fileID: 0}
13 | --- !u!104 &2
14 | RenderSettings:
15 | m_ObjectHideFlags: 0
16 | serializedVersion: 9
17 | m_Fog: 0
18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 | m_FogMode: 3
20 | m_FogDensity: 0.01
21 | m_LinearFogStart: 0
22 | m_LinearFogEnd: 300
23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 | m_AmbientIntensity: 1
27 | m_AmbientMode: 0
28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
30 | m_HaloStrength: 0.5
31 | m_FlareStrength: 1
32 | m_FlareFadeSpeed: 3
33 | m_HaloTexture: {fileID: 0}
34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 | m_DefaultReflectionMode: 0
36 | m_DefaultReflectionResolution: 128
37 | m_ReflectionBounces: 1
38 | m_ReflectionIntensity: 1
39 | m_CustomReflection: {fileID: 0}
40 | m_Sun: {fileID: 705507994}
41 | m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
42 | m_UseRadianceAmbientProbe: 0
43 | --- !u!157 &3
44 | LightmapSettings:
45 | m_ObjectHideFlags: 0
46 | serializedVersion: 12
47 | m_GIWorkflowMode: 1
48 | m_GISettings:
49 | serializedVersion: 2
50 | m_BounceScale: 1
51 | m_IndirectOutputScale: 1
52 | m_AlbedoBoost: 1
53 | m_EnvironmentLightingMode: 0
54 | m_EnableBakedLightmaps: 1
55 | m_EnableRealtimeLightmaps: 0
56 | m_LightmapEditorSettings:
57 | serializedVersion: 12
58 | m_Resolution: 2
59 | m_BakeResolution: 40
60 | m_AtlasSize: 1024
61 | m_AO: 0
62 | m_AOMaxDistance: 1
63 | m_CompAOExponent: 1
64 | m_CompAOExponentDirect: 0
65 | m_ExtractAmbientOcclusion: 0
66 | m_Padding: 2
67 | m_LightmapParameters: {fileID: 0}
68 | m_LightmapsBakeMode: 1
69 | m_TextureCompression: 1
70 | m_FinalGather: 0
71 | m_FinalGatherFiltering: 1
72 | m_FinalGatherRayCount: 256
73 | m_ReflectionCompression: 2
74 | m_MixedBakeMode: 2
75 | m_BakeBackend: 1
76 | m_PVRSampling: 1
77 | m_PVRDirectSampleCount: 32
78 | m_PVRSampleCount: 500
79 | m_PVRBounces: 2
80 | m_PVREnvironmentSampleCount: 500
81 | m_PVREnvironmentReferencePointCount: 2048
82 | m_PVRFilteringMode: 2
83 | m_PVRDenoiserTypeDirect: 0
84 | m_PVRDenoiserTypeIndirect: 0
85 | m_PVRDenoiserTypeAO: 0
86 | m_PVRFilterTypeDirect: 0
87 | m_PVRFilterTypeIndirect: 0
88 | m_PVRFilterTypeAO: 0
89 | m_PVREnvironmentMIS: 0
90 | m_PVRCulling: 1
91 | m_PVRFilteringGaussRadiusDirect: 1
92 | m_PVRFilteringGaussRadiusIndirect: 5
93 | m_PVRFilteringGaussRadiusAO: 2
94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5
95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2
96 | m_PVRFilteringAtrousPositionSigmaAO: 1
97 | m_ExportTrainingData: 0
98 | m_TrainingDataDestination: TrainingData
99 | m_LightProbeSampleCountMultiplier: 4
100 | m_LightingDataAsset: {fileID: 0}
101 | m_LightingSettings: {fileID: 0}
102 | --- !u!196 &4
103 | NavMeshSettings:
104 | serializedVersion: 2
105 | m_ObjectHideFlags: 0
106 | m_BuildSettings:
107 | serializedVersion: 3
108 | agentTypeID: 0
109 | agentRadius: 0.5
110 | agentHeight: 2
111 | agentSlope: 45
112 | agentClimb: 0.4
113 | ledgeDropHeight: 0
114 | maxJumpAcrossDistance: 0
115 | minRegionArea: 2
116 | manualCellSize: 0
117 | cellSize: 0.16666667
118 | manualTileSize: 0
119 | tileSize: 256
120 | buildHeightMesh: 0
121 | maxJobWorkers: 0
122 | preserveTilesOutsideBounds: 0
123 | debug:
124 | m_Flags: 0
125 | m_NavMeshData: {fileID: 0}
126 | --- !u!1 &539517741
127 | GameObject:
128 | m_ObjectHideFlags: 0
129 | m_CorrespondingSourceObject: {fileID: 0}
130 | m_PrefabInstance: {fileID: 0}
131 | m_PrefabAsset: {fileID: 0}
132 | serializedVersion: 6
133 | m_Component:
134 | - component: {fileID: 539517746}
135 | - component: {fileID: 539517745}
136 | - component: {fileID: 539517744}
137 | - component: {fileID: 539517743}
138 | - component: {fileID: 539517742}
139 | m_Layer: 0
140 | m_Name: Cube
141 | m_TagString: Untagged
142 | m_Icon: {fileID: 0}
143 | m_NavMeshLayer: 0
144 | m_StaticEditorFlags: 0
145 | m_IsActive: 1
146 | --- !u!54 &539517742
147 | Rigidbody:
148 | m_ObjectHideFlags: 0
149 | m_CorrespondingSourceObject: {fileID: 0}
150 | m_PrefabInstance: {fileID: 0}
151 | m_PrefabAsset: {fileID: 0}
152 | m_GameObject: {fileID: 539517741}
153 | serializedVersion: 4
154 | m_Mass: 1
155 | m_Drag: 0
156 | m_AngularDrag: 0.05
157 | m_CenterOfMass: {x: 0, y: 0, z: 0}
158 | m_InertiaTensor: {x: 1, y: 1, z: 1}
159 | m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
160 | m_IncludeLayers:
161 | serializedVersion: 2
162 | m_Bits: 0
163 | m_ExcludeLayers:
164 | serializedVersion: 2
165 | m_Bits: 0
166 | m_ImplicitCom: 1
167 | m_ImplicitTensor: 1
168 | m_UseGravity: 1
169 | m_IsKinematic: 1
170 | m_Interpolate: 0
171 | m_Constraints: 0
172 | m_CollisionDetection: 0
173 | --- !u!65 &539517743
174 | BoxCollider:
175 | m_ObjectHideFlags: 0
176 | m_CorrespondingSourceObject: {fileID: 0}
177 | m_PrefabInstance: {fileID: 0}
178 | m_PrefabAsset: {fileID: 0}
179 | m_GameObject: {fileID: 539517741}
180 | m_Material: {fileID: 0}
181 | m_IncludeLayers:
182 | serializedVersion: 2
183 | m_Bits: 0
184 | m_ExcludeLayers:
185 | serializedVersion: 2
186 | m_Bits: 0
187 | m_LayerOverridePriority: 0
188 | m_IsTrigger: 0
189 | m_ProvidesContacts: 0
190 | m_Enabled: 1
191 | serializedVersion: 3
192 | m_Size: {x: 1, y: 1, z: 1}
193 | m_Center: {x: 0, y: 0, z: 0}
194 | --- !u!23 &539517744
195 | MeshRenderer:
196 | m_ObjectHideFlags: 0
197 | m_CorrespondingSourceObject: {fileID: 0}
198 | m_PrefabInstance: {fileID: 0}
199 | m_PrefabAsset: {fileID: 0}
200 | m_GameObject: {fileID: 539517741}
201 | m_Enabled: 1
202 | m_CastShadows: 1
203 | m_ReceiveShadows: 1
204 | m_DynamicOccludee: 1
205 | m_StaticShadowCaster: 0
206 | m_MotionVectors: 1
207 | m_LightProbeUsage: 1
208 | m_ReflectionProbeUsage: 1
209 | m_RayTracingMode: 2
210 | m_RayTraceProcedural: 0
211 | m_RenderingLayerMask: 1
212 | m_RendererPriority: 0
213 | m_Materials:
214 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
215 | m_StaticBatchInfo:
216 | firstSubMesh: 0
217 | subMeshCount: 0
218 | m_StaticBatchRoot: {fileID: 0}
219 | m_ProbeAnchor: {fileID: 0}
220 | m_LightProbeVolumeOverride: {fileID: 0}
221 | m_ScaleInLightmap: 1
222 | m_ReceiveGI: 1
223 | m_PreserveUVs: 0
224 | m_IgnoreNormalsForChartDetection: 0
225 | m_ImportantGI: 0
226 | m_StitchLightmapSeams: 1
227 | m_SelectedEditorRenderState: 3
228 | m_MinimumChartSize: 4
229 | m_AutoUVMaxDistance: 0.5
230 | m_AutoUVMaxAngle: 89
231 | m_LightmapParameters: {fileID: 0}
232 | m_SortingLayerID: 0
233 | m_SortingLayer: 0
234 | m_SortingOrder: 0
235 | m_AdditionalVertexStreams: {fileID: 0}
236 | --- !u!33 &539517745
237 | MeshFilter:
238 | m_ObjectHideFlags: 0
239 | m_CorrespondingSourceObject: {fileID: 0}
240 | m_PrefabInstance: {fileID: 0}
241 | m_PrefabAsset: {fileID: 0}
242 | m_GameObject: {fileID: 539517741}
243 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
244 | --- !u!4 &539517746
245 | Transform:
246 | m_ObjectHideFlags: 0
247 | m_CorrespondingSourceObject: {fileID: 0}
248 | m_PrefabInstance: {fileID: 0}
249 | m_PrefabAsset: {fileID: 0}
250 | m_GameObject: {fileID: 539517741}
251 | serializedVersion: 2
252 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
253 | m_LocalPosition: {x: -3.12, y: -1.2138611, z: -0.0056197494}
254 | m_LocalScale: {x: 1, y: 1, z: 1}
255 | m_ConstrainProportionsScale: 0
256 | m_Children: []
257 | m_Father: {fileID: 0}
258 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
259 | --- !u!1 &705507993
260 | GameObject:
261 | m_ObjectHideFlags: 0
262 | m_CorrespondingSourceObject: {fileID: 0}
263 | m_PrefabInstance: {fileID: 0}
264 | m_PrefabAsset: {fileID: 0}
265 | serializedVersion: 6
266 | m_Component:
267 | - component: {fileID: 705507995}
268 | - component: {fileID: 705507994}
269 | m_Layer: 0
270 | m_Name: Directional Light
271 | m_TagString: Untagged
272 | m_Icon: {fileID: 0}
273 | m_NavMeshLayer: 0
274 | m_StaticEditorFlags: 0
275 | m_IsActive: 1
276 | --- !u!108 &705507994
277 | Light:
278 | m_ObjectHideFlags: 0
279 | m_CorrespondingSourceObject: {fileID: 0}
280 | m_PrefabInstance: {fileID: 0}
281 | m_PrefabAsset: {fileID: 0}
282 | m_GameObject: {fileID: 705507993}
283 | m_Enabled: 1
284 | serializedVersion: 10
285 | m_Type: 1
286 | m_Shape: 0
287 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
288 | m_Intensity: 1
289 | m_Range: 10
290 | m_SpotAngle: 30
291 | m_InnerSpotAngle: 21.80208
292 | m_CookieSize: 10
293 | m_Shadows:
294 | m_Type: 2
295 | m_Resolution: -1
296 | m_CustomResolution: -1
297 | m_Strength: 1
298 | m_Bias: 0.05
299 | m_NormalBias: 0.4
300 | m_NearPlane: 0.2
301 | m_CullingMatrixOverride:
302 | e00: 1
303 | e01: 0
304 | e02: 0
305 | e03: 0
306 | e10: 0
307 | e11: 1
308 | e12: 0
309 | e13: 0
310 | e20: 0
311 | e21: 0
312 | e22: 1
313 | e23: 0
314 | e30: 0
315 | e31: 0
316 | e32: 0
317 | e33: 1
318 | m_UseCullingMatrixOverride: 0
319 | m_Cookie: {fileID: 0}
320 | m_DrawHalo: 0
321 | m_Flare: {fileID: 0}
322 | m_RenderMode: 0
323 | m_CullingMask:
324 | serializedVersion: 2
325 | m_Bits: 4294967295
326 | m_RenderingLayerMask: 1
327 | m_Lightmapping: 1
328 | m_LightShadowCasterMode: 0
329 | m_AreaSize: {x: 1, y: 1}
330 | m_BounceIntensity: 1
331 | m_ColorTemperature: 6570
332 | m_UseColorTemperature: 0
333 | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
334 | m_UseBoundingSphereOverride: 0
335 | m_UseViewFrustumForShadowCasterCull: 1
336 | m_ShadowRadius: 0
337 | m_ShadowAngle: 0
338 | --- !u!4 &705507995
339 | Transform:
340 | m_ObjectHideFlags: 0
341 | m_CorrespondingSourceObject: {fileID: 0}
342 | m_PrefabInstance: {fileID: 0}
343 | m_PrefabAsset: {fileID: 0}
344 | m_GameObject: {fileID: 705507993}
345 | serializedVersion: 2
346 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
347 | m_LocalPosition: {x: 0, y: 3, z: 0}
348 | m_LocalScale: {x: 1, y: 1, z: 1}
349 | m_ConstrainProportionsScale: 0
350 | m_Children: []
351 | m_Father: {fileID: 0}
352 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
353 | --- !u!1 &744599661
354 | GameObject:
355 | m_ObjectHideFlags: 0
356 | m_CorrespondingSourceObject: {fileID: 0}
357 | m_PrefabInstance: {fileID: 0}
358 | m_PrefabAsset: {fileID: 0}
359 | serializedVersion: 6
360 | m_Component:
361 | - component: {fileID: 744599665}
362 | - component: {fileID: 744599664}
363 | - component: {fileID: 744599663}
364 | - component: {fileID: 744599662}
365 | m_Layer: 0
366 | m_Name: Sphere
367 | m_TagString: Untagged
368 | m_Icon: {fileID: 0}
369 | m_NavMeshLayer: 0
370 | m_StaticEditorFlags: 0
371 | m_IsActive: 1
372 | --- !u!135 &744599662
373 | SphereCollider:
374 | m_ObjectHideFlags: 0
375 | m_CorrespondingSourceObject: {fileID: 0}
376 | m_PrefabInstance: {fileID: 0}
377 | m_PrefabAsset: {fileID: 0}
378 | m_GameObject: {fileID: 744599661}
379 | m_Material: {fileID: 0}
380 | m_IncludeLayers:
381 | serializedVersion: 2
382 | m_Bits: 0
383 | m_ExcludeLayers:
384 | serializedVersion: 2
385 | m_Bits: 0
386 | m_LayerOverridePriority: 0
387 | m_IsTrigger: 0
388 | m_ProvidesContacts: 0
389 | m_Enabled: 1
390 | serializedVersion: 3
391 | m_Radius: 0.5
392 | m_Center: {x: 0, y: 0, z: 0}
393 | --- !u!23 &744599663
394 | MeshRenderer:
395 | m_ObjectHideFlags: 0
396 | m_CorrespondingSourceObject: {fileID: 0}
397 | m_PrefabInstance: {fileID: 0}
398 | m_PrefabAsset: {fileID: 0}
399 | m_GameObject: {fileID: 744599661}
400 | m_Enabled: 1
401 | m_CastShadows: 1
402 | m_ReceiveShadows: 1
403 | m_DynamicOccludee: 1
404 | m_StaticShadowCaster: 0
405 | m_MotionVectors: 1
406 | m_LightProbeUsage: 1
407 | m_ReflectionProbeUsage: 1
408 | m_RayTracingMode: 2
409 | m_RayTraceProcedural: 0
410 | m_RenderingLayerMask: 1
411 | m_RendererPriority: 0
412 | m_Materials:
413 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
414 | m_StaticBatchInfo:
415 | firstSubMesh: 0
416 | subMeshCount: 0
417 | m_StaticBatchRoot: {fileID: 0}
418 | m_ProbeAnchor: {fileID: 0}
419 | m_LightProbeVolumeOverride: {fileID: 0}
420 | m_ScaleInLightmap: 1
421 | m_ReceiveGI: 1
422 | m_PreserveUVs: 0
423 | m_IgnoreNormalsForChartDetection: 0
424 | m_ImportantGI: 0
425 | m_StitchLightmapSeams: 1
426 | m_SelectedEditorRenderState: 3
427 | m_MinimumChartSize: 4
428 | m_AutoUVMaxDistance: 0.5
429 | m_AutoUVMaxAngle: 89
430 | m_LightmapParameters: {fileID: 0}
431 | m_SortingLayerID: 0
432 | m_SortingLayer: 0
433 | m_SortingOrder: 0
434 | m_AdditionalVertexStreams: {fileID: 0}
435 | --- !u!33 &744599664
436 | MeshFilter:
437 | m_ObjectHideFlags: 0
438 | m_CorrespondingSourceObject: {fileID: 0}
439 | m_PrefabInstance: {fileID: 0}
440 | m_PrefabAsset: {fileID: 0}
441 | m_GameObject: {fileID: 744599661}
442 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
443 | --- !u!4 &744599665
444 | Transform:
445 | m_ObjectHideFlags: 0
446 | m_CorrespondingSourceObject: {fileID: 0}
447 | m_PrefabInstance: {fileID: 0}
448 | m_PrefabAsset: {fileID: 0}
449 | m_GameObject: {fileID: 744599661}
450 | serializedVersion: 2
451 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
452 | m_LocalPosition: {x: -0.236, y: -1.3668909, z: 0}
453 | m_LocalScale: {x: 1, y: 1, z: 1}
454 | m_ConstrainProportionsScale: 0
455 | m_Children: []
456 | m_Father: {fileID: 0}
457 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
458 | --- !u!1 &963194225
459 | GameObject:
460 | m_ObjectHideFlags: 0
461 | m_CorrespondingSourceObject: {fileID: 0}
462 | m_PrefabInstance: {fileID: 0}
463 | m_PrefabAsset: {fileID: 0}
464 | serializedVersion: 6
465 | m_Component:
466 | - component: {fileID: 963194228}
467 | - component: {fileID: 963194227}
468 | - component: {fileID: 963194226}
469 | m_Layer: 0
470 | m_Name: Main Camera
471 | m_TagString: MainCamera
472 | m_Icon: {fileID: 0}
473 | m_NavMeshLayer: 0
474 | m_StaticEditorFlags: 0
475 | m_IsActive: 1
476 | --- !u!81 &963194226
477 | AudioListener:
478 | m_ObjectHideFlags: 0
479 | m_CorrespondingSourceObject: {fileID: 0}
480 | m_PrefabInstance: {fileID: 0}
481 | m_PrefabAsset: {fileID: 0}
482 | m_GameObject: {fileID: 963194225}
483 | m_Enabled: 1
484 | --- !u!20 &963194227
485 | Camera:
486 | m_ObjectHideFlags: 0
487 | m_CorrespondingSourceObject: {fileID: 0}
488 | m_PrefabInstance: {fileID: 0}
489 | m_PrefabAsset: {fileID: 0}
490 | m_GameObject: {fileID: 963194225}
491 | m_Enabled: 1
492 | serializedVersion: 2
493 | m_ClearFlags: 1
494 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
495 | m_projectionMatrixMode: 1
496 | m_GateFitMode: 2
497 | m_FOVAxisMode: 0
498 | m_Iso: 200
499 | m_ShutterSpeed: 0.005
500 | m_Aperture: 16
501 | m_FocusDistance: 10
502 | m_FocalLength: 50
503 | m_BladeCount: 5
504 | m_Curvature: {x: 2, y: 11}
505 | m_BarrelClipping: 0.25
506 | m_Anamorphism: 0
507 | m_SensorSize: {x: 36, y: 24}
508 | m_LensShift: {x: 0, y: 0}
509 | m_NormalizedViewPortRect:
510 | serializedVersion: 2
511 | x: 0
512 | y: 0
513 | width: 1
514 | height: 1
515 | near clip plane: 0.3
516 | far clip plane: 1000
517 | field of view: 60
518 | orthographic: 0
519 | orthographic size: 5
520 | m_Depth: -1
521 | m_CullingMask:
522 | serializedVersion: 2
523 | m_Bits: 4294967295
524 | m_RenderingPath: -1
525 | m_TargetTexture: {fileID: 0}
526 | m_TargetDisplay: 0
527 | m_TargetEye: 3
528 | m_HDR: 1
529 | m_AllowMSAA: 1
530 | m_AllowDynamicResolution: 0
531 | m_ForceIntoRT: 0
532 | m_OcclusionCulling: 1
533 | m_StereoConvergence: 10
534 | m_StereoSeparation: 0.022
535 | --- !u!4 &963194228
536 | Transform:
537 | m_ObjectHideFlags: 0
538 | m_CorrespondingSourceObject: {fileID: 0}
539 | m_PrefabInstance: {fileID: 0}
540 | m_PrefabAsset: {fileID: 0}
541 | m_GameObject: {fileID: 963194225}
542 | serializedVersion: 2
543 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
544 | m_LocalPosition: {x: 0, y: 1, z: -10}
545 | m_LocalScale: {x: 1, y: 1, z: 1}
546 | m_ConstrainProportionsScale: 0
547 | m_Children: []
548 | m_Father: {fileID: 0}
549 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
550 | --- !u!1001 &4354087051656096862
551 | PrefabInstance:
552 | m_ObjectHideFlags: 0
553 | serializedVersion: 2
554 | m_Modification:
555 | serializedVersion: 3
556 | m_TransformParent: {fileID: 0}
557 | m_Modifications:
558 | - target: {fileID: 335404251662400873, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
559 | propertyPath: m_Name
560 | value: Rope
561 | objectReference: {fileID: 0}
562 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
563 | propertyPath: m_LocalPosition.x
564 | value: -1.551
565 | objectReference: {fileID: 0}
566 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
567 | propertyPath: m_LocalPosition.y
568 | value: 0
569 | objectReference: {fileID: 0}
570 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
571 | propertyPath: m_LocalPosition.z
572 | value: 0
573 | objectReference: {fileID: 0}
574 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
575 | propertyPath: m_LocalRotation.w
576 | value: 1
577 | objectReference: {fileID: 0}
578 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
579 | propertyPath: m_LocalRotation.x
580 | value: 0
581 | objectReference: {fileID: 0}
582 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
583 | propertyPath: m_LocalRotation.y
584 | value: 0
585 | objectReference: {fileID: 0}
586 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
587 | propertyPath: m_LocalRotation.z
588 | value: 0
589 | objectReference: {fileID: 0}
590 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
591 | propertyPath: m_LocalEulerAnglesHint.x
592 | value: 0
593 | objectReference: {fileID: 0}
594 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
595 | propertyPath: m_LocalEulerAnglesHint.y
596 | value: 0
597 | objectReference: {fileID: 0}
598 | - target: {fileID: 1644046959965677927, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
599 | propertyPath: m_LocalEulerAnglesHint.z
600 | value: 0
601 | objectReference: {fileID: 0}
602 | - target: {fileID: 6488651178797480579, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
603 | propertyPath: m_RopeLength
604 | value: 4.55
605 | objectReference: {fileID: 0}
606 | - target: {fileID: 6488651178797480579, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
607 | propertyPath: m_NumberOfNodes
608 | value: 20
609 | objectReference: {fileID: 0}
610 | m_RemovedComponents: []
611 | m_RemovedGameObjects: []
612 | m_AddedGameObjects: []
613 | m_AddedComponents: []
614 | m_SourcePrefab: {fileID: 100100000, guid: 73e8f23d7d9cc1f49973d2e18f3e262b, type: 3}
615 | --- !u!1660057539 &9223372036854775807
616 | SceneRoots:
617 | m_ObjectHideFlags: 0
618 | m_Roots:
619 | - {fileID: 963194228}
620 | - {fileID: 705507995}
621 | - {fileID: 4354087051656096862}
622 | - {fileID: 539517746}
623 | - {fileID: 744599665}
624 |
--------------------------------------------------------------------------------
/Assets/Scenes/SampleScene.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9fc0d4010bbf28b4594072e72b8655ab
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 99913f7b4d13b2a47a60c72fd79d03d3
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Scripts/RopeRenderer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using UnityEngine;
5 |
6 | [RequireComponent(typeof(MeshRenderer))]
7 | [RequireComponent(typeof(MeshFilter))]
8 | [RequireComponent(typeof(VerletRope))]
9 | public class RopeRenderer : MonoBehaviour
10 | {
11 | [Min(3)] [SerializeField] private int m_RopeSegmentSides;
12 |
13 | private MeshFilter m_MeshFilter;
14 | private MeshRenderer m_MeshRenderer;
15 | private Mesh m_RopeMesh;
16 | private VerletRope m_Rope;
17 | private Vector3[] m_Vertices;
18 | private int[] m_Triangles;
19 |
20 | private float m_Angle;
21 | private int m_NodeCount;
22 | private bool m_IsInitialized;
23 |
24 | private void Awake()
25 | {
26 | m_MeshFilter = GetComponent();
27 | m_MeshRenderer = GetComponent();
28 |
29 | m_RopeMesh = new Mesh();
30 | m_Angle = ((m_RopeSegmentSides - 2) * 180) / m_RopeSegmentSides;
31 | m_IsInitialized = false;
32 | }
33 |
34 | private void Start()
35 | {
36 | m_Rope = GetComponent();
37 | m_Vertices = new Vector3[m_Rope.GetNodeCount() * m_RopeSegmentSides];
38 | m_Triangles = new int[m_RopeSegmentSides * (m_Rope.GetNodeCount() - 1) * 6];
39 | }
40 |
41 | // private void OnDrawGizmos()
42 | // {
43 | // if (!Application.isPlaying)
44 | // return;
45 | //
46 | // if (m_Vertices is null || m_Triangles is null)
47 | // return;
48 | //
49 | //
50 | // foreach (var vert in m_Vertices)
51 | // {
52 | // Gizmos.color = Color.white;
53 | // Gizmos.DrawSphere(vert, 0.01f);
54 | // }
55 | //
56 | // for (int i = 0; i < m_Triangles.Length - 3; i += 3)
57 | // {
58 | // Gizmos.DrawLine(m_Vertices[m_Triangles[i]], m_Vertices[m_Triangles[i + 1]]);
59 | // Gizmos.DrawLine(m_Vertices[m_Triangles[i + 1]], m_Vertices[m_Triangles[i + 2]]);
60 | // Gizmos.DrawLine(m_Vertices[m_Triangles[i + 2]], m_Vertices[m_Triangles[i]]);
61 | // }
62 | // }
63 |
64 | public void RenderRope(VerletNode[] nodes, float radius)
65 | {
66 | if (m_Vertices is null || m_Triangles is null)
67 | return;
68 |
69 | ComputeVertices(nodes, radius);
70 |
71 | if(!m_IsInitialized){
72 | ComputeTriangles();
73 | m_IsInitialized = true;
74 | }
75 |
76 | SetupMeshFilter();
77 | }
78 |
79 | private void ComputeVertices(VerletNode[] nodes, float radius)
80 | {
81 | var angle = (360f / m_RopeSegmentSides) * Mathf.Deg2Rad;
82 |
83 | for (int i = 0; i < m_Vertices.Length; i++)
84 | {
85 | var nodeindex = i / m_RopeSegmentSides;
86 | var sign = nodeindex == nodes.Length - 1 ? -1 : 1;
87 | Debug.Log($"Node Index: {nodeindex}, Vert Index: {i} , {m_Vertices[i]}");
88 |
89 | var currNodePosition = nodes[nodeindex].Position;
90 | var normalOfPlane =
91 | (sign * nodes[nodeindex].Position + -sign * nodes[nodeindex + (nodeindex == nodes.Length - 1 ? -1 : 1)].Position)
92 | .normalized;
93 |
94 | var u = Vector3.Cross(normalOfPlane, Vector3.forward).normalized;
95 | var v = Vector3.Cross(u, normalOfPlane).normalized;
96 |
97 | m_Vertices[i] = currNodePosition + radius * (float)Math.Cos(angle * (i % m_RopeSegmentSides)) * u +
98 | radius * (float)Math.Sin(angle * (i % m_RopeSegmentSides)) * v;
99 | }
100 | }
101 |
102 | private void ComputeTriangles()
103 | {
104 | var tn = 0;
105 |
106 | for (int i = 0; i < m_Vertices.Length - m_RopeSegmentSides; i++)
107 | {
108 | var nexti = (i + 1) % m_RopeSegmentSides == 0 ? i - m_RopeSegmentSides + 1 : i + 1;
109 |
110 | m_Triangles[tn] = i;
111 | m_Triangles[tn + 1] = nexti + m_RopeSegmentSides;
112 | m_Triangles[tn + 2] = i + m_RopeSegmentSides;
113 |
114 | m_Triangles[tn + 3] = i;
115 | m_Triangles[tn + 4] = nexti;
116 | m_Triangles[tn + 5] = nexti + m_RopeSegmentSides;
117 |
118 | tn += 6;
119 | }
120 | }
121 |
122 | private void SetupMeshFilter()
123 | {
124 | for (int i = 0; i < m_Vertices.Length; i++)
125 | {
126 | m_Vertices[i] -= transform.position;
127 | }
128 |
129 | m_RopeMesh.Clear();
130 | m_RopeMesh.vertices = m_Vertices;
131 | m_RopeMesh.triangles = m_Triangles;
132 |
133 | m_MeshFilter.mesh = m_RopeMesh;
134 | m_MeshFilter.mesh.RecalculateBounds();
135 | m_MeshFilter.mesh.RecalculateNormals();
136 | }
137 | }
--------------------------------------------------------------------------------
/Assets/Scripts/RopeRenderer.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f419a5bb03a6cc941a638acaaf0211c8
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/Scripts/VerletRope.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.Serialization;
3 |
4 | public struct VerletNode
5 | {
6 | public Vector3 Position;
7 | public Vector3 PrevoiusPosition;
8 | }
9 |
10 | public class VerletRope : MonoBehaviour
11 | {
12 | private VerletNode[] m_VerletNodes;
13 | [SerializeField] private float m_RopeLength;
14 | [SerializeField] private int m_NumberOfNodes;
15 | [SerializeField] private int m_ConstraintIterationCount;
16 | [SerializeField] private Vector3 m_Gravity;
17 | private float m_DistanceBetweenNodes;
18 | [SerializeField] private float m_RopeRadius;
19 | [SerializeField] private int m_SubSteps = 4;
20 |
21 | private RopeRenderer m_RopeRenderer;
22 |
23 | private void Awake()
24 | {
25 | m_VerletNodes = new VerletNode[(int)(m_NumberOfNodes)];
26 | m_DistanceBetweenNodes = m_RopeLength / m_NumberOfNodes;
27 |
28 | for (int i = 0; i < m_VerletNodes.Length; i++)
29 | {
30 | m_VerletNodes[i].Position = transform.position - new Vector3(0f, (m_DistanceBetweenNodes * i), 0f);
31 | m_VerletNodes[i].PrevoiusPosition = m_VerletNodes[i].Position;
32 | }
33 | }
34 |
35 | private void Start()
36 | {
37 | m_RopeRenderer = GetComponent();
38 | }
39 |
40 | private void FixedUpdate()
41 | {
42 | for (int step = 0; step < m_SubSteps; step++)
43 | {
44 | CalculateNewPositions(Time.fixedDeltaTime / m_SubSteps);
45 | for (int i = 0; i < m_ConstraintIterationCount; i++)
46 | {
47 | FixNodeDistances();
48 | if (i % 2 == 0)
49 | ApplyCollision();
50 | }
51 | }
52 |
53 | m_RopeRenderer.RenderRope(m_VerletNodes, m_RopeRadius);
54 | }
55 |
56 | // private void OnDrawGizmos()
57 | // {
58 | // if (!Application.isPlaying)
59 | // return;
60 | //
61 | // for (int i = 0; i < m_VerletNodes.Length; i++)
62 | // {
63 | // if (i != m_VerletNodes.Length - 1)
64 | // {
65 | // Gizmos.color = Color.green;
66 | // Gizmos.DrawLine(m_VerletNodes[i].Position, m_VerletNodes[i + 1].Position);
67 | // }
68 | //
69 | // Gizmos.color = Color.blue;
70 | // Gizmos.DrawLine(m_VerletNodes[i].Position, m_VerletNodes[i].PrevoiusPosition);
71 | // }
72 | // }
73 |
74 | private void CalculateNewPositions(float deltaTime)
75 | {
76 | Vector3 gravityStep = m_Gravity * (deltaTime * deltaTime);
77 |
78 | for (int i = 0; i < m_VerletNodes.Length; i++)
79 | {
80 | var currNode = m_VerletNodes[i];
81 | var newPreviousPosition = currNode.Position;
82 |
83 | var newPosition = (2 * currNode.Position) - currNode.PrevoiusPosition + gravityStep;
84 |
85 | Vector3 direction = newPosition - currNode.Position;
86 | float distance = direction.magnitude;
87 | direction.Normalize();
88 |
89 | if (Physics.SphereCast(currNode.Position, m_RopeRadius, direction, out RaycastHit hit, distance))
90 | {
91 | newPosition = hit.point + hit.normal * m_RopeRadius;
92 | }
93 |
94 | m_VerletNodes[i].PrevoiusPosition = newPreviousPosition;
95 | m_VerletNodes[i].Position = newPosition;
96 | }
97 | }
98 |
99 | private void FixNodeDistances()
100 | {
101 | m_VerletNodes[0].Position = transform.position;
102 |
103 | for (int i = 0; i < m_VerletNodes.Length - 1; i++)
104 | {
105 | var n1 = m_VerletNodes[i];
106 | var n2 = m_VerletNodes[i + 1];
107 |
108 | var d1 = n1.Position - n2.Position;
109 | var d2 = d1.magnitude;
110 | var d3 = (d2 - m_DistanceBetweenNodes) / d2;
111 |
112 | m_VerletNodes[i].Position -= (d1 * (0.5f * d3));
113 | m_VerletNodes[i + 1].Position += (d1 * (0.5f * d3));
114 | }
115 | }
116 |
117 | private void ApplyCollision()
118 | {
119 | for (int i = 0; i < m_VerletNodes.Length; i++)
120 | {
121 | ResolveCollision(ref m_VerletNodes[i]);
122 | }
123 | }
124 |
125 | private void ResolveCollision(ref VerletNode node)
126 | {
127 | var colliders = Physics.OverlapSphere(node.Position, m_RopeRadius);
128 |
129 | foreach (var col in colliders)
130 | {
131 | if (col.isTrigger) continue;
132 |
133 | Vector3 closestPoint = col.ClosestPoint(node.Position);
134 | float distance = Vector3.Distance(node.Position, closestPoint);
135 |
136 | if (distance < m_RopeRadius)
137 | {
138 | Vector3 penetrationNormal = (node.Position - closestPoint).normalized;
139 | float penetrationDepth = m_RopeRadius - distance;
140 |
141 | node.Position += penetrationNormal * penetrationDepth * 1.01f;
142 | }
143 | }
144 | }
145 |
146 | public int GetNodeCount()
147 | {
148 | return m_VerletNodes.Length;
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/Assets/Scripts/VerletRope.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 8c50c20d2344cd641839086a56789943
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Packages/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "com.unity.collab-proxy": "2.3.1",
4 | "com.unity.feature.development": "1.0.1",
5 | "com.unity.textmeshpro": "3.0.6",
6 | "com.unity.timeline": "1.7.6",
7 | "com.unity.ugui": "1.0.0",
8 | "com.unity.visualscripting": "1.9.1",
9 | "com.unity.modules.ai": "1.0.0",
10 | "com.unity.modules.androidjni": "1.0.0",
11 | "com.unity.modules.animation": "1.0.0",
12 | "com.unity.modules.assetbundle": "1.0.0",
13 | "com.unity.modules.audio": "1.0.0",
14 | "com.unity.modules.cloth": "1.0.0",
15 | "com.unity.modules.director": "1.0.0",
16 | "com.unity.modules.imageconversion": "1.0.0",
17 | "com.unity.modules.imgui": "1.0.0",
18 | "com.unity.modules.jsonserialize": "1.0.0",
19 | "com.unity.modules.particlesystem": "1.0.0",
20 | "com.unity.modules.physics": "1.0.0",
21 | "com.unity.modules.physics2d": "1.0.0",
22 | "com.unity.modules.screencapture": "1.0.0",
23 | "com.unity.modules.terrain": "1.0.0",
24 | "com.unity.modules.terrainphysics": "1.0.0",
25 | "com.unity.modules.tilemap": "1.0.0",
26 | "com.unity.modules.ui": "1.0.0",
27 | "com.unity.modules.uielements": "1.0.0",
28 | "com.unity.modules.umbra": "1.0.0",
29 | "com.unity.modules.unityanalytics": "1.0.0",
30 | "com.unity.modules.unitywebrequest": "1.0.0",
31 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
32 | "com.unity.modules.unitywebrequestaudio": "1.0.0",
33 | "com.unity.modules.unitywebrequesttexture": "1.0.0",
34 | "com.unity.modules.unitywebrequestwww": "1.0.0",
35 | "com.unity.modules.vehicles": "1.0.0",
36 | "com.unity.modules.video": "1.0.0",
37 | "com.unity.modules.vr": "1.0.0",
38 | "com.unity.modules.wind": "1.0.0",
39 | "com.unity.modules.xr": "1.0.0"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Packages/packages-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "com.unity.collab-proxy": {
4 | "version": "2.3.1",
5 | "depth": 0,
6 | "source": "registry",
7 | "dependencies": {},
8 | "url": "https://packages.unity.com"
9 | },
10 | "com.unity.editorcoroutines": {
11 | "version": "1.0.0",
12 | "depth": 1,
13 | "source": "registry",
14 | "dependencies": {},
15 | "url": "https://packages.unity.com"
16 | },
17 | "com.unity.ext.nunit": {
18 | "version": "1.0.6",
19 | "depth": 2,
20 | "source": "registry",
21 | "dependencies": {},
22 | "url": "https://packages.unity.com"
23 | },
24 | "com.unity.feature.development": {
25 | "version": "1.0.1",
26 | "depth": 0,
27 | "source": "builtin",
28 | "dependencies": {
29 | "com.unity.ide.visualstudio": "2.0.22",
30 | "com.unity.ide.rider": "3.0.27",
31 | "com.unity.ide.vscode": "1.2.5",
32 | "com.unity.editorcoroutines": "1.0.0",
33 | "com.unity.performance.profile-analyzer": "1.2.2",
34 | "com.unity.test-framework": "1.1.33",
35 | "com.unity.testtools.codecoverage": "1.2.4"
36 | }
37 | },
38 | "com.unity.ide.rider": {
39 | "version": "3.0.27",
40 | "depth": 1,
41 | "source": "registry",
42 | "dependencies": {
43 | "com.unity.ext.nunit": "1.0.6"
44 | },
45 | "url": "https://packages.unity.com"
46 | },
47 | "com.unity.ide.visualstudio": {
48 | "version": "2.0.22",
49 | "depth": 1,
50 | "source": "registry",
51 | "dependencies": {
52 | "com.unity.test-framework": "1.1.9"
53 | },
54 | "url": "https://packages.unity.com"
55 | },
56 | "com.unity.ide.vscode": {
57 | "version": "1.2.5",
58 | "depth": 1,
59 | "source": "registry",
60 | "dependencies": {},
61 | "url": "https://packages.unity.com"
62 | },
63 | "com.unity.performance.profile-analyzer": {
64 | "version": "1.2.2",
65 | "depth": 1,
66 | "source": "registry",
67 | "dependencies": {},
68 | "url": "https://packages.unity.com"
69 | },
70 | "com.unity.settings-manager": {
71 | "version": "2.0.1",
72 | "depth": 2,
73 | "source": "registry",
74 | "dependencies": {},
75 | "url": "https://packages.unity.com"
76 | },
77 | "com.unity.test-framework": {
78 | "version": "1.1.33",
79 | "depth": 1,
80 | "source": "registry",
81 | "dependencies": {
82 | "com.unity.ext.nunit": "1.0.6",
83 | "com.unity.modules.imgui": "1.0.0",
84 | "com.unity.modules.jsonserialize": "1.0.0"
85 | },
86 | "url": "https://packages.unity.com"
87 | },
88 | "com.unity.testtools.codecoverage": {
89 | "version": "1.2.4",
90 | "depth": 1,
91 | "source": "registry",
92 | "dependencies": {
93 | "com.unity.test-framework": "1.0.16",
94 | "com.unity.settings-manager": "1.0.1"
95 | },
96 | "url": "https://packages.unity.com"
97 | },
98 | "com.unity.textmeshpro": {
99 | "version": "3.0.6",
100 | "depth": 0,
101 | "source": "registry",
102 | "dependencies": {
103 | "com.unity.ugui": "1.0.0"
104 | },
105 | "url": "https://packages.unity.com"
106 | },
107 | "com.unity.timeline": {
108 | "version": "1.7.6",
109 | "depth": 0,
110 | "source": "registry",
111 | "dependencies": {
112 | "com.unity.modules.director": "1.0.0",
113 | "com.unity.modules.animation": "1.0.0",
114 | "com.unity.modules.audio": "1.0.0",
115 | "com.unity.modules.particlesystem": "1.0.0"
116 | },
117 | "url": "https://packages.unity.com"
118 | },
119 | "com.unity.ugui": {
120 | "version": "1.0.0",
121 | "depth": 0,
122 | "source": "builtin",
123 | "dependencies": {
124 | "com.unity.modules.ui": "1.0.0",
125 | "com.unity.modules.imgui": "1.0.0"
126 | }
127 | },
128 | "com.unity.visualscripting": {
129 | "version": "1.9.1",
130 | "depth": 0,
131 | "source": "registry",
132 | "dependencies": {
133 | "com.unity.ugui": "1.0.0",
134 | "com.unity.modules.jsonserialize": "1.0.0"
135 | },
136 | "url": "https://packages.unity.com"
137 | },
138 | "com.unity.modules.ai": {
139 | "version": "1.0.0",
140 | "depth": 0,
141 | "source": "builtin",
142 | "dependencies": {}
143 | },
144 | "com.unity.modules.androidjni": {
145 | "version": "1.0.0",
146 | "depth": 0,
147 | "source": "builtin",
148 | "dependencies": {}
149 | },
150 | "com.unity.modules.animation": {
151 | "version": "1.0.0",
152 | "depth": 0,
153 | "source": "builtin",
154 | "dependencies": {}
155 | },
156 | "com.unity.modules.assetbundle": {
157 | "version": "1.0.0",
158 | "depth": 0,
159 | "source": "builtin",
160 | "dependencies": {}
161 | },
162 | "com.unity.modules.audio": {
163 | "version": "1.0.0",
164 | "depth": 0,
165 | "source": "builtin",
166 | "dependencies": {}
167 | },
168 | "com.unity.modules.cloth": {
169 | "version": "1.0.0",
170 | "depth": 0,
171 | "source": "builtin",
172 | "dependencies": {
173 | "com.unity.modules.physics": "1.0.0"
174 | }
175 | },
176 | "com.unity.modules.director": {
177 | "version": "1.0.0",
178 | "depth": 0,
179 | "source": "builtin",
180 | "dependencies": {
181 | "com.unity.modules.audio": "1.0.0",
182 | "com.unity.modules.animation": "1.0.0"
183 | }
184 | },
185 | "com.unity.modules.imageconversion": {
186 | "version": "1.0.0",
187 | "depth": 0,
188 | "source": "builtin",
189 | "dependencies": {}
190 | },
191 | "com.unity.modules.imgui": {
192 | "version": "1.0.0",
193 | "depth": 0,
194 | "source": "builtin",
195 | "dependencies": {}
196 | },
197 | "com.unity.modules.jsonserialize": {
198 | "version": "1.0.0",
199 | "depth": 0,
200 | "source": "builtin",
201 | "dependencies": {}
202 | },
203 | "com.unity.modules.particlesystem": {
204 | "version": "1.0.0",
205 | "depth": 0,
206 | "source": "builtin",
207 | "dependencies": {}
208 | },
209 | "com.unity.modules.physics": {
210 | "version": "1.0.0",
211 | "depth": 0,
212 | "source": "builtin",
213 | "dependencies": {}
214 | },
215 | "com.unity.modules.physics2d": {
216 | "version": "1.0.0",
217 | "depth": 0,
218 | "source": "builtin",
219 | "dependencies": {}
220 | },
221 | "com.unity.modules.screencapture": {
222 | "version": "1.0.0",
223 | "depth": 0,
224 | "source": "builtin",
225 | "dependencies": {
226 | "com.unity.modules.imageconversion": "1.0.0"
227 | }
228 | },
229 | "com.unity.modules.subsystems": {
230 | "version": "1.0.0",
231 | "depth": 1,
232 | "source": "builtin",
233 | "dependencies": {
234 | "com.unity.modules.jsonserialize": "1.0.0"
235 | }
236 | },
237 | "com.unity.modules.terrain": {
238 | "version": "1.0.0",
239 | "depth": 0,
240 | "source": "builtin",
241 | "dependencies": {}
242 | },
243 | "com.unity.modules.terrainphysics": {
244 | "version": "1.0.0",
245 | "depth": 0,
246 | "source": "builtin",
247 | "dependencies": {
248 | "com.unity.modules.physics": "1.0.0",
249 | "com.unity.modules.terrain": "1.0.0"
250 | }
251 | },
252 | "com.unity.modules.tilemap": {
253 | "version": "1.0.0",
254 | "depth": 0,
255 | "source": "builtin",
256 | "dependencies": {
257 | "com.unity.modules.physics2d": "1.0.0"
258 | }
259 | },
260 | "com.unity.modules.ui": {
261 | "version": "1.0.0",
262 | "depth": 0,
263 | "source": "builtin",
264 | "dependencies": {}
265 | },
266 | "com.unity.modules.uielements": {
267 | "version": "1.0.0",
268 | "depth": 0,
269 | "source": "builtin",
270 | "dependencies": {
271 | "com.unity.modules.ui": "1.0.0",
272 | "com.unity.modules.imgui": "1.0.0",
273 | "com.unity.modules.jsonserialize": "1.0.0"
274 | }
275 | },
276 | "com.unity.modules.umbra": {
277 | "version": "1.0.0",
278 | "depth": 0,
279 | "source": "builtin",
280 | "dependencies": {}
281 | },
282 | "com.unity.modules.unityanalytics": {
283 | "version": "1.0.0",
284 | "depth": 0,
285 | "source": "builtin",
286 | "dependencies": {
287 | "com.unity.modules.unitywebrequest": "1.0.0",
288 | "com.unity.modules.jsonserialize": "1.0.0"
289 | }
290 | },
291 | "com.unity.modules.unitywebrequest": {
292 | "version": "1.0.0",
293 | "depth": 0,
294 | "source": "builtin",
295 | "dependencies": {}
296 | },
297 | "com.unity.modules.unitywebrequestassetbundle": {
298 | "version": "1.0.0",
299 | "depth": 0,
300 | "source": "builtin",
301 | "dependencies": {
302 | "com.unity.modules.assetbundle": "1.0.0",
303 | "com.unity.modules.unitywebrequest": "1.0.0"
304 | }
305 | },
306 | "com.unity.modules.unitywebrequestaudio": {
307 | "version": "1.0.0",
308 | "depth": 0,
309 | "source": "builtin",
310 | "dependencies": {
311 | "com.unity.modules.unitywebrequest": "1.0.0",
312 | "com.unity.modules.audio": "1.0.0"
313 | }
314 | },
315 | "com.unity.modules.unitywebrequesttexture": {
316 | "version": "1.0.0",
317 | "depth": 0,
318 | "source": "builtin",
319 | "dependencies": {
320 | "com.unity.modules.unitywebrequest": "1.0.0",
321 | "com.unity.modules.imageconversion": "1.0.0"
322 | }
323 | },
324 | "com.unity.modules.unitywebrequestwww": {
325 | "version": "1.0.0",
326 | "depth": 0,
327 | "source": "builtin",
328 | "dependencies": {
329 | "com.unity.modules.unitywebrequest": "1.0.0",
330 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
331 | "com.unity.modules.unitywebrequestaudio": "1.0.0",
332 | "com.unity.modules.audio": "1.0.0",
333 | "com.unity.modules.assetbundle": "1.0.0",
334 | "com.unity.modules.imageconversion": "1.0.0"
335 | }
336 | },
337 | "com.unity.modules.vehicles": {
338 | "version": "1.0.0",
339 | "depth": 0,
340 | "source": "builtin",
341 | "dependencies": {
342 | "com.unity.modules.physics": "1.0.0"
343 | }
344 | },
345 | "com.unity.modules.video": {
346 | "version": "1.0.0",
347 | "depth": 0,
348 | "source": "builtin",
349 | "dependencies": {
350 | "com.unity.modules.audio": "1.0.0",
351 | "com.unity.modules.ui": "1.0.0",
352 | "com.unity.modules.unitywebrequest": "1.0.0"
353 | }
354 | },
355 | "com.unity.modules.vr": {
356 | "version": "1.0.0",
357 | "depth": 0,
358 | "source": "builtin",
359 | "dependencies": {
360 | "com.unity.modules.jsonserialize": "1.0.0",
361 | "com.unity.modules.physics": "1.0.0",
362 | "com.unity.modules.xr": "1.0.0"
363 | }
364 | },
365 | "com.unity.modules.wind": {
366 | "version": "1.0.0",
367 | "depth": 0,
368 | "source": "builtin",
369 | "dependencies": {}
370 | },
371 | "com.unity.modules.xr": {
372 | "version": "1.0.0",
373 | "depth": 0,
374 | "source": "builtin",
375 | "dependencies": {
376 | "com.unity.modules.physics": "1.0.0",
377 | "com.unity.modules.jsonserialize": "1.0.0",
378 | "com.unity.modules.subsystems": "1.0.0"
379 | }
380 | }
381 | }
382 | }
383 |
--------------------------------------------------------------------------------
/ProjectSettings/AudioManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!11 &1
4 | AudioManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Volume: 1
8 | Rolloff Scale: 1
9 | Doppler Factor: 1
10 | Default Speaker Mode: 2
11 | m_SampleRate: 0
12 | m_DSPBufferSize: 1024
13 | m_VirtualVoiceCount: 512
14 | m_RealVoiceCount: 32
15 | m_SpatializerPlugin:
16 | m_AmbisonicDecoderPlugin:
17 | m_DisableAudio: 0
18 | m_VirtualizeEffects: 1
19 | m_RequestedDSPBufferSize: 1024
20 |
--------------------------------------------------------------------------------
/ProjectSettings/ClusterInputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!236 &1
4 | ClusterInputManager:
5 | m_ObjectHideFlags: 0
6 | m_Inputs: []
7 |
--------------------------------------------------------------------------------
/ProjectSettings/DynamicsManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!55 &1
4 | PhysicsManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 11
7 | m_Gravity: {x: 0, y: -9.81, z: 0}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_BounceThreshold: 2
10 | m_SleepThreshold: 0.005
11 | m_DefaultContactOffset: 0.01
12 | m_DefaultSolverIterations: 6
13 | m_DefaultSolverVelocityIterations: 1
14 | m_QueriesHitBackfaces: 0
15 | m_QueriesHitTriggers: 1
16 | m_EnableAdaptiveForce: 0
17 | m_ClothInterCollisionDistance: 0
18 | m_ClothInterCollisionStiffness: 0
19 | m_ContactsGeneration: 1
20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
21 | m_AutoSimulation: 1
22 | m_AutoSyncTransforms: 0
23 | m_ReuseCollisionCallbacks: 1
24 | m_ClothInterCollisionSettingsToggle: 0
25 | m_ContactPairsMode: 0
26 | m_BroadphaseType: 0
27 | m_WorldBounds:
28 | m_Center: {x: 0, y: 0, z: 0}
29 | m_Extent: {x: 250, y: 250, z: 250}
30 | m_WorldSubdivisions: 8
31 | m_FrictionType: 0
32 | m_EnableEnhancedDeterminism: 0
33 | m_EnableUnifiedHeightmaps: 1
34 | m_DefaultMaxAngluarSpeed: 7
35 |
--------------------------------------------------------------------------------
/ProjectSettings/EditorBuildSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1045 &1
4 | EditorBuildSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Scenes: []
8 | m_configObjects: {}
9 |
--------------------------------------------------------------------------------
/ProjectSettings/EditorSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!159 &1
4 | EditorSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 11
7 | m_ExternalVersionControlSupport: Visible Meta Files
8 | m_SerializationMode: 2
9 | m_LineEndingsForNewScripts: 0
10 | m_DefaultBehaviorMode: 0
11 | m_PrefabRegularEnvironment: {fileID: 0}
12 | m_PrefabUIEnvironment: {fileID: 0}
13 | m_SpritePackerMode: 0
14 | m_SpritePackerPaddingPower: 1
15 | m_EtcTextureCompressorBehavior: 1
16 | m_EtcTextureFastCompressor: 1
17 | m_EtcTextureNormalCompressor: 2
18 | m_EtcTextureBestCompressor: 4
19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
20 | m_ProjectGenerationRootNamespace:
21 | m_CollabEditorSettings:
22 | inProgressEnabled: 1
23 | m_EnableTextureStreamingInEditMode: 1
24 | m_EnableTextureStreamingInPlayMode: 1
25 | m_AsyncShaderCompilation: 1
26 | m_EnterPlayModeOptionsEnabled: 0
27 | m_EnterPlayModeOptions: 3
28 | m_ShowLightmapResolutionOverlay: 1
29 | m_UseLegacyProbeSampleCount: 0
30 | m_SerializeInlineMappingsOnOneLine: 1
31 |
--------------------------------------------------------------------------------
/ProjectSettings/GraphicsSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!30 &1
4 | GraphicsSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 13
7 | m_Deferred:
8 | m_Mode: 1
9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
10 | m_DeferredReflections:
11 | m_Mode: 1
12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
13 | m_ScreenSpaceShadows:
14 | m_Mode: 1
15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
16 | m_LegacyDeferred:
17 | m_Mode: 1
18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}
19 | m_DepthNormals:
20 | m_Mode: 1
21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
22 | m_MotionVectors:
23 | m_Mode: 1
24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
25 | m_LightHalo:
26 | m_Mode: 1
27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
28 | m_LensFlare:
29 | m_Mode: 1
30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
31 | m_AlwaysIncludedShaders:
32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
38 | m_PreloadedShaders: []
39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
40 | type: 0}
41 | m_CustomRenderPipeline: {fileID: 0}
42 | m_TransparencySortMode: 0
43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1}
44 | m_DefaultRenderingPath: 1
45 | m_DefaultMobileRenderingPath: 1
46 | m_TierSettings: []
47 | m_LightmapStripping: 0
48 | m_FogStripping: 0
49 | m_InstancingStripping: 0
50 | m_LightmapKeepPlain: 1
51 | m_LightmapKeepDirCombined: 1
52 | m_LightmapKeepDynamicPlain: 1
53 | m_LightmapKeepDynamicDirCombined: 1
54 | m_LightmapKeepShadowMask: 1
55 | m_LightmapKeepSubtractive: 1
56 | m_FogKeepLinear: 1
57 | m_FogKeepExp: 1
58 | m_FogKeepExp2: 1
59 | m_AlbedoSwatchInfos: []
60 | m_LightsUseLinearIntensity: 0
61 | m_LightsUseColorTemperature: 0
62 | m_LogWhenShaderIsCompiled: 0
63 | m_AllowEnlightenSupportForUpgradedProject: 0
64 |
--------------------------------------------------------------------------------
/ProjectSettings/InputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!13 &1
4 | InputManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Axes:
8 | - serializedVersion: 3
9 | m_Name: Horizontal
10 | descriptiveName:
11 | descriptiveNegativeName:
12 | negativeButton: left
13 | positiveButton: right
14 | altNegativeButton: a
15 | altPositiveButton: d
16 | gravity: 3
17 | dead: 0.001
18 | sensitivity: 3
19 | snap: 1
20 | invert: 0
21 | type: 0
22 | axis: 0
23 | joyNum: 0
24 | - serializedVersion: 3
25 | m_Name: Vertical
26 | descriptiveName:
27 | descriptiveNegativeName:
28 | negativeButton: down
29 | positiveButton: up
30 | altNegativeButton: s
31 | altPositiveButton: w
32 | gravity: 3
33 | dead: 0.001
34 | sensitivity: 3
35 | snap: 1
36 | invert: 0
37 | type: 0
38 | axis: 0
39 | joyNum: 0
40 | - serializedVersion: 3
41 | m_Name: Fire1
42 | descriptiveName:
43 | descriptiveNegativeName:
44 | negativeButton:
45 | positiveButton: left ctrl
46 | altNegativeButton:
47 | altPositiveButton: mouse 0
48 | gravity: 1000
49 | dead: 0.001
50 | sensitivity: 1000
51 | snap: 0
52 | invert: 0
53 | type: 0
54 | axis: 0
55 | joyNum: 0
56 | - serializedVersion: 3
57 | m_Name: Fire2
58 | descriptiveName:
59 | descriptiveNegativeName:
60 | negativeButton:
61 | positiveButton: left alt
62 | altNegativeButton:
63 | altPositiveButton: mouse 1
64 | gravity: 1000
65 | dead: 0.001
66 | sensitivity: 1000
67 | snap: 0
68 | invert: 0
69 | type: 0
70 | axis: 0
71 | joyNum: 0
72 | - serializedVersion: 3
73 | m_Name: Fire3
74 | descriptiveName:
75 | descriptiveNegativeName:
76 | negativeButton:
77 | positiveButton: left shift
78 | altNegativeButton:
79 | altPositiveButton: mouse 2
80 | gravity: 1000
81 | dead: 0.001
82 | sensitivity: 1000
83 | snap: 0
84 | invert: 0
85 | type: 0
86 | axis: 0
87 | joyNum: 0
88 | - serializedVersion: 3
89 | m_Name: Jump
90 | descriptiveName:
91 | descriptiveNegativeName:
92 | negativeButton:
93 | positiveButton: space
94 | altNegativeButton:
95 | altPositiveButton:
96 | gravity: 1000
97 | dead: 0.001
98 | sensitivity: 1000
99 | snap: 0
100 | invert: 0
101 | type: 0
102 | axis: 0
103 | joyNum: 0
104 | - serializedVersion: 3
105 | m_Name: Mouse X
106 | descriptiveName:
107 | descriptiveNegativeName:
108 | negativeButton:
109 | positiveButton:
110 | altNegativeButton:
111 | altPositiveButton:
112 | gravity: 0
113 | dead: 0
114 | sensitivity: 0.1
115 | snap: 0
116 | invert: 0
117 | type: 1
118 | axis: 0
119 | joyNum: 0
120 | - serializedVersion: 3
121 | m_Name: Mouse Y
122 | descriptiveName:
123 | descriptiveNegativeName:
124 | negativeButton:
125 | positiveButton:
126 | altNegativeButton:
127 | altPositiveButton:
128 | gravity: 0
129 | dead: 0
130 | sensitivity: 0.1
131 | snap: 0
132 | invert: 0
133 | type: 1
134 | axis: 1
135 | joyNum: 0
136 | - serializedVersion: 3
137 | m_Name: Mouse ScrollWheel
138 | descriptiveName:
139 | descriptiveNegativeName:
140 | negativeButton:
141 | positiveButton:
142 | altNegativeButton:
143 | altPositiveButton:
144 | gravity: 0
145 | dead: 0
146 | sensitivity: 0.1
147 | snap: 0
148 | invert: 0
149 | type: 1
150 | axis: 2
151 | joyNum: 0
152 | - serializedVersion: 3
153 | m_Name: Horizontal
154 | descriptiveName:
155 | descriptiveNegativeName:
156 | negativeButton:
157 | positiveButton:
158 | altNegativeButton:
159 | altPositiveButton:
160 | gravity: 0
161 | dead: 0.19
162 | sensitivity: 1
163 | snap: 0
164 | invert: 0
165 | type: 2
166 | axis: 0
167 | joyNum: 0
168 | - serializedVersion: 3
169 | m_Name: Vertical
170 | descriptiveName:
171 | descriptiveNegativeName:
172 | negativeButton:
173 | positiveButton:
174 | altNegativeButton:
175 | altPositiveButton:
176 | gravity: 0
177 | dead: 0.19
178 | sensitivity: 1
179 | snap: 0
180 | invert: 1
181 | type: 2
182 | axis: 1
183 | joyNum: 0
184 | - serializedVersion: 3
185 | m_Name: Fire1
186 | descriptiveName:
187 | descriptiveNegativeName:
188 | negativeButton:
189 | positiveButton: joystick button 0
190 | altNegativeButton:
191 | altPositiveButton:
192 | gravity: 1000
193 | dead: 0.001
194 | sensitivity: 1000
195 | snap: 0
196 | invert: 0
197 | type: 0
198 | axis: 0
199 | joyNum: 0
200 | - serializedVersion: 3
201 | m_Name: Fire2
202 | descriptiveName:
203 | descriptiveNegativeName:
204 | negativeButton:
205 | positiveButton: joystick button 1
206 | altNegativeButton:
207 | altPositiveButton:
208 | gravity: 1000
209 | dead: 0.001
210 | sensitivity: 1000
211 | snap: 0
212 | invert: 0
213 | type: 0
214 | axis: 0
215 | joyNum: 0
216 | - serializedVersion: 3
217 | m_Name: Fire3
218 | descriptiveName:
219 | descriptiveNegativeName:
220 | negativeButton:
221 | positiveButton: joystick button 2
222 | altNegativeButton:
223 | altPositiveButton:
224 | gravity: 1000
225 | dead: 0.001
226 | sensitivity: 1000
227 | snap: 0
228 | invert: 0
229 | type: 0
230 | axis: 0
231 | joyNum: 0
232 | - serializedVersion: 3
233 | m_Name: Jump
234 | descriptiveName:
235 | descriptiveNegativeName:
236 | negativeButton:
237 | positiveButton: joystick button 3
238 | altNegativeButton:
239 | altPositiveButton:
240 | gravity: 1000
241 | dead: 0.001
242 | sensitivity: 1000
243 | snap: 0
244 | invert: 0
245 | type: 0
246 | axis: 0
247 | joyNum: 0
248 | - serializedVersion: 3
249 | m_Name: Submit
250 | descriptiveName:
251 | descriptiveNegativeName:
252 | negativeButton:
253 | positiveButton: return
254 | altNegativeButton:
255 | altPositiveButton: joystick button 0
256 | gravity: 1000
257 | dead: 0.001
258 | sensitivity: 1000
259 | snap: 0
260 | invert: 0
261 | type: 0
262 | axis: 0
263 | joyNum: 0
264 | - serializedVersion: 3
265 | m_Name: Submit
266 | descriptiveName:
267 | descriptiveNegativeName:
268 | negativeButton:
269 | positiveButton: enter
270 | altNegativeButton:
271 | altPositiveButton: space
272 | gravity: 1000
273 | dead: 0.001
274 | sensitivity: 1000
275 | snap: 0
276 | invert: 0
277 | type: 0
278 | axis: 0
279 | joyNum: 0
280 | - serializedVersion: 3
281 | m_Name: Cancel
282 | descriptiveName:
283 | descriptiveNegativeName:
284 | negativeButton:
285 | positiveButton: escape
286 | altNegativeButton:
287 | altPositiveButton: joystick button 1
288 | gravity: 1000
289 | dead: 0.001
290 | sensitivity: 1000
291 | snap: 0
292 | invert: 0
293 | type: 0
294 | axis: 0
295 | joyNum: 0
296 |
--------------------------------------------------------------------------------
/ProjectSettings/MemorySettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!387306366 &1
4 | MemorySettings:
5 | m_ObjectHideFlags: 0
6 | m_EditorMemorySettings:
7 | m_MainAllocatorBlockSize: -1
8 | m_ThreadAllocatorBlockSize: -1
9 | m_MainGfxBlockSize: -1
10 | m_ThreadGfxBlockSize: -1
11 | m_CacheBlockSize: -1
12 | m_TypetreeBlockSize: -1
13 | m_ProfilerBlockSize: -1
14 | m_ProfilerEditorBlockSize: -1
15 | m_BucketAllocatorGranularity: -1
16 | m_BucketAllocatorBucketsCount: -1
17 | m_BucketAllocatorBlockSize: -1
18 | m_BucketAllocatorBlockCount: -1
19 | m_ProfilerBucketAllocatorGranularity: -1
20 | m_ProfilerBucketAllocatorBucketsCount: -1
21 | m_ProfilerBucketAllocatorBlockSize: -1
22 | m_ProfilerBucketAllocatorBlockCount: -1
23 | m_TempAllocatorSizeMain: -1
24 | m_JobTempAllocatorBlockSize: -1
25 | m_BackgroundJobTempAllocatorBlockSize: -1
26 | m_JobTempAllocatorReducedBlockSize: -1
27 | m_TempAllocatorSizeGIBakingWorker: -1
28 | m_TempAllocatorSizeNavMeshWorker: -1
29 | m_TempAllocatorSizeAudioWorker: -1
30 | m_TempAllocatorSizeCloudWorker: -1
31 | m_TempAllocatorSizeGfx: -1
32 | m_TempAllocatorSizeJobWorker: -1
33 | m_TempAllocatorSizeBackgroundWorker: -1
34 | m_TempAllocatorSizePreloadManager: -1
35 | m_PlatformMemorySettings: {}
36 |
--------------------------------------------------------------------------------
/ProjectSettings/NavMeshAreas.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!126 &1
4 | NavMeshProjectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | areas:
8 | - name: Walkable
9 | cost: 1
10 | - name: Not Walkable
11 | cost: 1
12 | - name: Jump
13 | cost: 2
14 | - name:
15 | cost: 1
16 | - name:
17 | cost: 1
18 | - name:
19 | cost: 1
20 | - name:
21 | cost: 1
22 | - name:
23 | cost: 1
24 | - name:
25 | cost: 1
26 | - name:
27 | cost: 1
28 | - name:
29 | cost: 1
30 | - name:
31 | cost: 1
32 | - name:
33 | cost: 1
34 | - name:
35 | cost: 1
36 | - name:
37 | cost: 1
38 | - name:
39 | cost: 1
40 | - name:
41 | cost: 1
42 | - name:
43 | cost: 1
44 | - name:
45 | cost: 1
46 | - name:
47 | cost: 1
48 | - name:
49 | cost: 1
50 | - name:
51 | cost: 1
52 | - name:
53 | cost: 1
54 | - name:
55 | cost: 1
56 | - name:
57 | cost: 1
58 | - name:
59 | cost: 1
60 | - name:
61 | cost: 1
62 | - name:
63 | cost: 1
64 | - name:
65 | cost: 1
66 | - name:
67 | cost: 1
68 | - name:
69 | cost: 1
70 | - name:
71 | cost: 1
72 | m_LastAgentTypeID: -887442657
73 | m_Settings:
74 | - serializedVersion: 2
75 | agentTypeID: 0
76 | agentRadius: 0.5
77 | agentHeight: 2
78 | agentSlope: 45
79 | agentClimb: 0.75
80 | ledgeDropHeight: 0
81 | maxJumpAcrossDistance: 0
82 | minRegionArea: 2
83 | manualCellSize: 0
84 | cellSize: 0.16666667
85 | manualTileSize: 0
86 | tileSize: 256
87 | accuratePlacement: 0
88 | debug:
89 | m_Flags: 0
90 | m_SettingNames:
91 | - Humanoid
92 |
--------------------------------------------------------------------------------
/ProjectSettings/PackageManagerSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &1
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 61
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | m_EnablePreReleasePackages: 0
16 | m_EnablePackageDependencies: 0
17 | m_AdvancedSettingsExpanded: 1
18 | m_ScopedRegistriesSettingsExpanded: 1
19 | m_SeeAllPackageVersions: 0
20 | oneTimeWarningShown: 0
21 | m_Registries:
22 | - m_Id: main
23 | m_Name:
24 | m_Url: https://packages.unity.com
25 | m_Scopes: []
26 | m_IsDefault: 1
27 | m_Capabilities: 7
28 | m_UserSelectedRegistryName:
29 | m_UserAddingNewScopedRegistry: 0
30 | m_RegistryInfoDraft:
31 | m_Modified: 0
32 | m_ErrorMessage:
33 | m_UserModificationsInstanceId: -830
34 | m_OriginalInstanceId: -832
35 | m_LoadAssets: 0
36 |
--------------------------------------------------------------------------------
/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "m_Dictionary": {
3 | "m_DictionaryValues": []
4 | }
5 | }
--------------------------------------------------------------------------------
/ProjectSettings/Physics2DSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!19 &1
4 | Physics2DSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 4
7 | m_Gravity: {x: 0, y: -9.81}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_VelocityIterations: 8
10 | m_PositionIterations: 3
11 | m_VelocityThreshold: 1
12 | m_MaxLinearCorrection: 0.2
13 | m_MaxAngularCorrection: 8
14 | m_MaxTranslationSpeed: 100
15 | m_MaxRotationSpeed: 360
16 | m_BaumgarteScale: 0.2
17 | m_BaumgarteTimeOfImpactScale: 0.75
18 | m_TimeToSleep: 0.5
19 | m_LinearSleepTolerance: 0.01
20 | m_AngularSleepTolerance: 2
21 | m_DefaultContactOffset: 0.01
22 | m_JobOptions:
23 | serializedVersion: 2
24 | useMultithreading: 0
25 | useConsistencySorting: 0
26 | m_InterpolationPosesPerJob: 100
27 | m_NewContactsPerJob: 30
28 | m_CollideContactsPerJob: 100
29 | m_ClearFlagsPerJob: 200
30 | m_ClearBodyForcesPerJob: 200
31 | m_SyncDiscreteFixturesPerJob: 50
32 | m_SyncContinuousFixturesPerJob: 50
33 | m_FindNearestContactsPerJob: 100
34 | m_UpdateTriggerContactsPerJob: 100
35 | m_IslandSolverCostThreshold: 100
36 | m_IslandSolverBodyCostScale: 1
37 | m_IslandSolverContactCostScale: 10
38 | m_IslandSolverJointCostScale: 10
39 | m_IslandSolverBodiesPerJob: 50
40 | m_IslandSolverContactsPerJob: 50
41 | m_AutoSimulation: 1
42 | m_QueriesHitTriggers: 1
43 | m_QueriesStartInColliders: 1
44 | m_CallbacksOnDisable: 1
45 | m_ReuseCollisionCallbacks: 1
46 | m_AutoSyncTransforms: 0
47 | m_AlwaysShowColliders: 0
48 | m_ShowColliderSleep: 1
49 | m_ShowColliderContacts: 0
50 | m_ShowColliderAABB: 0
51 | m_ContactArrowScale: 0.2
52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
57 |
--------------------------------------------------------------------------------
/ProjectSettings/PresetManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1386491679 &1
4 | PresetManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_DefaultPresets: {}
8 |
--------------------------------------------------------------------------------
/ProjectSettings/ProjectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!129 &1
4 | PlayerSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 26
7 | productGUID: 415da110ba9a3b1459a0efe602472609
8 | AndroidProfiler: 0
9 | AndroidFilterTouchesWhenObscured: 0
10 | AndroidEnableSustainedPerformanceMode: 0
11 | defaultScreenOrientation: 4
12 | targetDevice: 2
13 | useOnDemandResources: 0
14 | accelerometerFrequency: 60
15 | companyName: DefaultCompany
16 | productName: UnityVerletRope
17 | defaultCursor: {fileID: 0}
18 | cursorHotspot: {x: 0, y: 0}
19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
20 | m_ShowUnitySplashScreen: 1
21 | m_ShowUnitySplashLogo: 1
22 | m_SplashScreenOverlayOpacity: 1
23 | m_SplashScreenAnimation: 1
24 | m_SplashScreenLogoStyle: 1
25 | m_SplashScreenDrawMode: 0
26 | m_SplashScreenBackgroundAnimationZoom: 1
27 | m_SplashScreenLogoAnimationZoom: 1
28 | m_SplashScreenBackgroundLandscapeAspect: 1
29 | m_SplashScreenBackgroundPortraitAspect: 1
30 | m_SplashScreenBackgroundLandscapeUvs:
31 | serializedVersion: 2
32 | x: 0
33 | y: 0
34 | width: 1
35 | height: 1
36 | m_SplashScreenBackgroundPortraitUvs:
37 | serializedVersion: 2
38 | x: 0
39 | y: 0
40 | width: 1
41 | height: 1
42 | m_SplashScreenLogos: []
43 | m_VirtualRealitySplashScreen: {fileID: 0}
44 | m_HolographicTrackingLossScreen: {fileID: 0}
45 | defaultScreenWidth: 1920
46 | defaultScreenHeight: 1080
47 | defaultScreenWidthWeb: 960
48 | defaultScreenHeightWeb: 600
49 | m_StereoRenderingPath: 0
50 | m_ActiveColorSpace: 0
51 | unsupportedMSAAFallback: 0
52 | m_SpriteBatchVertexThreshold: 300
53 | m_MTRendering: 1
54 | mipStripping: 0
55 | numberOfMipsStripped: 0
56 | numberOfMipsStrippedPerMipmapLimitGroup: {}
57 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000
58 | iosShowActivityIndicatorOnLoading: -1
59 | androidShowActivityIndicatorOnLoading: -1
60 | iosUseCustomAppBackgroundBehavior: 0
61 | allowedAutorotateToPortrait: 1
62 | allowedAutorotateToPortraitUpsideDown: 1
63 | allowedAutorotateToLandscapeRight: 1
64 | allowedAutorotateToLandscapeLeft: 1
65 | useOSAutorotation: 1
66 | use32BitDisplayBuffer: 1
67 | preserveFramebufferAlpha: 0
68 | disableDepthAndStencilBuffers: 0
69 | androidStartInFullscreen: 1
70 | androidRenderOutsideSafeArea: 1
71 | androidUseSwappy: 1
72 | androidBlitType: 0
73 | androidResizableWindow: 0
74 | androidDefaultWindowWidth: 1920
75 | androidDefaultWindowHeight: 1080
76 | androidMinimumWindowWidth: 400
77 | androidMinimumWindowHeight: 300
78 | androidFullscreenMode: 1
79 | defaultIsNativeResolution: 1
80 | macRetinaSupport: 1
81 | runInBackground: 1
82 | captureSingleScreen: 0
83 | muteOtherAudioSources: 0
84 | Prepare IOS For Recording: 0
85 | Force IOS Speakers When Recording: 0
86 | deferSystemGesturesMode: 0
87 | hideHomeButton: 0
88 | submitAnalytics: 1
89 | usePlayerLog: 1
90 | dedicatedServerOptimizations: 0
91 | bakeCollisionMeshes: 0
92 | forceSingleInstance: 0
93 | useFlipModelSwapchain: 1
94 | resizableWindow: 0
95 | useMacAppStoreValidation: 0
96 | macAppStoreCategory: public.app-category.games
97 | gpuSkinning: 1
98 | xboxPIXTextureCapture: 0
99 | xboxEnableAvatar: 0
100 | xboxEnableKinect: 0
101 | xboxEnableKinectAutoTracking: 0
102 | xboxEnableFitness: 0
103 | visibleInBackground: 1
104 | allowFullscreenSwitch: 1
105 | fullscreenMode: 1
106 | xboxSpeechDB: 0
107 | xboxEnableHeadOrientation: 0
108 | xboxEnableGuest: 0
109 | xboxEnablePIXSampling: 0
110 | metalFramebufferOnly: 0
111 | xboxOneResolution: 0
112 | xboxOneSResolution: 0
113 | xboxOneXResolution: 3
114 | xboxOneMonoLoggingLevel: 0
115 | xboxOneLoggingLevel: 1
116 | xboxOneDisableEsram: 0
117 | xboxOneEnableTypeOptimization: 0
118 | xboxOnePresentImmediateThreshold: 0
119 | switchQueueCommandMemory: 0
120 | switchQueueControlMemory: 16384
121 | switchQueueComputeMemory: 262144
122 | switchNVNShaderPoolsGranularity: 33554432
123 | switchNVNDefaultPoolsGranularity: 16777216
124 | switchNVNOtherPoolsGranularity: 16777216
125 | switchGpuScratchPoolGranularity: 2097152
126 | switchAllowGpuScratchShrinking: 0
127 | switchNVNMaxPublicTextureIDCount: 0
128 | switchNVNMaxPublicSamplerIDCount: 0
129 | switchNVNGraphicsFirmwareMemory: 32
130 | switchMaxWorkerMultiple: 8
131 | stadiaPresentMode: 0
132 | stadiaTargetFramerate: 0
133 | vulkanNumSwapchainBuffers: 3
134 | vulkanEnableSetSRGBWrite: 0
135 | vulkanEnablePreTransform: 1
136 | vulkanEnableLateAcquireNextImage: 0
137 | vulkanEnableCommandBufferRecycling: 1
138 | loadStoreDebugModeEnabled: 0
139 | bundleVersion: 0.1
140 | preloadedAssets: []
141 | metroInputSource: 0
142 | wsaTransparentSwapchain: 0
143 | m_HolographicPauseOnTrackingLoss: 1
144 | xboxOneDisableKinectGpuReservation: 1
145 | xboxOneEnable7thCore: 1
146 | vrSettings:
147 | enable360StereoCapture: 0
148 | isWsaHolographicRemotingEnabled: 0
149 | enableFrameTimingStats: 0
150 | enableOpenGLProfilerGPURecorders: 1
151 | allowHDRDisplaySupport: 0
152 | useHDRDisplay: 0
153 | hdrBitDepth: 0
154 | m_ColorGamuts: 00000000
155 | targetPixelDensity: 30
156 | resolutionScalingMode: 0
157 | resetResolutionOnWindowResize: 0
158 | androidSupportedAspectRatio: 1
159 | androidMaxAspectRatio: 2.1
160 | applicationIdentifier: {}
161 | buildNumber:
162 | Standalone: 0
163 | VisionOS: 0
164 | iPhone: 0
165 | tvOS: 0
166 | overrideDefaultApplicationIdentifier: 0
167 | AndroidBundleVersionCode: 1
168 | AndroidMinSdkVersion: 22
169 | AndroidTargetSdkVersion: 0
170 | AndroidPreferredInstallLocation: 1
171 | aotOptions:
172 | stripEngineCode: 1
173 | iPhoneStrippingLevel: 0
174 | iPhoneScriptCallOptimization: 0
175 | ForceInternetPermission: 0
176 | ForceSDCardPermission: 0
177 | CreateWallpaper: 0
178 | APKExpansionFiles: 0
179 | keepLoadedShadersAlive: 0
180 | StripUnusedMeshComponents: 1
181 | strictShaderVariantMatching: 0
182 | VertexChannelCompressionMask: 4054
183 | iPhoneSdkVersion: 988
184 | iOSTargetOSVersionString: 12.0
185 | tvOSSdkVersion: 0
186 | tvOSRequireExtendedGameController: 0
187 | tvOSTargetOSVersionString: 12.0
188 | VisionOSSdkVersion: 0
189 | VisionOSTargetOSVersionString: 1.0
190 | uIPrerenderedIcon: 0
191 | uIRequiresPersistentWiFi: 0
192 | uIRequiresFullScreen: 1
193 | uIStatusBarHidden: 1
194 | uIExitOnSuspend: 0
195 | uIStatusBarStyle: 0
196 | appleTVSplashScreen: {fileID: 0}
197 | appleTVSplashScreen2x: {fileID: 0}
198 | tvOSSmallIconLayers: []
199 | tvOSSmallIconLayers2x: []
200 | tvOSLargeIconLayers: []
201 | tvOSLargeIconLayers2x: []
202 | tvOSTopShelfImageLayers: []
203 | tvOSTopShelfImageLayers2x: []
204 | tvOSTopShelfImageWideLayers: []
205 | tvOSTopShelfImageWideLayers2x: []
206 | iOSLaunchScreenType: 0
207 | iOSLaunchScreenPortrait: {fileID: 0}
208 | iOSLaunchScreenLandscape: {fileID: 0}
209 | iOSLaunchScreenBackgroundColor:
210 | serializedVersion: 2
211 | rgba: 0
212 | iOSLaunchScreenFillPct: 100
213 | iOSLaunchScreenSize: 100
214 | iOSLaunchScreenCustomXibPath:
215 | iOSLaunchScreeniPadType: 0
216 | iOSLaunchScreeniPadImage: {fileID: 0}
217 | iOSLaunchScreeniPadBackgroundColor:
218 | serializedVersion: 2
219 | rgba: 0
220 | iOSLaunchScreeniPadFillPct: 100
221 | iOSLaunchScreeniPadSize: 100
222 | iOSLaunchScreeniPadCustomXibPath:
223 | iOSLaunchScreenCustomStoryboardPath:
224 | iOSLaunchScreeniPadCustomStoryboardPath:
225 | iOSDeviceRequirements: []
226 | iOSURLSchemes: []
227 | macOSURLSchemes: []
228 | iOSBackgroundModes: 0
229 | iOSMetalForceHardShadows: 0
230 | metalEditorSupport: 1
231 | metalAPIValidation: 1
232 | iOSRenderExtraFrameOnPause: 0
233 | iosCopyPluginsCodeInsteadOfSymlink: 0
234 | appleDeveloperTeamID:
235 | iOSManualSigningProvisioningProfileID:
236 | tvOSManualSigningProvisioningProfileID:
237 | VisionOSManualSigningProvisioningProfileID:
238 | iOSManualSigningProvisioningProfileType: 0
239 | tvOSManualSigningProvisioningProfileType: 0
240 | VisionOSManualSigningProvisioningProfileType: 0
241 | appleEnableAutomaticSigning: 0
242 | iOSRequireARKit: 0
243 | iOSAutomaticallyDetectAndAddCapabilities: 1
244 | appleEnableProMotion: 0
245 | shaderPrecisionModel: 0
246 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea
247 | templatePackageId: com.unity.template.3d@8.1.1
248 | templateDefaultScene: Assets/Scenes/SampleScene.unity
249 | useCustomMainManifest: 0
250 | useCustomLauncherManifest: 0
251 | useCustomMainGradleTemplate: 0
252 | useCustomLauncherGradleManifest: 0
253 | useCustomBaseGradleTemplate: 0
254 | useCustomGradlePropertiesTemplate: 0
255 | useCustomGradleSettingsTemplate: 0
256 | useCustomProguardFile: 0
257 | AndroidTargetArchitectures: 1
258 | AndroidTargetDevices: 0
259 | AndroidSplashScreenScale: 0
260 | androidSplashScreen: {fileID: 0}
261 | AndroidKeystoreName:
262 | AndroidKeyaliasName:
263 | AndroidEnableArmv9SecurityFeatures: 0
264 | AndroidBuildApkPerCpuArchitecture: 0
265 | AndroidTVCompatibility: 0
266 | AndroidIsGame: 1
267 | AndroidEnableTango: 0
268 | androidEnableBanner: 1
269 | androidUseLowAccuracyLocation: 0
270 | androidUseCustomKeystore: 0
271 | m_AndroidBanners:
272 | - width: 320
273 | height: 180
274 | banner: {fileID: 0}
275 | androidGamepadSupportLevel: 0
276 | chromeosInputEmulation: 1
277 | AndroidMinifyRelease: 0
278 | AndroidMinifyDebug: 0
279 | AndroidValidateAppBundleSize: 1
280 | AndroidAppBundleSizeToValidate: 150
281 | m_BuildTargetIcons: []
282 | m_BuildTargetPlatformIcons: []
283 | m_BuildTargetBatching:
284 | - m_BuildTarget: Standalone
285 | m_StaticBatching: 1
286 | m_DynamicBatching: 0
287 | - m_BuildTarget: tvOS
288 | m_StaticBatching: 1
289 | m_DynamicBatching: 0
290 | - m_BuildTarget: Android
291 | m_StaticBatching: 1
292 | m_DynamicBatching: 0
293 | - m_BuildTarget: iPhone
294 | m_StaticBatching: 1
295 | m_DynamicBatching: 0
296 | - m_BuildTarget: WebGL
297 | m_StaticBatching: 0
298 | m_DynamicBatching: 0
299 | m_BuildTargetShaderSettings: []
300 | m_BuildTargetGraphicsJobs:
301 | - m_BuildTarget: MacStandaloneSupport
302 | m_GraphicsJobs: 0
303 | - m_BuildTarget: Switch
304 | m_GraphicsJobs: 1
305 | - m_BuildTarget: MetroSupport
306 | m_GraphicsJobs: 1
307 | - m_BuildTarget: AppleTVSupport
308 | m_GraphicsJobs: 0
309 | - m_BuildTarget: BJMSupport
310 | m_GraphicsJobs: 1
311 | - m_BuildTarget: LinuxStandaloneSupport
312 | m_GraphicsJobs: 1
313 | - m_BuildTarget: PS4Player
314 | m_GraphicsJobs: 1
315 | - m_BuildTarget: iOSSupport
316 | m_GraphicsJobs: 0
317 | - m_BuildTarget: WindowsStandaloneSupport
318 | m_GraphicsJobs: 1
319 | - m_BuildTarget: XboxOnePlayer
320 | m_GraphicsJobs: 1
321 | - m_BuildTarget: LuminSupport
322 | m_GraphicsJobs: 0
323 | - m_BuildTarget: AndroidPlayer
324 | m_GraphicsJobs: 0
325 | - m_BuildTarget: WebGLSupport
326 | m_GraphicsJobs: 0
327 | m_BuildTargetGraphicsJobMode:
328 | - m_BuildTarget: PS4Player
329 | m_GraphicsJobMode: 0
330 | - m_BuildTarget: XboxOnePlayer
331 | m_GraphicsJobMode: 0
332 | m_BuildTargetGraphicsAPIs:
333 | - m_BuildTarget: AndroidPlayer
334 | m_APIs: 150000000b000000
335 | m_Automatic: 1
336 | - m_BuildTarget: iOSSupport
337 | m_APIs: 10000000
338 | m_Automatic: 1
339 | - m_BuildTarget: AppleTVSupport
340 | m_APIs: 10000000
341 | m_Automatic: 1
342 | - m_BuildTarget: WebGLSupport
343 | m_APIs: 0b000000
344 | m_Automatic: 1
345 | m_BuildTargetVRSettings:
346 | - m_BuildTarget: Standalone
347 | m_Enabled: 0
348 | m_Devices:
349 | - Oculus
350 | - OpenVR
351 | m_DefaultShaderChunkSizeInMB: 16
352 | m_DefaultShaderChunkCount: 0
353 | openGLRequireES31: 0
354 | openGLRequireES31AEP: 0
355 | openGLRequireES32: 0
356 | m_TemplateCustomTags: {}
357 | mobileMTRendering:
358 | Android: 1
359 | iPhone: 1
360 | tvOS: 1
361 | m_BuildTargetGroupLightmapEncodingQuality:
362 | - m_BuildTarget: Android
363 | m_EncodingQuality: 1
364 | - m_BuildTarget: iPhone
365 | m_EncodingQuality: 1
366 | - m_BuildTarget: tvOS
367 | m_EncodingQuality: 1
368 | m_BuildTargetGroupHDRCubemapEncodingQuality:
369 | - m_BuildTarget: Android
370 | m_EncodingQuality: 1
371 | - m_BuildTarget: iPhone
372 | m_EncodingQuality: 1
373 | - m_BuildTarget: tvOS
374 | m_EncodingQuality: 1
375 | m_BuildTargetGroupLightmapSettings: []
376 | m_BuildTargetGroupLoadStoreDebugModeSettings: []
377 | m_BuildTargetNormalMapEncoding:
378 | - m_BuildTarget: Android
379 | m_Encoding: 1
380 | - m_BuildTarget: iPhone
381 | m_Encoding: 1
382 | - m_BuildTarget: tvOS
383 | m_Encoding: 1
384 | m_BuildTargetDefaultTextureCompressionFormat:
385 | - m_BuildTarget: Android
386 | m_Format: 3
387 | playModeTestRunnerEnabled: 0
388 | runPlayModeTestAsEditModeTest: 0
389 | actionOnDotNetUnhandledException: 1
390 | enableInternalProfiler: 0
391 | logObjCUncaughtExceptions: 1
392 | enableCrashReportAPI: 0
393 | cameraUsageDescription:
394 | locationUsageDescription:
395 | microphoneUsageDescription:
396 | bluetoothUsageDescription:
397 | macOSTargetOSVersion: 10.13.0
398 | switchNMETAOverride:
399 | switchNetLibKey:
400 | switchSocketMemoryPoolSize: 6144
401 | switchSocketAllocatorPoolSize: 128
402 | switchSocketConcurrencyLimit: 14
403 | switchScreenResolutionBehavior: 2
404 | switchUseCPUProfiler: 0
405 | switchEnableFileSystemTrace: 0
406 | switchLTOSetting: 0
407 | switchApplicationID: 0x01004b9000490000
408 | switchNSODependencies:
409 | switchCompilerFlags:
410 | switchTitleNames_0:
411 | switchTitleNames_1:
412 | switchTitleNames_2:
413 | switchTitleNames_3:
414 | switchTitleNames_4:
415 | switchTitleNames_5:
416 | switchTitleNames_6:
417 | switchTitleNames_7:
418 | switchTitleNames_8:
419 | switchTitleNames_9:
420 | switchTitleNames_10:
421 | switchTitleNames_11:
422 | switchTitleNames_12:
423 | switchTitleNames_13:
424 | switchTitleNames_14:
425 | switchTitleNames_15:
426 | switchPublisherNames_0:
427 | switchPublisherNames_1:
428 | switchPublisherNames_2:
429 | switchPublisherNames_3:
430 | switchPublisherNames_4:
431 | switchPublisherNames_5:
432 | switchPublisherNames_6:
433 | switchPublisherNames_7:
434 | switchPublisherNames_8:
435 | switchPublisherNames_9:
436 | switchPublisherNames_10:
437 | switchPublisherNames_11:
438 | switchPublisherNames_12:
439 | switchPublisherNames_13:
440 | switchPublisherNames_14:
441 | switchPublisherNames_15:
442 | switchIcons_0: {fileID: 0}
443 | switchIcons_1: {fileID: 0}
444 | switchIcons_2: {fileID: 0}
445 | switchIcons_3: {fileID: 0}
446 | switchIcons_4: {fileID: 0}
447 | switchIcons_5: {fileID: 0}
448 | switchIcons_6: {fileID: 0}
449 | switchIcons_7: {fileID: 0}
450 | switchIcons_8: {fileID: 0}
451 | switchIcons_9: {fileID: 0}
452 | switchIcons_10: {fileID: 0}
453 | switchIcons_11: {fileID: 0}
454 | switchIcons_12: {fileID: 0}
455 | switchIcons_13: {fileID: 0}
456 | switchIcons_14: {fileID: 0}
457 | switchIcons_15: {fileID: 0}
458 | switchSmallIcons_0: {fileID: 0}
459 | switchSmallIcons_1: {fileID: 0}
460 | switchSmallIcons_2: {fileID: 0}
461 | switchSmallIcons_3: {fileID: 0}
462 | switchSmallIcons_4: {fileID: 0}
463 | switchSmallIcons_5: {fileID: 0}
464 | switchSmallIcons_6: {fileID: 0}
465 | switchSmallIcons_7: {fileID: 0}
466 | switchSmallIcons_8: {fileID: 0}
467 | switchSmallIcons_9: {fileID: 0}
468 | switchSmallIcons_10: {fileID: 0}
469 | switchSmallIcons_11: {fileID: 0}
470 | switchSmallIcons_12: {fileID: 0}
471 | switchSmallIcons_13: {fileID: 0}
472 | switchSmallIcons_14: {fileID: 0}
473 | switchSmallIcons_15: {fileID: 0}
474 | switchManualHTML:
475 | switchAccessibleURLs:
476 | switchLegalInformation:
477 | switchMainThreadStackSize: 1048576
478 | switchPresenceGroupId:
479 | switchLogoHandling: 0
480 | switchReleaseVersion: 0
481 | switchDisplayVersion: 1.0.0
482 | switchStartupUserAccount: 0
483 | switchSupportedLanguagesMask: 0
484 | switchLogoType: 0
485 | switchApplicationErrorCodeCategory:
486 | switchUserAccountSaveDataSize: 0
487 | switchUserAccountSaveDataJournalSize: 0
488 | switchApplicationAttribute: 0
489 | switchCardSpecSize: -1
490 | switchCardSpecClock: -1
491 | switchRatingsMask: 0
492 | switchRatingsInt_0: 0
493 | switchRatingsInt_1: 0
494 | switchRatingsInt_2: 0
495 | switchRatingsInt_3: 0
496 | switchRatingsInt_4: 0
497 | switchRatingsInt_5: 0
498 | switchRatingsInt_6: 0
499 | switchRatingsInt_7: 0
500 | switchRatingsInt_8: 0
501 | switchRatingsInt_9: 0
502 | switchRatingsInt_10: 0
503 | switchRatingsInt_11: 0
504 | switchRatingsInt_12: 0
505 | switchLocalCommunicationIds_0:
506 | switchLocalCommunicationIds_1:
507 | switchLocalCommunicationIds_2:
508 | switchLocalCommunicationIds_3:
509 | switchLocalCommunicationIds_4:
510 | switchLocalCommunicationIds_5:
511 | switchLocalCommunicationIds_6:
512 | switchLocalCommunicationIds_7:
513 | switchParentalControl: 0
514 | switchAllowsScreenshot: 1
515 | switchAllowsVideoCapturing: 1
516 | switchAllowsRuntimeAddOnContentInstall: 0
517 | switchDataLossConfirmation: 0
518 | switchUserAccountLockEnabled: 0
519 | switchSystemResourceMemory: 16777216
520 | switchSupportedNpadStyles: 22
521 | switchNativeFsCacheSize: 32
522 | switchIsHoldTypeHorizontal: 0
523 | switchSupportedNpadCount: 8
524 | switchEnableTouchScreen: 1
525 | switchSocketConfigEnabled: 0
526 | switchTcpInitialSendBufferSize: 32
527 | switchTcpInitialReceiveBufferSize: 64
528 | switchTcpAutoSendBufferSizeMax: 256
529 | switchTcpAutoReceiveBufferSizeMax: 256
530 | switchUdpSendBufferSize: 9
531 | switchUdpReceiveBufferSize: 42
532 | switchSocketBufferEfficiency: 4
533 | switchSocketInitializeEnabled: 1
534 | switchNetworkInterfaceManagerInitializeEnabled: 1
535 | switchUseNewStyleFilepaths: 1
536 | switchUseLegacyFmodPriorities: 0
537 | switchUseMicroSleepForYield: 1
538 | switchEnableRamDiskSupport: 0
539 | switchMicroSleepForYieldTime: 25
540 | switchRamDiskSpaceSize: 12
541 | ps4NPAgeRating: 12
542 | ps4NPTitleSecret:
543 | ps4NPTrophyPackPath:
544 | ps4ParentalLevel: 11
545 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000
546 | ps4Category: 0
547 | ps4MasterVersion: 01.00
548 | ps4AppVersion: 01.00
549 | ps4AppType: 0
550 | ps4ParamSfxPath:
551 | ps4VideoOutPixelFormat: 0
552 | ps4VideoOutInitialWidth: 1920
553 | ps4VideoOutBaseModeInitialWidth: 1920
554 | ps4VideoOutReprojectionRate: 60
555 | ps4PronunciationXMLPath:
556 | ps4PronunciationSIGPath:
557 | ps4BackgroundImagePath:
558 | ps4StartupImagePath:
559 | ps4StartupImagesFolder:
560 | ps4IconImagesFolder:
561 | ps4SaveDataImagePath:
562 | ps4SdkOverride:
563 | ps4BGMPath:
564 | ps4ShareFilePath:
565 | ps4ShareOverlayImagePath:
566 | ps4PrivacyGuardImagePath:
567 | ps4ExtraSceSysFile:
568 | ps4NPtitleDatPath:
569 | ps4RemotePlayKeyAssignment: -1
570 | ps4RemotePlayKeyMappingDir:
571 | ps4PlayTogetherPlayerCount: 0
572 | ps4EnterButtonAssignment: 1
573 | ps4ApplicationParam1: 0
574 | ps4ApplicationParam2: 0
575 | ps4ApplicationParam3: 0
576 | ps4ApplicationParam4: 0
577 | ps4DownloadDataSize: 0
578 | ps4GarlicHeapSize: 2048
579 | ps4ProGarlicHeapSize: 2560
580 | playerPrefsMaxSize: 32768
581 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
582 | ps4pnSessions: 1
583 | ps4pnPresence: 1
584 | ps4pnFriends: 1
585 | ps4pnGameCustomData: 1
586 | playerPrefsSupport: 0
587 | enableApplicationExit: 0
588 | resetTempFolder: 1
589 | restrictedAudioUsageRights: 0
590 | ps4UseResolutionFallback: 0
591 | ps4ReprojectionSupport: 0
592 | ps4UseAudio3dBackend: 0
593 | ps4UseLowGarlicFragmentationMode: 1
594 | ps4SocialScreenEnabled: 0
595 | ps4ScriptOptimizationLevel: 0
596 | ps4Audio3dVirtualSpeakerCount: 14
597 | ps4attribCpuUsage: 0
598 | ps4PatchPkgPath:
599 | ps4PatchLatestPkgPath:
600 | ps4PatchChangeinfoPath:
601 | ps4PatchDayOne: 0
602 | ps4attribUserManagement: 0
603 | ps4attribMoveSupport: 0
604 | ps4attrib3DSupport: 0
605 | ps4attribShareSupport: 0
606 | ps4attribExclusiveVR: 0
607 | ps4disableAutoHideSplash: 0
608 | ps4videoRecordingFeaturesUsed: 0
609 | ps4contentSearchFeaturesUsed: 0
610 | ps4CompatibilityPS5: 0
611 | ps4AllowPS5Detection: 0
612 | ps4GPU800MHz: 1
613 | ps4attribEyeToEyeDistanceSettingVR: 0
614 | ps4IncludedModules: []
615 | ps4attribVROutputEnabled: 0
616 | monoEnv:
617 | splashScreenBackgroundSourceLandscape: {fileID: 0}
618 | splashScreenBackgroundSourcePortrait: {fileID: 0}
619 | blurSplashScreenBackground: 1
620 | spritePackerPolicy:
621 | webGLMemorySize: 16
622 | webGLExceptionSupport: 1
623 | webGLNameFilesAsHashes: 0
624 | webGLShowDiagnostics: 0
625 | webGLDataCaching: 1
626 | webGLDebugSymbols: 0
627 | webGLEmscriptenArgs:
628 | webGLModulesDirectory:
629 | webGLTemplate: APPLICATION:Default
630 | webGLAnalyzeBuildSize: 0
631 | webGLUseEmbeddedResources: 0
632 | webGLCompressionFormat: 1
633 | webGLWasmArithmeticExceptions: 0
634 | webGLLinkerTarget: 1
635 | webGLThreadsSupport: 0
636 | webGLDecompressionFallback: 0
637 | webGLInitialMemorySize: 32
638 | webGLMaximumMemorySize: 2048
639 | webGLMemoryGrowthMode: 2
640 | webGLMemoryLinearGrowthStep: 16
641 | webGLMemoryGeometricGrowthStep: 0.2
642 | webGLMemoryGeometricGrowthCap: 96
643 | webGLPowerPreference: 2
644 | scriptingDefineSymbols: {}
645 | additionalCompilerArguments: {}
646 | platformArchitecture: {}
647 | scriptingBackend: {}
648 | il2cppCompilerConfiguration: {}
649 | il2cppCodeGeneration: {}
650 | managedStrippingLevel:
651 | EmbeddedLinux: 1
652 | GameCoreScarlett: 1
653 | GameCoreXboxOne: 1
654 | Nintendo Switch: 1
655 | PS4: 1
656 | PS5: 1
657 | QNX: 1
658 | Stadia: 1
659 | VisionOS: 1
660 | WebGL: 1
661 | Windows Store Apps: 1
662 | XboxOne: 1
663 | iPhone: 1
664 | tvOS: 1
665 | incrementalIl2cppBuild: {}
666 | suppressCommonWarnings: 1
667 | allowUnsafeCode: 0
668 | useDeterministicCompilation: 1
669 | additionalIl2CppArgs:
670 | scriptingRuntimeVersion: 1
671 | gcIncremental: 1
672 | gcWBarrierValidation: 0
673 | apiCompatibilityLevelPerPlatform: {}
674 | m_RenderingPath: 1
675 | m_MobileRenderingPath: 1
676 | metroPackageName: UnityVerletRope
677 | metroPackageVersion:
678 | metroCertificatePath:
679 | metroCertificatePassword:
680 | metroCertificateSubject:
681 | metroCertificateIssuer:
682 | metroCertificateNotAfter: 0000000000000000
683 | metroApplicationDescription: UnityVerletRope
684 | wsaImages: {}
685 | metroTileShortName:
686 | metroTileShowName: 0
687 | metroMediumTileShowName: 0
688 | metroLargeTileShowName: 0
689 | metroWideTileShowName: 0
690 | metroSupportStreamingInstall: 0
691 | metroLastRequiredScene: 0
692 | metroDefaultTileSize: 1
693 | metroTileForegroundText: 2
694 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
695 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
696 | metroSplashScreenUseBackgroundColor: 0
697 | platformCapabilities: {}
698 | metroTargetDeviceFamilies: {}
699 | metroFTAName:
700 | metroFTAFileTypes: []
701 | metroProtocolName:
702 | vcxProjDefaultLanguage:
703 | XboxOneProductId:
704 | XboxOneUpdateKey:
705 | XboxOneSandboxId:
706 | XboxOneContentId:
707 | XboxOneTitleId:
708 | XboxOneSCId:
709 | XboxOneGameOsOverridePath:
710 | XboxOnePackagingOverridePath:
711 | XboxOneAppManifestOverridePath:
712 | XboxOneVersion: 1.0.0.0
713 | XboxOnePackageEncryption: 0
714 | XboxOnePackageUpdateGranularity: 2
715 | XboxOneDescription:
716 | XboxOneLanguage:
717 | - enus
718 | XboxOneCapability: []
719 | XboxOneGameRating: {}
720 | XboxOneIsContentPackage: 0
721 | XboxOneEnhancedXboxCompatibilityMode: 0
722 | XboxOneEnableGPUVariability: 1
723 | XboxOneSockets: {}
724 | XboxOneSplashScreen: {fileID: 0}
725 | XboxOneAllowedProductIds: []
726 | XboxOnePersistentLocalStorageSize: 0
727 | XboxOneXTitleMemory: 8
728 | XboxOneOverrideIdentityName:
729 | XboxOneOverrideIdentityPublisher:
730 | vrEditorSettings: {}
731 | cloudServicesEnabled:
732 | UNet: 1
733 | luminIcon:
734 | m_Name:
735 | m_ModelFolderPath:
736 | m_PortalFolderPath:
737 | luminCert:
738 | m_CertPath:
739 | m_SignPackage: 1
740 | luminIsChannelApp: 0
741 | luminVersion:
742 | m_VersionCode: 1
743 | m_VersionName:
744 | hmiPlayerDataPath:
745 | hmiForceSRGBBlit: 1
746 | embeddedLinuxEnableGamepadInput: 1
747 | hmiLogStartupTiming: 0
748 | hmiCpuConfiguration:
749 | apiCompatibilityLevel: 6
750 | activeInputHandler: 0
751 | windowsGamepadBackendHint: 0
752 | cloudProjectId:
753 | framebufferDepthMemorylessMode: 0
754 | qualitySettingsNames: []
755 | projectName:
756 | organizationId:
757 | cloudEnabled: 0
758 | legacyClampBlendShapeWeights: 0
759 | hmiLoadingImage: {fileID: 0}
760 | platformRequiresReadableAssets: 0
761 | virtualTexturingSupportEnabled: 0
762 | insecureHttpOption: 0
763 |
--------------------------------------------------------------------------------
/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2022.3.16f1
2 | m_EditorVersionWithRevision: 2022.3.16f1 (d2c21f0ef2f1)
3 |
--------------------------------------------------------------------------------
/ProjectSettings/QualitySettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!47 &1
4 | QualitySettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 5
7 | m_CurrentQuality: 5
8 | m_QualitySettings:
9 | - serializedVersion: 2
10 | name: Very Low
11 | pixelLightCount: 0
12 | shadows: 0
13 | shadowResolution: 0
14 | shadowProjection: 1
15 | shadowCascades: 1
16 | shadowDistance: 15
17 | shadowNearPlaneOffset: 3
18 | shadowCascade2Split: 0.33333334
19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
20 | shadowmaskMode: 0
21 | blendWeights: 1
22 | textureQuality: 1
23 | anisotropicTextures: 0
24 | antiAliasing: 0
25 | softParticles: 0
26 | softVegetation: 0
27 | realtimeReflectionProbes: 0
28 | billboardsFaceCameraPosition: 0
29 | vSyncCount: 0
30 | lodBias: 0.3
31 | maximumLODLevel: 0
32 | streamingMipmapsActive: 0
33 | streamingMipmapsAddAllCameras: 1
34 | streamingMipmapsMemoryBudget: 512
35 | streamingMipmapsRenderersPerFrame: 512
36 | streamingMipmapsMaxLevelReduction: 2
37 | streamingMipmapsMaxFileIORequests: 1024
38 | particleRaycastBudget: 4
39 | asyncUploadTimeSlice: 2
40 | asyncUploadBufferSize: 16
41 | asyncUploadPersistentBuffer: 1
42 | resolutionScalingFixedDPIFactor: 1
43 | excludedTargetPlatforms: []
44 | - serializedVersion: 2
45 | name: Low
46 | pixelLightCount: 0
47 | shadows: 0
48 | shadowResolution: 0
49 | shadowProjection: 1
50 | shadowCascades: 1
51 | shadowDistance: 20
52 | shadowNearPlaneOffset: 3
53 | shadowCascade2Split: 0.33333334
54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
55 | shadowmaskMode: 0
56 | blendWeights: 2
57 | textureQuality: 0
58 | anisotropicTextures: 0
59 | antiAliasing: 0
60 | softParticles: 0
61 | softVegetation: 0
62 | realtimeReflectionProbes: 0
63 | billboardsFaceCameraPosition: 0
64 | vSyncCount: 0
65 | lodBias: 0.4
66 | maximumLODLevel: 0
67 | streamingMipmapsActive: 0
68 | streamingMipmapsAddAllCameras: 1
69 | streamingMipmapsMemoryBudget: 512
70 | streamingMipmapsRenderersPerFrame: 512
71 | streamingMipmapsMaxLevelReduction: 2
72 | streamingMipmapsMaxFileIORequests: 1024
73 | particleRaycastBudget: 16
74 | asyncUploadTimeSlice: 2
75 | asyncUploadBufferSize: 16
76 | asyncUploadPersistentBuffer: 1
77 | resolutionScalingFixedDPIFactor: 1
78 | excludedTargetPlatforms: []
79 | - serializedVersion: 2
80 | name: Medium
81 | pixelLightCount: 1
82 | shadows: 1
83 | shadowResolution: 0
84 | shadowProjection: 1
85 | shadowCascades: 1
86 | shadowDistance: 20
87 | shadowNearPlaneOffset: 3
88 | shadowCascade2Split: 0.33333334
89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
90 | shadowmaskMode: 0
91 | blendWeights: 2
92 | textureQuality: 0
93 | anisotropicTextures: 1
94 | antiAliasing: 0
95 | softParticles: 0
96 | softVegetation: 0
97 | realtimeReflectionProbes: 0
98 | billboardsFaceCameraPosition: 0
99 | vSyncCount: 1
100 | lodBias: 0.7
101 | maximumLODLevel: 0
102 | streamingMipmapsActive: 0
103 | streamingMipmapsAddAllCameras: 1
104 | streamingMipmapsMemoryBudget: 512
105 | streamingMipmapsRenderersPerFrame: 512
106 | streamingMipmapsMaxLevelReduction: 2
107 | streamingMipmapsMaxFileIORequests: 1024
108 | particleRaycastBudget: 64
109 | asyncUploadTimeSlice: 2
110 | asyncUploadBufferSize: 16
111 | asyncUploadPersistentBuffer: 1
112 | resolutionScalingFixedDPIFactor: 1
113 | excludedTargetPlatforms: []
114 | - serializedVersion: 2
115 | name: High
116 | pixelLightCount: 2
117 | shadows: 2
118 | shadowResolution: 1
119 | shadowProjection: 1
120 | shadowCascades: 2
121 | shadowDistance: 40
122 | shadowNearPlaneOffset: 3
123 | shadowCascade2Split: 0.33333334
124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
125 | shadowmaskMode: 1
126 | blendWeights: 2
127 | textureQuality: 0
128 | anisotropicTextures: 1
129 | antiAliasing: 0
130 | softParticles: 0
131 | softVegetation: 1
132 | realtimeReflectionProbes: 1
133 | billboardsFaceCameraPosition: 1
134 | vSyncCount: 1
135 | lodBias: 1
136 | maximumLODLevel: 0
137 | streamingMipmapsActive: 0
138 | streamingMipmapsAddAllCameras: 1
139 | streamingMipmapsMemoryBudget: 512
140 | streamingMipmapsRenderersPerFrame: 512
141 | streamingMipmapsMaxLevelReduction: 2
142 | streamingMipmapsMaxFileIORequests: 1024
143 | particleRaycastBudget: 256
144 | asyncUploadTimeSlice: 2
145 | asyncUploadBufferSize: 16
146 | asyncUploadPersistentBuffer: 1
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Very High
151 | pixelLightCount: 3
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 2
156 | shadowDistance: 70
157 | shadowNearPlaneOffset: 3
158 | shadowCascade2Split: 0.33333334
159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
160 | shadowmaskMode: 1
161 | blendWeights: 4
162 | textureQuality: 0
163 | anisotropicTextures: 2
164 | antiAliasing: 2
165 | softParticles: 1
166 | softVegetation: 1
167 | realtimeReflectionProbes: 1
168 | billboardsFaceCameraPosition: 1
169 | vSyncCount: 1
170 | lodBias: 1.5
171 | maximumLODLevel: 0
172 | streamingMipmapsActive: 0
173 | streamingMipmapsAddAllCameras: 1
174 | streamingMipmapsMemoryBudget: 512
175 | streamingMipmapsRenderersPerFrame: 512
176 | streamingMipmapsMaxLevelReduction: 2
177 | streamingMipmapsMaxFileIORequests: 1024
178 | particleRaycastBudget: 1024
179 | asyncUploadTimeSlice: 2
180 | asyncUploadBufferSize: 16
181 | asyncUploadPersistentBuffer: 1
182 | resolutionScalingFixedDPIFactor: 1
183 | excludedTargetPlatforms: []
184 | - serializedVersion: 2
185 | name: Ultra
186 | pixelLightCount: 4
187 | shadows: 2
188 | shadowResolution: 2
189 | shadowProjection: 1
190 | shadowCascades: 4
191 | shadowDistance: 150
192 | shadowNearPlaneOffset: 3
193 | shadowCascade2Split: 0.33333334
194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
195 | shadowmaskMode: 1
196 | blendWeights: 4
197 | textureQuality: 0
198 | anisotropicTextures: 2
199 | antiAliasing: 2
200 | softParticles: 1
201 | softVegetation: 1
202 | realtimeReflectionProbes: 1
203 | billboardsFaceCameraPosition: 1
204 | vSyncCount: 1
205 | lodBias: 2
206 | maximumLODLevel: 0
207 | streamingMipmapsActive: 0
208 | streamingMipmapsAddAllCameras: 1
209 | streamingMipmapsMemoryBudget: 512
210 | streamingMipmapsRenderersPerFrame: 512
211 | streamingMipmapsMaxLevelReduction: 2
212 | streamingMipmapsMaxFileIORequests: 1024
213 | particleRaycastBudget: 4096
214 | asyncUploadTimeSlice: 2
215 | asyncUploadBufferSize: 16
216 | asyncUploadPersistentBuffer: 1
217 | resolutionScalingFixedDPIFactor: 1
218 | excludedTargetPlatforms: []
219 | m_PerPlatformDefaultQuality:
220 | Android: 2
221 | Lumin: 5
222 | Nintendo 3DS: 5
223 | Nintendo Switch: 5
224 | PS4: 5
225 | PSP2: 2
226 | Stadia: 5
227 | Standalone: 5
228 | WebGL: 3
229 | Windows Store Apps: 5
230 | XboxOne: 5
231 | iPhone: 2
232 | tvOS: 2
233 |
--------------------------------------------------------------------------------
/ProjectSettings/SceneTemplateSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "templatePinStates": [],
3 | "dependencyTypeInfos": [
4 | {
5 | "userAdded": false,
6 | "type": "UnityEngine.AnimationClip",
7 | "defaultInstantiationMode": 0
8 | },
9 | {
10 | "userAdded": false,
11 | "type": "UnityEditor.Animations.AnimatorController",
12 | "defaultInstantiationMode": 0
13 | },
14 | {
15 | "userAdded": false,
16 | "type": "UnityEngine.AnimatorOverrideController",
17 | "defaultInstantiationMode": 0
18 | },
19 | {
20 | "userAdded": false,
21 | "type": "UnityEditor.Audio.AudioMixerController",
22 | "defaultInstantiationMode": 0
23 | },
24 | {
25 | "userAdded": false,
26 | "type": "UnityEngine.ComputeShader",
27 | "defaultInstantiationMode": 1
28 | },
29 | {
30 | "userAdded": false,
31 | "type": "UnityEngine.Cubemap",
32 | "defaultInstantiationMode": 0
33 | },
34 | {
35 | "userAdded": false,
36 | "type": "UnityEngine.GameObject",
37 | "defaultInstantiationMode": 0
38 | },
39 | {
40 | "userAdded": false,
41 | "type": "UnityEditor.LightingDataAsset",
42 | "defaultInstantiationMode": 0
43 | },
44 | {
45 | "userAdded": false,
46 | "type": "UnityEngine.LightingSettings",
47 | "defaultInstantiationMode": 0
48 | },
49 | {
50 | "userAdded": false,
51 | "type": "UnityEngine.Material",
52 | "defaultInstantiationMode": 0
53 | },
54 | {
55 | "userAdded": false,
56 | "type": "UnityEditor.MonoScript",
57 | "defaultInstantiationMode": 1
58 | },
59 | {
60 | "userAdded": false,
61 | "type": "UnityEngine.PhysicMaterial",
62 | "defaultInstantiationMode": 0
63 | },
64 | {
65 | "userAdded": false,
66 | "type": "UnityEngine.PhysicsMaterial2D",
67 | "defaultInstantiationMode": 0
68 | },
69 | {
70 | "userAdded": false,
71 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
72 | "defaultInstantiationMode": 0
73 | },
74 | {
75 | "userAdded": false,
76 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
77 | "defaultInstantiationMode": 0
78 | },
79 | {
80 | "userAdded": false,
81 | "type": "UnityEngine.Rendering.VolumeProfile",
82 | "defaultInstantiationMode": 0
83 | },
84 | {
85 | "userAdded": false,
86 | "type": "UnityEditor.SceneAsset",
87 | "defaultInstantiationMode": 1
88 | },
89 | {
90 | "userAdded": false,
91 | "type": "UnityEngine.Shader",
92 | "defaultInstantiationMode": 1
93 | },
94 | {
95 | "userAdded": false,
96 | "type": "UnityEngine.ShaderVariantCollection",
97 | "defaultInstantiationMode": 1
98 | },
99 | {
100 | "userAdded": false,
101 | "type": "UnityEngine.Texture",
102 | "defaultInstantiationMode": 0
103 | },
104 | {
105 | "userAdded": false,
106 | "type": "UnityEngine.Texture2D",
107 | "defaultInstantiationMode": 0
108 | },
109 | {
110 | "userAdded": false,
111 | "type": "UnityEngine.Timeline.TimelineAsset",
112 | "defaultInstantiationMode": 0
113 | }
114 | ],
115 | "defaultDependencyTypeInfo": {
116 | "userAdded": false,
117 | "type": "",
118 | "defaultInstantiationMode": 1
119 | },
120 | "newSceneOverride": 0
121 | }
--------------------------------------------------------------------------------
/ProjectSettings/TagManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!78 &1
4 | TagManager:
5 | serializedVersion: 2
6 | tags: []
7 | layers:
8 | - Default
9 | - TransparentFX
10 | - Ignore Raycast
11 | -
12 | - Water
13 | - UI
14 | -
15 | -
16 | -
17 | -
18 | -
19 | -
20 | -
21 | -
22 | -
23 | -
24 | -
25 | -
26 | -
27 | -
28 | -
29 | -
30 | -
31 | -
32 | -
33 | -
34 | -
35 | -
36 | -
37 | -
38 | -
39 | -
40 | m_SortingLayers:
41 | - name: Default
42 | uniqueID: 0
43 | locked: 0
44 |
--------------------------------------------------------------------------------
/ProjectSettings/TimeManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!5 &1
4 | TimeManager:
5 | m_ObjectHideFlags: 0
6 | Fixed Timestep: 0.02
7 | Maximum Allowed Timestep: 0.33333334
8 | m_TimeScale: 1
9 | Maximum Particle Timestep: 0.03
10 |
--------------------------------------------------------------------------------
/ProjectSettings/TimelineSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &1
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 53
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | assetDefaultFramerate: 60
16 | m_DefaultFrameRate: 60
17 |
--------------------------------------------------------------------------------
/ProjectSettings/UnityConnectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!310 &1
4 | UnityConnectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 1
7 | m_Enabled: 0
8 | m_TestMode: 0
9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com
12 | m_DashboardUrl: https://dashboard.unity3d.com
13 | m_TestInitMode: 0
14 | CrashReportingSettings:
15 | m_EventUrl: https://perf-events.cloud.unity3d.com
16 | m_Enabled: 0
17 | m_LogBufferSize: 10
18 | m_CaptureEditorExceptions: 1
19 | UnityPurchasingSettings:
20 | m_Enabled: 0
21 | m_TestMode: 0
22 | UnityAnalyticsSettings:
23 | m_Enabled: 0
24 | m_TestMode: 0
25 | m_InitializeOnStartup: 1
26 | m_PackageRequiringCoreStatsPresent: 0
27 | UnityAdsSettings:
28 | m_Enabled: 0
29 | m_InitializeOnStartup: 1
30 | m_TestMode: 0
31 | m_IosGameId:
32 | m_AndroidGameId:
33 | m_GameIds: {}
34 | m_GameId:
35 | PerformanceReportingSettings:
36 | m_Enabled: 0
37 |
--------------------------------------------------------------------------------
/ProjectSettings/VFXManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!937362698 &1
4 | VFXManager:
5 | m_ObjectHideFlags: 0
6 | m_IndirectShader: {fileID: 0}
7 | m_CopyBufferShader: {fileID: 0}
8 | m_SortShader: {fileID: 0}
9 | m_StripUpdateShader: {fileID: 0}
10 | m_RenderPipeSettingsPath:
11 | m_FixedTimeStep: 0.016666668
12 | m_MaxDeltaTime: 0.05
13 |
--------------------------------------------------------------------------------
/ProjectSettings/VersionControlSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!890905787 &1
4 | VersionControlSettings:
5 | m_ObjectHideFlags: 0
6 | m_Mode: Visible Meta Files
7 | m_CollabEditorSettings:
8 | inProgressEnabled: 1
9 |
--------------------------------------------------------------------------------
/ProjectSettings/XRSettings.asset:
--------------------------------------------------------------------------------
1 | {
2 | "m_SettingKeys": [
3 | "VR Device Disabled",
4 | "VR Device User Alert"
5 | ],
6 | "m_SettingValues": [
7 | "False",
8 | "False"
9 | ]
10 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Rope Physics Using Verlet Integration in Unity
2 | 
3 | ## What is Verlet Integration?
4 | [Verlet integration](https://en.wikipedia.org/wiki/Verlet_integration) is a numerical method used to calculate the trajectory of particles in molecular dynamics. But it's widely used in computer graphics and software simulations to simulate physical phenomena and visual effects.
5 |
6 | In each time step, it calculates the position of the particle in the next time step using current position, previous position and its accelaration. Then it applies constraints (if there's any) to maintain the right position of each particle.
7 |
8 | ## How Is It Used to Simulate a Rope?
9 | We see a rope as a string of particles/nodes connected to each other with a fixed distance from each other. By running the Verlet integration for each node in the rope, we can simualte its physics with good accuracy.
10 |
11 | We apply the constraint of nodes having the same distance from each other in each frame, and resolve collisions.
12 |
13 | I also render a cylender-like mesh for the rope, which is generated procedurally in each timestep.
14 |
15 | ## How to Use This Project?
16 |
17 | 1. Clone this repository.
18 | 2. Open the project in Unity 2022.3.16 (Other versions are not tested but they might work).
19 | 3. Open `SampleScene` scene in the scenes folder.
20 | 4. Press play. After pressing Play, the rope appears.
21 | 5. Move the rope around in the scene view and see how it goes (I haven't implemented any control for it to use in the game view. Sorry :( )
22 |
23 | In the `Prefabs` folder you can find the `Rope` prefab which has two components.
24 |
25 | The first is the `Verlet Rope` component. It has some fields:
26 |
27 | 
28 | * **Rope Length:** The length of the rope.
29 | * **Number of Nodes:** How many nodes the rope consists of. the more the nodes are, the more accurate the simualtion is, but it will be computationally heavier.
30 | * **Constraint Iteration Count:** How many times the constraints are applied in each timestep. The more the iterations, the stiffer the rope becomes.
31 | * **Gravity:** The gravity vector.
32 | * **Rope Radius:** The radius of the rope.
33 | * **Substeps:** Each fixed delta time is divided into smaller time steps called substeps for better accuracy. This field sets the number of substeps.
34 |
35 | The other component is the `Rope Renderer`. It has only one field:
36 |
37 | 
38 |
39 | * **Rope Segment Sides:** The number of sides the rope will have when the 3D mesh is rendered.
40 | ---
41 | You can read the detailed breakdown of this implementation [here](https://alirezaft98.medium.com/verlet-integration-simulating-rope-physics-in-unity-b4f0ffde38fb) and you can read about how the rope is rendered [here](https://alirezaft98.medium.com/verlet-integration-rendering-the-rope-97dae2832dce).
42 |
43 |
--------------------------------------------------------------------------------
/RopeRenderer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alirezaft/UnityVerletRope/65fda4500ced517a33819ed62e97042e4528f2a4/RopeRenderer.png
--------------------------------------------------------------------------------
/SampleGIF.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alirezaft/UnityVerletRope/65fda4500ced517a33819ed62e97042e4528f2a4/SampleGIF.gif
--------------------------------------------------------------------------------
/VerletRope.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alirezaft/UnityVerletRope/65fda4500ced517a33819ed62e97042e4528f2a4/VerletRope.png
--------------------------------------------------------------------------------