Compare commits

..

45 Commits

Author SHA1 Message Date
6df7d22c1d Update SpinnerGDD.md 2026-01-06 09:12:05 +00:00
Pasha Bibko
e1e7e83ab3 [Fix] Updated Readme.md 2025-12-04 11:45:23 +00:00
Pasha Bibko
caa7964bc8 [Feature] Improved accesability 2025-12-04 11:32:34 +00:00
Pasha Bibko
df1a1c145e [Feature] Made text move 2025-12-02 15:35:31 +00:00
Pasha Bibko
28280d87cc [Feature] Improved text look 2025-12-02 13:09:10 +00:00
Pasha Bibko
933bf758d4 [Refactor] Reimplemented changing object sizes 2025-12-02 11:26:37 +00:00
Pasha Bibko
9265cbbf99 [Feature] Added text of powerups 2025-11-28 18:10:10 +00:00
Pasha Bibko
569056a9a5 [Refactor] Made other orbitals attached to a parent holder 2025-11-28 17:29:33 +00:00
Pasha Bibko
80be4cc853 [Refactor] Reworked how OrbitalBehaviour behaves under the hood 2025-11-28 17:26:10 +00:00
Pasha Bibko
2d974f5217 [Refactor] General cleanup 2025-11-27 21:54:11 +00:00
Pasha Bibko
201675720c [Refactor] GlobalOrbitalSettings 2025-11-27 21:32:47 +00:00
Pasha Bibko
540cc700e4 Removed jetbrains IDE folder 2025-11-27 21:13:27 +00:00
Pasha Bibko
7f3f2e3e56 Made player modifiers more effective 2025-11-27 15:03:40 +00:00
Pasha Bibko
eccb70da24 Removed bloom modification 2025-11-27 15:00:40 +00:00
Pasha Bibko
37c0ad0991 Small fixes 2025-11-27 13:50:47 +00:00
Pasha Bibko
886622cd6c Made player mods affect the player 2025-11-27 13:34:55 +00:00
Pasha Bibko
055e688df5 Added player mod (powerups) 2025-11-27 11:21:14 +00:00
Pasha Bibko
0dbbf02789 Saved player score with PlayerPrefs 2025-11-27 10:56:36 +00:00
Pasha Bibko
8291d627c1 Made GlobalInput work with mobile 2025-11-27 10:48:09 +00:00
Pasha Bibko
d61a44b1dc Fixed enemy position [Minor] 2025-11-27 10:25:30 +00:00
Pasha Bibko
6ee784bf4e Added high score
Also made player always render on top of enemies
2025-11-25 15:08:04 +00:00
Pasha Bibko
3ae3d3e0d0 Updated Visual Style 2025-11-25 14:55:33 +00:00
Pasha Bibko
c85076c588 Added build folders to .gitignore 2025-11-25 13:32:34 +00:00
Pasha Bibko
8b141dcd93 Added touch support for controls 2025-11-25 13:24:31 +00:00
Pasha Bibko
4fe8132656 Updated rendering
Made +1 score on ring destruction
2025-11-25 13:18:18 +00:00
Pasha Bibko
229b92e0d0 Added score counter 2025-11-25 11:50:23 +00:00
Pasha Bibko
4f3aab0a36 Inverted player death direction
Cause Unity Transform was bugging out
2025-11-25 11:31:51 +00:00
Pasha Bibko
561594d123 Fixed player death launch 2025-11-25 10:14:25 +00:00
Pasha Bibko
e55f6fc92b Made player launch to center on death 2025-11-25 09:46:43 +00:00
Pasha Bibko
80c625ffc8 Made player launch when hit
Needs fixing
2025-11-20 15:44:07 +00:00
Pasha Bibko
07de9b4fe9 Made local time scale 2025-11-20 15:08:40 +00:00
c0ab668a8d Updated link in README.md 2025-11-20 14:26:02 +00:00
Pasha Bibko
88fa7e4ff3 Made respawn when hit centre 2025-11-20 14:21:46 +00:00
Pasha Bibko
19b2c06fab Reduced nausea 2025-11-20 13:34:25 +00:00
Pasha Bibko
70a09156a1 Updated PP rendering 2025-11-20 13:11:02 +00:00
Pasha Bibko
0ded385c97 Added post processing 2025-11-20 13:01:59 +00:00
Pasha Bibko
9bcc2b917c Made circle rendering work 2025-11-20 12:51:12 +00:00
Pasha Bibko
112a88d07e Changed IDE to rider 2025-11-20 11:32:52 +00:00
Pasha Bibko
583f417e24 Added custom collision 2025-11-20 11:15:29 +00:00
Pasha Bibko
0dce94924c Added basic enemy
Does not attack the player currently
2025-11-18 15:52:13 +00:00
Pasha Bibko
321dc1f149 MAde lines look nicer 2025-11-18 15:34:28 +00:00
Pasha Bibko
5811cb20b1 Made lines set width 2025-11-18 14:59:54 +00:00
Pasha Bibko
9e66cf63d1 Made objects stick to rings 2025-11-18 14:37:09 +00:00
Pasha Bibko
2dc9c1e389 Added rings
They do not move with the player correctly
2025-11-18 13:46:48 +00:00
Pasha Bibko
3b4d0736dc Made gap adjustable 2025-11-18 11:12:43 +00:00
38 changed files with 2147 additions and 156 deletions

8
.gitignore vendored
View File

@@ -64,6 +64,14 @@ sysinfo.txt
*.unitypackage.meta
*.app
# Build output folders
/WebGL-Build
/Win64-Build
/Build
# Rider IDE project files
.idea/
# Crashlytics generated file
crashlytics-build.properties

View File

@@ -0,0 +1,104 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BlackMat
m_Shader: {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainBump:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- PixelSnap: 0
- _BumpScale: 1
- _ColorMask: 15
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EnableExternalAlpha: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.2
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _Stencil: 0
- _StencilComp: 8
- _StencilOp: 0
- _StencilReadMask: 255
- _StencilWriteMask: 255
- _UVSec: 0
- _UseUIAlphaClip: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
- _Specular: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []

View File

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

View File

@@ -0,0 +1,91 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: DarkGreenMat
m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- PixelSnap: 0
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EnableExternalAlpha: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 22eb1f2017d2a15459d4c10b27104270
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -8,7 +8,7 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: GreenMat
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
@@ -23,6 +23,10 @@ Material:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -61,10 +65,13 @@ Material:
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- PixelSnap: 0
- _BumpScale: 1
- _ColorMask: 15
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EnableExternalAlpha: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
@@ -75,9 +82,17 @@ Material:
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _Stencil: 0
- _StencilComp: 8
- _StencilOp: 0
- _StencilReadMask: 255
- _StencilWriteMask: 255
- _UVSec: 0
- _UseUIAlphaClip: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0, g: 1, b: 0, a: 1}
- _Color: {r: 1, g: 0.63082826, b: 0, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []

View File

@@ -8,7 +8,7 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: WhiteMat
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
@@ -23,6 +23,10 @@ Material:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -61,10 +65,12 @@ Material:
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- PixelSnap: 0
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EnableExternalAlpha: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
@@ -80,4 +86,6 @@ Material:
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a7292488fc42280428b7d5183069b410
guid: 8f49dabfaa53ce947958cc0ed2975b2c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000

8
Assets/Prefabs.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 54d0352969708df48bbec1b2ebc476a5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

138
Assets/Prefabs/Enemy.prefab Normal file
View File

@@ -0,0 +1,138 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &345795220292517504
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8341506432217282029}
- component: {fileID: 3813189644929098082}
m_Layer: 0
m_Name: Enemy
m_TagString: Enemy
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8341506432217282029
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 345795220292517504}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 1739635715747709762}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3813189644929098082
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 345795220292517504}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8a4502a12b7f15246aa7b9cc2d30a862, type: 3}
m_Name:
m_EditorClassIdentifier:
m_OrbitalPosition:
m_AttachedRing: 0
m_DistanceFromCentre: 0
m_DistanceAlongRadius: 0
m_ObjectRadius: 0
m_IsAttachedToRings: 0
m_Behaviour: {fileID: 0}
m_SpinSpeed: 0
--- !u!1 &4804673878835712602
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1739635715747709762}
- component: {fileID: 5026174633141696716}
- component: {fileID: 8577569336777110376}
m_Layer: 0
m_Name: Model
m_TagString: Enemy
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1739635715747709762
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4804673878835712602}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 2}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8341506432217282029}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &5026174633141696716
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4804673878835712602}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a7292488fc42280428b7d5183069b410, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &8577569336777110376
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4804673878835712602}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ec4a924a38b208240b281bd7983b07b7
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,138 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3345171783113818284
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5264147178014863578}
- component: {fileID: 8309954331828580361}
- component: {fileID: 7594426098938812954}
m_Layer: 0
m_Name: Model
m_TagString: PlayerMod
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5264147178014863578
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3345171783113818284}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6262878747777363767}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8309954331828580361
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3345171783113818284}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &7594426098938812954
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3345171783113818284}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 8f49dabfaa53ce947958cc0ed2975b2c, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &7367671708397998036
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6262878747777363767}
- component: {fileID: 3305490538895218547}
m_Layer: 0
m_Name: PlayerMod
m_TagString: PlayerMod
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6262878747777363767
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7367671708397998036}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 5264147178014863578}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3305490538895218547
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7367671708397998036}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 29014004c04338246b2673078c5d8a52, type: 3}
m_Name:
m_EditorClassIdentifier:
m_OrbitalPosition:
m_AttachedRing: 0
m_DistanceFromCentre: 0
m_DistanceAlongRadius: 0
m_ObjectRadius: 0
m_IsAttachedToRings: 0
m_Behaviour: {fileID: 0}
m_SpinSpeed: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 780bf151465173e4a82da2763da54b2b
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

170
Assets/Prefabs/Ring.prefab Normal file
View File

@@ -0,0 +1,170 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &7195916227006500999
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3996593117675006400}
- component: {fileID: 291899916163864377}
m_Layer: 0
m_Name: Renderer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3996593117675006400
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7195916227006500999}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5052103053041639182}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!120 &291899916163864377
LineRenderer:
serializedVersion: 2
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7195916227006500999}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 0
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Positions:
- {x: 0, y: 0, z: 0}
- {x: 0, y: 0, z: 1}
m_Parameters:
serializedVersion: 3
widthMultiplier: 1
widthCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorGradient:
serializedVersion: 2
key0: {r: 1, g: 0, b: 0, a: 1}
key1: {r: 1, g: 1, b: 1, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
key5: {r: 0, g: 0, b: 0, a: 0}
key6: {r: 0, g: 0, b: 0, a: 0}
key7: {r: 0, g: 0, b: 0, a: 0}
ctime0: 0
ctime1: 65535
ctime2: 0
ctime3: 0
ctime4: 0
ctime5: 0
ctime6: 0
ctime7: 0
atime0: 0
atime1: 65535
atime2: 0
atime3: 0
atime4: 0
atime5: 0
atime6: 0
atime7: 0
m_Mode: 0
m_ColorSpace: 0
m_NumColorKeys: 2
m_NumAlphaKeys: 2
numCornerVertices: 0
numCapVertices: 0
alignment: 0
textureMode: 0
textureScale: {x: 1, y: 1}
shadowBias: 0.5
generateLightingData: 0
m_MaskInteraction: 0
m_UseWorldSpace: 1
m_Loop: 0
m_ApplyActiveColorSpace: 1
--- !u!1 &8276642441649562681
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5052103053041639182}
m_Layer: 0
m_Name: Ring
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5052103053041639182
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8276642441649562681}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3996593117675006400}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2b69b065f2beade4d91167a23508e29e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -132,7 +132,6 @@ GameObject:
m_Component:
- component: {fileID: 104400498}
- component: {fileID: 104400497}
- component: {fileID: 104400499}
- component: {fileID: 104400501}
- component: {fileID: 104400500}
m_Layer: 0
@@ -154,6 +153,19 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2895addc317815345b19503bab859a6a, type: 3}
m_Name:
m_EditorClassIdentifier:
m_AttachedRing: 0
m_DistanceAlongCircumference: 0
m_ObjectRadius: 0.1
m_SpinSpeed: 0.1
m_DistanceFromCentre: 0
<ObjectRadiusMultiplier>k__BackingField: 1
<IsAttachedToRings>k__BackingField: 1
m_Renderer: {fileID: 104400500}
m_ScoreText: {fileID: 1501855168}
m_ModifierText: {fileID: 1227804579}
m_DefaultMaterial: {fileID: 2100000, guid: 2b4111cfdf7255c48b4c3dbcf9e202a6, type: 2}
m_FreeHitMaterial: {fileID: 2100000, guid: 22eb1f2017d2a15459d4c10b27104270, type: 2}
m_PostProcessVolume: {fileID: 519420033}
--- !u!4 &104400498
Transform:
m_ObjectHideFlags: 0
@@ -169,20 +181,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &104400499
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 104400496}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a035e66fabb459f48aa8f152b3d4f339, type: 3}
m_Name:
m_EditorClassIdentifier:
DistanceFromCentre: 0
RadiusDistance: 0
--- !u!23 &104400500
MeshRenderer:
m_ObjectHideFlags: 0
@@ -233,6 +231,108 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 104400496}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &233643650
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 233643654}
- component: {fileID: 233643653}
- component: {fileID: 233643652}
- component: {fileID: 233643651}
m_Layer: 5
m_Name: INGUI-World
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &233643651
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 233643650}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &233643652
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 233643650}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &233643653
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 233643650}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 1
m_Camera: {fileID: 519420031}
m_PlaneDistance: 5
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &233643654
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 233643650}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1227804578}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &519420028
GameObject:
m_ObjectHideFlags: 0
@@ -244,6 +344,8 @@ GameObject:
- component: {fileID: 519420032}
- component: {fileID: 519420031}
- component: {fileID: 519420029}
- component: {fileID: 519420034}
- component: {fileID: 519420033}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@@ -269,7 +371,7 @@ Camera:
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
@@ -291,7 +393,7 @@ Camera:
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
far clip plane: 25
field of view: 60
orthographic: 1
orthographic size: 5
@@ -318,14 +420,91 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1486841466
--- !u!114 &519420033
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3}
m_Name:
m_EditorClassIdentifier:
sharedProfile: {fileID: 11400000, guid: 176ee39659a078c4cb0e333f2fec4563, type: 2}
isGlobal: 1
blendDistance: 0
weight: 1
priority: 0
--- !u!114 &519420034
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3}
m_Name:
m_EditorClassIdentifier:
volumeTrigger: {fileID: 519420032}
volumeLayer:
serializedVersion: 2
m_Bits: 23
stopNaNPropagation: 1
finalBlitToCameraTarget: 0
antialiasingMode: 3
temporalAntialiasing:
jitterSpread: 0.75
sharpness: 0.25
stationaryBlending: 0.95
motionBlending: 0.85
subpixelMorphologicalAntialiasing:
quality: 2
fastApproximateAntialiasing:
fastMode: 0
keepAlpha: 0
fog:
enabled: 1
excludeSkybox: 1
debugLayer:
lightMeter:
width: 512
height: 256
showCurves: 1
histogram:
width: 512
height: 256
channel: 3
waveform:
exposure: 0.12
height: 256
vectorscope:
size: 256
exposure: 0.12
overlaySettings:
linearDepth: 0
motionColorIntensity: 4
motionGridSize: 64
colorBlindnessType: 0
colorBlindnessStrength: 1
m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2}
m_ShowToolkit: 0
m_ShowCustomSorter: 0
breakBeforeColorGrading: 0
m_BeforeTransparentBundles: []
m_BeforeStackBundles: []
m_AfterStackBundles: []
--- !u!1 &1158970869
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -333,84 +512,384 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1486841468}
- component: {fileID: 1486841467}
m_Layer: 0
m_Name: Light
- component: {fileID: 1158970873}
- component: {fileID: 1158970872}
- component: {fileID: 1158970871}
- component: {fileID: 1158970870}
m_Layer: 5
m_Name: IGUI-Overlay
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1486841467
Light:
--- !u!114 &1158970870
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1486841466}
m_GameObject: {fileID: 1158970869}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 1
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1486841468
--- !u!114 &1158970871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1158970869}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &1158970872
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1158970869}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 519420031}
m_PlaneDistance: 5
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 1
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &1158970873
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1158970869}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1501855167}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &1227804577
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1227804578}
- component: {fileID: 1227804580}
- component: {fileID: 1227804579}
- component: {fileID: 1227804581}
m_Layer: 5
m_Name: ModifierText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1227804578
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1227804577}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 233643654}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 30, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1227804579
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1227804577}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 65
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MaxSize: 65
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text:
--- !u!222 &1227804580
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1227804577}
m_CullTransparentMesh: 1
--- !u!114 &1227804581
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1227804577}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 1, g: 1, b: 1, a: 1}
m_EffectDistance: {x: 2, y: 2}
m_UseGraphicAlpha: 1
--- !u!1 &1501855166
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1501855167}
- component: {fileID: 1501855169}
- component: {fileID: 1501855168}
m_Layer: 5
m_Name: ScoreDisplay
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1501855167
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1501855166}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1158970873}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 5, y: 5}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1501855168
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1501855166}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 50
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MaxSize: 50
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: 0
--- !u!222 &1501855169
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1501855166}
m_CullTransparentMesh: 1
--- !u!1 &1692737941
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1692737944}
- component: {fileID: 1692737943}
- component: {fileID: 1692737942}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1692737942
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1692737941}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &1692737943
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1692737941}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1692737944
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1486841466}
m_GameObject: {fileID: 1692737941}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1827131555
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1827131557}
- component: {fileID: 1827131556}
m_Layer: 0
m_Name: OrbitalSettings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1827131556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1827131555}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1b1a209741ad95946a6f0138e93431c4, type: 3}
m_Name:
m_EditorClassIdentifier:
<RadiusSpeed>k__BackingField: 0.5
<DistanceSpeed>k__BackingField: 0.6
<GapDistance>k__BackingField: 1
<RingPrefab>k__BackingField: {fileID: 8276642441649562681, guid: 2b69b065f2beade4d91167a23508e29e, type: 3}
<EnemyPrefab>k__BackingField: {fileID: 345795220292517504, guid: ec4a924a38b208240b281bd7983b07b7, type: 3}
<ModifierPrefab>k__BackingField: {fileID: 7367671708397998036, guid: 780bf151465173e4a82da2763da54b2b, type: 3}
--- !u!4 &1827131557
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1827131555}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
@@ -423,6 +902,9 @@ Transform:
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 519420032}
- {fileID: 1827131557}
- {fileID: 104400498}
- {fileID: 1486841468}
- {fileID: 519420032}
- {fileID: 1158970873}
- {fileID: 1692737944}
- {fileID: 233643654}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 481e746898a124b4995e38d3ad27eb3d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,63 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3}
m_Name: Main Camera Profile
m_EditorClassIdentifier:
settings:
- {fileID: 6234815572536140264}
--- !u!114 &6234815572536140264
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3}
m_Name: Bloom
m_EditorClassIdentifier:
active: 1
enabled:
overrideState: 1
value: 1
intensity:
overrideState: 1
value: 10
threshold:
overrideState: 1
value: 0
softKnee:
overrideState: 1
value: 0.5
clamp:
overrideState: 1
value: 35
diffusion:
overrideState: 1
value: 3
anamorphicRatio:
overrideState: 1
value: 0
color:
overrideState: 0
value: {r: 1, g: 1, b: 1, a: 1}
fastMode:
overrideState: 0
value: 0
dirtTexture:
overrideState: 0
value: {fileID: 0}
defaultState: 1
dirtIntensity:
overrideState: 0
value: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 176ee39659a078c4cb0e333f2fec4563
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,46 @@
using System.Collections.Generic;
using UnityEngine;
public class EnemyController : OrbitalBehaviour
{
private static readonly List<EnemyController> Instances = new();
public static void KillAllEnemies()
{
foreach (EnemyController controller in Instances)
{
Destroy(controller.gameObject);
PlayerController.s_PlayerScore++;
}
Instances.Clear();
}
private void Start()
{
Instances.Add(this);
RegisterObject(new OrbitalInitializer
{
DistanceAlongCircumference = Random.Range(0f, Mathf.PI * 2f),
ObjectRadius = 0.1f,
SpinSpeed = 0.7f
});
transform.position = new Vector3(0, 0, -200f);
}
protected override void OnReachCentre()
{
if (BehaviourManager.IsSimulationRunning)
PlayerController.s_PlayerScore++;
Destroy(gameObject);
}
private void OnDestroy()
{
BehaviourManager.UnregisterOrbitalInstance(this);
Instances.Remove(this);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8a4502a12b7f15246aa7b9cc2d30a862
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,52 @@
using UnityEngine;
public static class GlobalInput
{
private class InputTracker : MonoBehaviour
{
private void Start() => DontDestroyOnLoad(gameObject);
private bool m_IsContact;
private bool m_TouchStartedThisFrame;
private float m_HeldTime;
private static bool IsPressedInternal()
{
return
Input.GetMouseButton(0) ||
Input.anyKey ||
Input.touchCount != 0;
}
private void Update()
{
float tmp = m_HeldTime;
m_HeldTime = 0f;
if (!IsPressedInternal())
{
m_IsContact = false;
return;
}
m_TouchStartedThisFrame = !m_IsContact;
m_IsContact = true;
m_HeldTime = tmp + Time.unscaledDeltaTime;
}
public bool _IsScreenClicked() => m_TouchStartedThisFrame;
public bool _IsScreenHeld() => m_IsContact && m_HeldTime > 0.5f;
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void Initialize()
{
GameObject go = new ("InputTracker");
s_InputTracker = go.AddComponent<InputTracker>();
}
private static InputTracker s_InputTracker;
public static bool IsScreenClicked => s_InputTracker._IsScreenClicked();
public static bool IsScreenHeld => s_InputTracker._IsScreenHeld();
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1f0047bf5b13c1a49ae952046f359333
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,250 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class OrbitalBehaviour
{
public class BehaviourManager : MonoBehaviour
{
private static BehaviourManager Instance;
private Vector3[] m_PrecalculatedPositions;
private bool m_CurrentRingAllowsSpawning;
private bool m_IsSimulationRunning;
private bool m_AllowPlayerInput;
public static bool IsSimulationRunning => Instance.m_IsSimulationRunning;
public static bool AllowPlayerInput => Instance.m_AllowPlayerInput;
private float m_LocalDeltaTimeScale = 1f;
private float m_TimeOfLastRingSpawn;
private int m_LastGeneratedRing;
private readonly Dictionary<int, float> m_Distances = new();
private readonly List<OrbitalBehaviour> m_ObjectInstances = new();
private readonly List<Ring> m_Rings = new();
private OrbitalBehaviour m_PlayerInstance;
private GameObject m_ModiferParent;
private GameObject m_EnemyParent;
private GameObject m_RingParent;
private const int CirclePoints = 100;
public static IEnumerator StartPlayerSpeedupModifier()
{
Instance.m_LocalDeltaTimeScale *= 1.5f;
yield return new WaitForSeconds(10f);
Instance.m_LocalDeltaTimeScale /= 1.5f;
Instance.m_LocalDeltaTimeScale *= 2f;
yield return new WaitForSeconds(5f);
Instance.m_LocalDeltaTimeScale /= 2f;
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void OnApplicationStart()
{
GameObject manager = new("OrbitalManager");
DontDestroyOnLoad(manager);
Instance = manager.AddComponent<BehaviourManager>();
Instance.PrecalculatePositions();
Instance.StartCoroutine(RestartSimulation());
Instance.m_ModiferParent = new GameObject("ModifierParent");
Instance.m_EnemyParent = new GameObject("EnemyHolder");
Instance.m_RingParent = new GameObject("RingHolder");
}
private void PrecalculatePositions()
{
m_PrecalculatedPositions = new Vector3[CirclePoints];
for (int idx = 0; idx < m_PrecalculatedPositions.Length; idx++)
{
m_PrecalculatedPositions[idx] = new Vector3
(
x: Mathf.Cos(Mathf.Deg2Rad * (359f / CirclePoints * idx)),
y: Mathf.Sin(Mathf.Deg2Rad * (359f / CirclePoints * idx)),
z: 0
);
}
}
public static IEnumerator RestartSimulation()
{
Instance.m_IsSimulationRunning = false;
Instance.m_AllowPlayerInput = false;
Instance.m_LocalDeltaTimeScale = 7f;
for (int idx = 0; idx < 100; idx++) // 100 = 5 seconds of fixed updates
{
if (Instance.m_PlayerInstance != null)
{
Instance.m_PlayerInstance.m_AttachedRing = Instance.m_LastGeneratedRing;
}
yield return new WaitForFixedUpdate();
}
PlayerController.AttachPlayer();
foreach (OrbitalBehaviour behaviour in Instance.m_ObjectInstances)
{
behaviour.OnSimulationRestart();
}
yield return new WaitForSeconds(1.3f);
Instance.m_IsSimulationRunning = true;
Instance.m_AllowPlayerInput = true;
Instance.m_LocalDeltaTimeScale = 1f;
}
private void SpawnNewRing()
{
GameObject newRing = Instantiate(Settings.Instance.RingPrefab, m_RingParent.transform);
newRing.transform.localScale = new Vector3(12f, 12f, 1f);
Ring ring = newRing.AddComponent<Ring>();
ring.m_ID = m_LastGeneratedRing + 1;
m_Rings.Add(ring);
LineRenderer lineRenderer = newRing.GetComponentInChildren<LineRenderer>();
lineRenderer.loop = true;
lineRenderer.positionCount = CirclePoints;
lineRenderer.startWidth = 0.1f;
lineRenderer.endWidth = 0.1f;
lineRenderer.material = new Material(Shader.Find("Sprites/Default"));
m_LastGeneratedRing = ring.m_ID;
m_TimeOfLastRingSpawn = Time.time;
m_CurrentRingAllowsSpawning = Random.Range(0, 25) != 0;
if (!m_CurrentRingAllowsSpawning && m_AllowPlayerInput)
{
Instantiate(Settings.Instance.ModifierPrefab, m_ModiferParent.transform);
}
}
private void Update()
{
if (Time.time - m_TimeOfLastRingSpawn > Settings.Instance.GapDistance / m_LocalDeltaTimeScale)
{
SpawnNewRing();
}
List<Ring> toRemove = new();
m_Distances.Clear();
foreach (Ring ring in m_Rings)
{
float diff = (m_LocalDeltaTimeScale * Time.deltaTime) * Settings.Instance.DistanceSpeed;
ring.transform.localScale -= new Vector3(diff, diff, 0f);
LineRenderer lineRenderer = ring.GetComponentInChildren<LineRenderer>();
for (int vert = 0; vert < CirclePoints; vert++)
{
lineRenderer.SetPosition(vert, new Vector3
(
x: m_PrecalculatedPositions[vert].x * ring.transform.localScale.x,
y: m_PrecalculatedPositions[vert].y * ring.transform.localScale.y,
z: 10
));
}
float lerp = (ring.transform.localScale.x - 0.5f) / 4f;
Color c = Color.Lerp(Color.black, Color.white, Mathf.Clamp01(lerp));
if (ring.transform.localScale.x < 0.5f)
{
if (m_IsSimulationRunning)
PlayerController.s_PlayerScore++;
toRemove.Add(ring);
}
lineRenderer.startColor = c;
lineRenderer.endColor = c;
m_Distances[ring.m_ID] = ring.transform.localScale.x;
}
foreach (Ring ring in toRemove)
{
m_Rings.Remove(ring);
Destroy(ring.gameObject);
}
foreach (OrbitalBehaviour orbitalPosition in m_ObjectInstances)
{
if (!orbitalPosition.IsAttachedToRings)
continue;
if (!m_Distances.TryGetValue(orbitalPosition.m_AttachedRing, out float distance))
{
orbitalPosition.m_AttachedRing = m_LastGeneratedRing;
orbitalPosition.OnReachCentre();
continue;
}
orbitalPosition.m_DistanceFromCentre = distance;
float deltaTime = Time.deltaTime * m_LocalDeltaTimeScale;
float movement = deltaTime * Settings.Instance.RadiusSpeed * orbitalPosition.m_SpinSpeed;
orbitalPosition.m_DistanceAlongCircumference += movement;
orbitalPosition.m_DistanceAlongCircumference %= Mathf.PI * 2;
orbitalPosition.transform.position = orbitalPosition.TranslateToVector3();
}
}
private void FixedUpdate()
{
foreach (OrbitalBehaviour orbital in m_ObjectInstances)
{
if (orbital == m_PlayerInstance)
continue;
Vector2 a = orbital.TranslateToVector3();
Vector2 b = m_PlayerInstance.TranslateToVector3();
float d = (a - b).magnitude;
float r1 = m_PlayerInstance.m_ObjectRadius * m_PlayerInstance.ObjectRadiusMultiplier;
float r2 = orbital.m_ObjectRadius * orbital.ObjectRadiusMultiplier;
if (d > (r1 + r2))
continue;
m_PlayerInstance.OnOrbitalCollision(orbital);
orbital.OnOrbitalCollision(m_PlayerInstance);
}
if (Random.Range(0, 15) == 0 && m_AllowPlayerInput && m_CurrentRingAllowsSpawning)
{
Instantiate(Settings.Instance.EnemyPrefab, m_EnemyParent.transform);
}
}
public static void UnregisterOrbitalInstance(OrbitalBehaviour instance)
{
Instance.m_ObjectInstances.Remove(instance);
}
public static void RegisterOrbitalInstance(OrbitalBehaviour instance)
{
instance.m_AttachedRing = Instance.m_LastGeneratedRing; // Connects it to last generated ring
Instance.m_ObjectInstances.Add(instance);
}
public static void SetPlayer(OrbitalBehaviour player)
{
Instance.m_PlayerInstance = player;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 49460c83aa57cc6478a9366b88bc63e7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
using UnityEngine;
public class Settings : MonoBehaviour
{
public static Settings Instance;
[field: SerializeField, Range(0f, Mathf.PI * 2)] public float RadiusSpeed { get; private set; } = 2f;
[field: SerializeField, Range(0f, 2f)] public float DistanceSpeed { get; private set; } = 0.6f;
[field: SerializeField, Range(0f, 1f)] public float GapDistance { get; private set; } = 0.3f;
[field: SerializeField] public GameObject RingPrefab { get; private set; }
[field: SerializeField] public GameObject EnemyPrefab { get; private set; }
[field: SerializeField] public GameObject ModifierPrefab { get; private set; }
private void Start() => Instance = this;
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1b1a209741ad95946a6f0138e93431c4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,69 +1,53 @@
using System.Collections.Generic;
using UnityEngine;
public class OrbitalPosition : MonoBehaviour
public partial class OrbitalBehaviour : MonoBehaviour
{
public float DistanceFromCentre = 0;
public float RadiusDistance = 0;
[Header("Orbital Information")]
[SerializeField] private int m_AttachedRing;
[SerializeField] private float m_DistanceAlongCircumference;
[SerializeField] private float m_ObjectRadius = 0.1f;
[SerializeField] private float m_SpinSpeed = 0.1f;
public Vector3 TranslateToVec3() => new
[SerializeField] private float m_DistanceFromCentre;
[field: SerializeField] protected float ObjectRadiusMultiplier { get; set; } = 1.0f;
[field: SerializeField] protected bool IsAttachedToRings { get; set; } = true;
protected void RegisterObject(OrbitalInitializer init)
{
BehaviourManager.RegisterOrbitalInstance(this);
m_DistanceAlongCircumference = init.DistanceAlongCircumference;
m_ObjectRadius = init.ObjectRadius;
m_SpinSpeed = init.SpinSpeed;
}
public Vector3 TranslateToVector3() => new
(
x: DistanceFromCentre * Mathf.Cos(RadiusDistance),
y: DistanceFromCentre * Mathf.Sin(RadiusDistance)
x: m_DistanceFromCentre * Mathf.Cos(m_DistanceAlongCircumference),
y: m_DistanceFromCentre * Mathf.Sin(m_DistanceAlongCircumference),
z: 0
);
protected virtual void OnOrbitalCollision(OrbitalBehaviour other) { }
protected virtual void OnSimulationRestart() { }
protected virtual void OnReachCentre() { }
protected void AdvanceRing()
{
m_AttachedRing++;
}
}
public class GlobalOrbitalPositionManager : MonoBehaviour
public class OrbitalInitializer
{
static GlobalOrbitalPositionManager s_Instance = null;
List<OrbitalPosition> m_ObjectInstances = new();
[SerializeField, Range(0f, Mathf.PI * 2)] float m_RadiusSpeed = 2f;
[SerializeField, Range(0f, 2f)] float m_DistanceSpeed = 2f;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void OnApplicationStart()
{
GameObject manager = new("GLOBAL ORBITAL MANAGER");
DontDestroyOnLoad(manager);
s_Instance = manager.AddComponent<GlobalOrbitalPositionManager>();
}
public void Update()
{
foreach (OrbitalPosition orbitalPosition in m_ObjectInstances)
{
orbitalPosition.DistanceFromCentre = Mathf.Clamp(orbitalPosition.DistanceFromCentre - (m_DistanceSpeed * Time.deltaTime * m_DistanceSpeed), 0f, float.PositiveInfinity);
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (m_RadiusSpeed * Time.deltaTime * m_RadiusSpeed)) % (Mathf.PI * 2);
orbitalPosition.gameObject.transform.position = orbitalPosition.TranslateToVec3();
}
}
public static void RegisterOrbitalPositionInstance(OrbitalPosition newInstance) =>
s_Instance.m_ObjectInstances.Add(newInstance);
public static void UnregisterOrbitalPositionInstance(OrbitalPosition removedInstance) =>
s_Instance.m_ObjectInstances.Remove(removedInstance);
public float DistanceAlongCircumference { get; set; }
public float ObjectRadius { get; set; }
public float SpinSpeed { get; set; }
}
[RequireComponent(typeof(OrbitalPosition))]
public abstract class OrbitalPositionBehaviour : MonoBehaviour
public class Ring : MonoBehaviour
{
protected OrbitalPosition m_OrbitalPosition = null;
private void Start()
{
m_OrbitalPosition = GetComponent<OrbitalPosition>();
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
OnStart();
}
private void OnDestroy() =>
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
public abstract void OnStart();
public int m_ID;
}

View File

@@ -1,19 +1,228 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering.PostProcessing;
public class PlayerController : OrbitalPositionBehaviour
public class PlayerController : OrbitalBehaviour
{
public override void OnStart()
[Header("References")]
[SerializeField] private MeshRenderer m_Renderer;
[SerializeField] private Text m_ScoreText;
[SerializeField] private Text m_ModifierText;
[SerializeField] private Material m_DefaultMaterial;
[SerializeField] private Material m_FreeHitMaterial;
[SerializeField] private PostProcessVolume m_PostProcessVolume;
private static PlayerController Instance;
private static int s_HighScore = 20;
public static int s_PlayerScore;
private Vector3 m_SuicidePoint;
private float m_DeathLerp;
private bool m_HasFreeHitActive;
private bool m_HasInvincibility;
private bool m_KillingItself;
private void Start()
{
m_OrbitalPosition.DistanceFromCentre = 10;
s_HighScore = Mathf.Max(s_HighScore, PlayerPrefs.GetInt("HighScore", 0));
Instance = this;
BehaviourManager.SetPlayer(this);
RegisterObject(new OrbitalInitializer
{
ObjectRadius = 0.1f,
SpinSpeed = 0.2f
});
IsAttachedToRings = true;
}
private void UpdateUI()
{
m_ScoreText.text = s_PlayerScore.ToString();
m_ScoreText.color = s_PlayerScore > s_HighScore ? Color.yellow : Color.white;
m_Renderer.material = m_HasFreeHitActive ? m_FreeHitMaterial : m_DefaultMaterial;
}
private void UpdatePlayerInput()
{
if (GlobalInput.IsScreenClicked && BehaviourManager.AllowPlayerInput)
{
AdvanceRing();
}
}
private void UpdateDeathState()
{
if (!m_KillingItself)
return;
transform.position = Vector3.Lerp(m_SuicidePoint, m_SuicidePoint.normalized * 20f, m_DeathLerp);
m_DeathLerp += Time.deltaTime;
}
public void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
UpdateUI();
UpdatePlayerInput();
UpdateDeathState();
}
private IEnumerator OnGrowPlayerModifier()
{
transform.localScale *= 1.5f;
ObjectRadiusMultiplier = 1.5f;
yield return new WaitForSecondsRealtime(15f);
transform.localScale /= 1.5f;
ObjectRadiusMultiplier = 1.0f;
}
private IEnumerator OnShrinkPlayerModifier()
{
transform.localScale *= 0.6f;
ObjectRadiusMultiplier = 0.6f;
yield return new WaitForSecondsRealtime(15f);
transform.localScale /= 0.6f;
ObjectRadiusMultiplier = 1.0f;
}
private IEnumerator TriggerInvincibility()
{
m_HasFreeHitActive = false;
m_HasInvincibility = true;
yield return new WaitForSecondsRealtime(1f);
m_HasInvincibility = false;
}
private IEnumerator OnModiferPickup()
{
Vector3 start = TranslateToVector3();
Vector3 direction = Vector3.zero - start;
direction.Normalize();
direction *= 3;
Vector3 end = start + direction;
m_ModifierText.transform.position = start;
Color startColor = m_ModifierText.color;
Color endColor = m_ModifierText.color;
endColor.a = 0;
for (float lerp = 0f; lerp < 1f; lerp += Time.deltaTime / 2f)
{
m_OrbitalPosition.DistanceFromCentre += 1;
m_ModifierText.color = Color.Lerp(startColor, endColor, lerp);
m_ModifierText.transform.position = Vector3.Lerp(start, end, lerp);
yield return new WaitForEndOfFrame();
}
m_ModifierText.color = startColor;
m_ModifierText.text = "";
yield return null;
}
protected override void OnOrbitalCollision(OrbitalBehaviour other)
{
if (!IsAttachedToRings)
return;
if (other.CompareTag("Enemy"))
{
if (m_HasInvincibility)
{
return;
}
if (m_HasFreeHitActive)
{
StartCoroutine(TriggerInvincibility());
return;
}
StartCoroutine(BehaviourManager.RestartSimulation());
m_SuicidePoint = transform.position;
m_KillingItself = true;
m_DeathLerp = 0f;
}
else if (other.CompareTag("PlayerMod"))
{
PlayerModifier mod = (PlayerModifier)other;
m_ModifierText.text = PlayerModifier.ModifierToString(mod.Modifier);
StartCoroutine(OnModiferPickup());
switch (mod.Modifier)
{
case PlayerModifier.Modifiers.GainPoints:
s_PlayerScore += 100;
break;
case PlayerModifier.Modifiers.FreeHit:
m_HasFreeHitActive = true;
break;
case PlayerModifier.Modifiers.GrowPlayer:
StartCoroutine(OnGrowPlayerModifier());
break;
case PlayerModifier.Modifiers.ShrinkPlayer:
StartCoroutine(OnShrinkPlayerModifier());
break;
case PlayerModifier.Modifiers.SpeedUp:
StartCoroutine(BehaviourManager.StartPlayerSpeedupModifier());
break;
case PlayerModifier.Modifiers.ClearAllEnemies:
EnemyController.KillAllEnemies();
break;
default:
Debug.Log($"Collision with unknown modifier occured [{mod.Modifier}]");
break;
}
}
else
{
Debug.Log("Unknown collision occured");
}
}
protected override void OnSimulationRestart()
{
m_KillingItself = false;
m_Renderer.enabled = true;
m_HasFreeHitActive = false;
m_Renderer.material.color = Color.green;
s_HighScore = Math.Max(s_HighScore, s_PlayerScore);
PlayerPrefs.SetInt("HighScore", s_HighScore);
s_PlayerScore = 0;
}
protected override void OnReachCentre()
{
StartCoroutine(BehaviourManager.RestartSimulation());
}
public static void AttachPlayer()
{
Instance.IsAttachedToRings = true;
}
}

View File

@@ -0,0 +1,59 @@
using System;
using UnityEngine;
using URandom = UnityEngine.Random;
public class PlayerModifier : OrbitalBehaviour
{
public enum Modifiers
{
GainPoints,
FreeHit,
GrowPlayer,
ShrinkPlayer,
ClearAllEnemies,
SpeedUp
}
public static string ModifierToString(Modifiers mod) =>
mod switch
{
Modifiers.GainPoints => "100 Points",
Modifiers.FreeHit => "Temporary Shield",
Modifiers.GrowPlayer => "Grow Player",
Modifiers.ShrinkPlayer => "Shrink Player",
Modifiers.ClearAllEnemies => "Clear all enemies",
Modifiers.SpeedUp => "Speed Boost",
_ => "NULL"
};
private static readonly System.Random s_RandomGenerator = new();
public Modifiers Modifier { get; private set; }
private static Modifiers GetRandomModifier()
{
Array possibilities = Enum.GetValues(typeof(Modifiers));
return (Modifiers)possibilities.GetValue(s_RandomGenerator.Next(possibilities.Length));
}
private void Start()
{
RegisterObject(new OrbitalInitializer
{
DistanceAlongCircumference = URandom.Range(0f, Mathf.PI * 2f),
ObjectRadius = 0.3f,
SpinSpeed = 1.6f
});
transform.position = new Vector3(0, 0, -100f);
Modifier = GetRandomModifier();
}
protected override void OnOrbitalCollision(OrbitalBehaviour other) => Destroy(gameObject);
protected override void OnReachCentre() => Destroy(gameObject);
private void OnDestroy()
{
BehaviourManager.UnregisterOrbitalInstance(this);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 29014004c04338246b2673078c5d8a52
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -4,6 +4,7 @@
"com.unity.feature.2d": "2.0.1",
"com.unity.ide.rider": "3.0.36",
"com.unity.ide.visualstudio": "2.0.22",
"com.unity.postprocessing": "3.4.0",
"com.unity.test-framework": "1.1.33",
"com.unity.textmeshpro": "3.0.7",
"com.unity.timeline": "1.7.7",

View File

@@ -170,6 +170,15 @@
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.postprocessing": {
"version": "3.4.0",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.1.33",
"depth": 0,

View File

@@ -603,11 +603,26 @@ PlayerSettings:
webGLMemoryGeometricGrowthStep: 0.2
webGLMemoryGeometricGrowthCap: 96
webGLPowerPreference: 2
scriptingDefineSymbols: {}
scriptingDefineSymbols:
Android: UNITY_POST_PROCESSING_STACK_V2
EmbeddedLinux: UNITY_POST_PROCESSING_STACK_V2
GameCoreXboxOne: UNITY_POST_PROCESSING_STACK_V2
Nintendo Switch: UNITY_POST_PROCESSING_STACK_V2
PS4: UNITY_POST_PROCESSING_STACK_V2
PS5: UNITY_POST_PROCESSING_STACK_V2
QNX: UNITY_POST_PROCESSING_STACK_V2
Stadia: UNITY_POST_PROCESSING_STACK_V2
Standalone: UNITY_POST_PROCESSING_STACK_V2
VisionOS: UNITY_POST_PROCESSING_STACK_V2
WebGL: UNITY_POST_PROCESSING_STACK_V2
XboxOne: UNITY_POST_PROCESSING_STACK_V2
tvOS: UNITY_POST_PROCESSING_STACK_V2
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend: {}
il2cppCompilerConfiguration: {}
scriptingBackend:
Standalone: 0
il2cppCompilerConfiguration:
Standalone: 2
il2cppCodeGeneration: {}
managedStrippingLevel:
EmbeddedLinux: 1

View File

@@ -3,7 +3,9 @@
--- !u!78 &1
TagManager:
serializedVersion: 2
tags: []
tags:
- Enemy
- PlayerMod
layers:
- Default
- TransparentFX

View File

@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 53
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3}
m_Name:
m_EditorClassIdentifier:
assetDefaultFramerate: 60
m_DefaultFrameRate: 60

View File

@@ -1,7 +1,6 @@
# Spinner
'Spinner' was made for Unit 10 of UAL Level 3 Extended Diploma
Spinner is a mobile friendly game made for Unit 10 of my game development course. The goal of the game is to get the highest score possible (as shown in the middle of the screen). Dodge the gaps in the rings and collect modifiers (white balls) to help you along your journey.
# Resources
- [Game Design Document](SpinnerGDD.md)
- [Play here](pashabibko.itch.io)
- [Play here](https://pashabibko.itch.io/spinner)

View File

@@ -4,7 +4,7 @@ This is the game design document (commonly referred to as GDD) for 'Spinner'.
You can view the design board [here](https://miro.com/app/board/uXjVJrLKFaM=/)
and play the game [here](https://pashabibko.itch.io/).
# **The Mobius Line**
# **Spinner**
Your job is to survive as long as possible and score the most ammount of points as you are able.
Avoid getting sucked into the middle of the screen or float away from the bounds of the screen whilst