├── ProjectSettings
├── ProjectVersion.txt
├── ClusterInputManager.asset
├── EditorBuildSettings.asset
├── NetworkManager.asset
├── TimeManager.asset
├── AudioManager.asset
├── TagManager.asset
├── EditorSettings.asset
├── UnityConnectSettings.asset
├── DynamicsManager.asset
├── Physics2DSettings.asset
├── NavMeshAreas.asset
├── GraphicsSettings.asset
├── QualitySettings.asset
├── InputManager.asset
└── ProjectSettings.asset
├── UnityPackageManager
└── manifest.json
├── Assets
├── Scenes
│ ├── MainScene.unity.meta
│ └── MainScene.unity
├── Scenes.meta
├── Prefabs.meta
├── Scripts.meta
├── Prefabs
│ ├── WorldPointPivot.prefab.meta
│ └── WorldPointPivot.prefab
└── Scripts
│ ├── WorldManager.cs.meta
│ └── WorldManager.cs
├── .gitignore
└── README.md
/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2017.4.3f1
2 |
--------------------------------------------------------------------------------
/UnityPackageManager/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | }
4 | }
5 |
--------------------------------------------------------------------------------
/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/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 |
--------------------------------------------------------------------------------
/ProjectSettings/NetworkManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!149 &1
4 | NetworkManager:
5 | m_ObjectHideFlags: 0
6 | m_DebugLevel: 0
7 | m_Sendrate: 15
8 | m_AssetToPrefab: {}
9 |
--------------------------------------------------------------------------------
/Assets/Scenes/MainScene.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7826cde2c8823ef4cb4d85342610ba83
3 | timeCreated: 1528390652
4 | licenseType: Free
5 | DefaultImporter:
6 | externalObjects: {}
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/Assets/Scenes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a9ece02a89c5d3d40b95aef3189fe859
3 | folderAsset: yes
4 | timeCreated: 1528396914
5 | licenseType: Free
6 | DefaultImporter:
7 | externalObjects: {}
8 | userData:
9 | assetBundleName:
10 | assetBundleVariant:
11 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/Assets/Prefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e651b97ba76a7b64ebdefa581ab024c1
3 | folderAsset: yes
4 | timeCreated: 1528381842
5 | licenseType: Free
6 | DefaultImporter:
7 | externalObjects: {}
8 | userData:
9 | assetBundleName:
10 | assetBundleVariant:
11 |
--------------------------------------------------------------------------------
/Assets/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d998fd36dc2ce8f41a78bc2a165eca55
3 | folderAsset: yes
4 | timeCreated: 1528396922
5 | licenseType: Free
6 | DefaultImporter:
7 | externalObjects: {}
8 | userData:
9 | assetBundleName:
10 | assetBundleVariant:
11 |
--------------------------------------------------------------------------------
/Assets/Prefabs/WorldPointPivot.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bb1e189e53487da41b73b9504b5d655e
3 | timeCreated: 1528390673
4 | licenseType: Free
5 | NativeFormatImporter:
6 | externalObjects: {}
7 | mainObjectFileID: 100100000
8 | userData:
9 | assetBundleName:
10 | assetBundleVariant:
11 |
--------------------------------------------------------------------------------
/Assets/Scripts/WorldManager.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2b976a09649249247a003bc4fdb1c72c
3 | timeCreated: 1528382792
4 | licenseType: Free
5 | MonoImporter:
6 | externalObjects: {}
7 | serializedVersion: 2
8 | defaultReferences: []
9 | executionOrder: 0
10 | icon: {instanceID: 0}
11 | userData:
12 | assetBundleName:
13 | assetBundleVariant:
14 |
--------------------------------------------------------------------------------
/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 | m_Volume: 1
7 | Rolloff Scale: 1
8 | Doppler Factor: 1
9 | Default Speaker Mode: 2
10 | m_SampleRate: 0
11 | m_DSPBufferSize: 0
12 | m_VirtualVoiceCount: 512
13 | m_RealVoiceCount: 32
14 | m_SpatializerPlugin:
15 | m_AmbisonicDecoderPlugin:
16 | m_DisableAudio: 0
17 | m_VirtualizeEffects: 1
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | [Ll]ibrary/
2 | [Tt]emp/
3 | [Oo]bj/
4 | [Bb]uild/
5 | [Bb]uilds/
6 | Assets/AssetStoreTools*
7 |
8 | # Visual Studio cache directory
9 | .vs/
10 |
11 | # Autogenerated VS/MD/Consulo solution and project files
12 | ExportedObj/
13 | .consulo/
14 | *.csproj
15 | *.unityproj
16 | *.sln
17 | *.suo
18 | *.tmp
19 | *.user
20 | *.userprefs
21 | *.pidb
22 | *.booproj
23 | *.svd
24 | *.pdb
25 | *.opendb
26 |
27 | # Unity3D generated meta files
28 | *.pidb.meta
29 | *.pdb.meta
30 |
31 | # Unity3D Generated File On Crash Reports
32 | sysinfo.txt
33 |
34 | # Builds
35 | *.apk
36 | *.unitypackage
37 |
--------------------------------------------------------------------------------
/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/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: 7
7 | m_ExternalVersionControlSupport: Hidden Meta Files
8 | m_SerializationMode: 2
9 | m_LineEndingsForNewScripts: 2
10 | m_DefaultBehaviorMode: 0
11 | m_SpritePackerMode: 0
12 | m_SpritePackerPaddingPower: 1
13 | m_EtcTextureCompressorBehavior: 1
14 | m_EtcTextureFastCompressor: 1
15 | m_EtcTextureNormalCompressor: 2
16 | m_EtcTextureBestCompressor: 4
17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp
18 | m_ProjectGenerationRootNamespace:
19 | m_UserGeneratedProjectSuffix:
20 | m_CollabEditorSettings:
21 | inProgressEnabled: 1
22 |
--------------------------------------------------------------------------------
/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 | m_Enabled: 0
7 | m_TestMode: 0
8 | m_TestEventUrl:
9 | m_TestConfigUrl:
10 | m_TestInitMode: 0
11 | CrashReportingSettings:
12 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes
13 | m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate
14 | m_Enabled: 0
15 | m_CaptureEditorExceptions: 1
16 | UnityPurchasingSettings:
17 | m_Enabled: 0
18 | m_TestMode: 0
19 | UnityAnalyticsSettings:
20 | m_Enabled: 1
21 | m_InitializeOnStartup: 1
22 | m_TestMode: 0
23 | m_TestEventUrl:
24 | m_TestConfigUrl:
25 | UnityAdsSettings:
26 | m_Enabled: 0
27 | m_InitializeOnStartup: 1
28 | m_TestMode: 0
29 | m_IosGameId:
30 | m_AndroidGameId:
31 | m_GameIds: {}
32 | m_GameId:
33 | PerformanceReportingSettings:
34 | m_Enabled: 0
35 |
--------------------------------------------------------------------------------
/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: 7
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: 1
23 | m_ClothInterCollisionSettingsToggle: 0
24 | m_ContactPairsMode: 0
25 | m_BroadphaseType: 0
26 | m_WorldBounds:
27 | m_Center: {x: 0, y: 0, z: 0}
28 | m_Extent: {x: 250, y: 250, z: 250}
29 | m_WorldSubdivisions: 8
30 |
--------------------------------------------------------------------------------
/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: 3
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_AutoSimulation: 1
23 | m_QueriesHitTriggers: 1
24 | m_QueriesStartInColliders: 1
25 | m_ChangeStopsCallbacks: 0
26 | m_CallbacksOnDisable: 1
27 | m_AutoSyncTransforms: 1
28 | m_AlwaysShowColliders: 0
29 | m_ShowColliderSleep: 1
30 | m_ShowColliderContacts: 0
31 | m_ShowColliderAABB: 0
32 | m_ContactArrowScale: 0.2
33 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
34 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
35 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
36 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
37 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
38 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 3D World Sphere Level Selector
2 | Whenever I have some free time I decide to practice something new in Unity, and one the results of that was me recreating the *"Level Select"* of **Super Mario Odyssey**! I ended up liking the result, so I posted it on reddit ([you can check out the post here](https://www.reddit.com/r/Unity3D/comments/8fkvx6/recreated_the_stage_select_system_from_super/)) and the response was awesome! A lot of people were interested trying it out and asked me to share my code, so I found that to be a great opportunity to build and share a more organized/documented code in order to make the code more accessible!
3 |
4 | ---
5 |
6 | ## General
7 | The **3d World Sphere Level Selector** project was built to make it quick and easy to position 3d points in sphere coordinates and make the game "look" at that specific point.
8 |
9 | The whole code is carefully documented so anyone can fully understand how it works! But if you have any questions just hit me up!
10 |
11 | 
12 |
13 | ## Editing
14 | The whole project works with only one script, all you have to do is edit the *List of World Points* in the **World Manager** script on the inspector.
15 |
16 | 
17 |
18 | ## Visualisation
19 | The project is filled with Gizmos and sliders so that it's more intuitive to make changes to the world positions in real-time!
20 |
21 | 
22 |
23 | ## "Look" Modes
24 |
25 | I've even implemented different behaviours for how the World Point is viewed!
26 |
27 | | Just Sphere Look|Just Camera Look|Sphere and Camera Look|
28 | | ------------- |:-------------:| :-----:|
29 | |
|
|
|
30 |
31 | ## Instructions
32 |
33 | All you need to do is load the *MainScene* of the project and everything is there nice and clean! The most important thing is the *WorldManager* script and the object hierarchy I used on my scene!
34 |
35 | ---
36 |
37 | # That's all folks, thank you very much!!
38 |
--------------------------------------------------------------------------------
/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: 12
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 |
--------------------------------------------------------------------------------
/Assets/Prefabs/WorldPointPivot.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1001 &100100000
4 | Prefab:
5 | m_ObjectHideFlags: 1
6 | serializedVersion: 2
7 | m_Modification:
8 | m_TransformParent: {fileID: 0}
9 | m_Modifications: []
10 | m_RemovedComponents: []
11 | m_ParentPrefab: {fileID: 0}
12 | m_RootGameObject: {fileID: 1509676898238892}
13 | m_IsPrefabParent: 1
14 | --- !u!1 &1509676898238892
15 | GameObject:
16 | m_ObjectHideFlags: 0
17 | m_PrefabParentObject: {fileID: 0}
18 | m_PrefabInternal: {fileID: 100100000}
19 | serializedVersion: 5
20 | m_Component:
21 | - component: {fileID: 4741042034033794}
22 | m_Layer: 0
23 | m_Name: WorldPointPivot
24 | m_TagString: Untagged
25 | m_Icon: {fileID: 0}
26 | m_NavMeshLayer: 0
27 | m_StaticEditorFlags: 0
28 | m_IsActive: 1
29 | --- !u!1 &1615065038356996
30 | GameObject:
31 | m_ObjectHideFlags: 0
32 | m_PrefabParentObject: {fileID: 0}
33 | m_PrefabInternal: {fileID: 100100000}
34 | serializedVersion: 5
35 | m_Component:
36 | - component: {fileID: 4335828089078308}
37 | - component: {fileID: 33513704851634782}
38 | - component: {fileID: 23246175790311776}
39 | m_Layer: 0
40 | m_Name: WorldPoint
41 | m_TagString: Untagged
42 | m_Icon: {fileID: 0}
43 | m_NavMeshLayer: 0
44 | m_StaticEditorFlags: 0
45 | m_IsActive: 1
46 | --- !u!4 &4335828089078308
47 | Transform:
48 | m_ObjectHideFlags: 1
49 | m_PrefabParentObject: {fileID: 0}
50 | m_PrefabInternal: {fileID: 100100000}
51 | m_GameObject: {fileID: 1615065038356996}
52 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
53 | m_LocalPosition: {x: 0, y: 0, z: -0.5}
54 | m_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
55 | m_Children: []
56 | m_Father: {fileID: 4741042034033794}
57 | m_RootOrder: 0
58 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
59 | --- !u!4 &4741042034033794
60 | Transform:
61 | m_ObjectHideFlags: 1
62 | m_PrefabParentObject: {fileID: 0}
63 | m_PrefabInternal: {fileID: 100100000}
64 | m_GameObject: {fileID: 1509676898238892}
65 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
66 | m_LocalPosition: {x: 0, y: 0, z: 0}
67 | m_LocalScale: {x: 1, y: 1, z: 1}
68 | m_Children:
69 | - {fileID: 4335828089078308}
70 | m_Father: {fileID: 0}
71 | m_RootOrder: 0
72 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
73 | --- !u!23 &23246175790311776
74 | MeshRenderer:
75 | m_ObjectHideFlags: 1
76 | m_PrefabParentObject: {fileID: 0}
77 | m_PrefabInternal: {fileID: 100100000}
78 | m_GameObject: {fileID: 1615065038356996}
79 | m_Enabled: 1
80 | m_CastShadows: 1
81 | m_ReceiveShadows: 1
82 | m_DynamicOccludee: 1
83 | m_MotionVectors: 1
84 | m_LightProbeUsage: 1
85 | m_ReflectionProbeUsage: 1
86 | m_Materials:
87 | - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0}
88 | m_StaticBatchInfo:
89 | firstSubMesh: 0
90 | subMeshCount: 0
91 | m_StaticBatchRoot: {fileID: 0}
92 | m_ProbeAnchor: {fileID: 0}
93 | m_LightProbeVolumeOverride: {fileID: 0}
94 | m_ScaleInLightmap: 1
95 | m_PreserveUVs: 0
96 | m_IgnoreNormalsForChartDetection: 0
97 | m_ImportantGI: 0
98 | m_StitchLightmapSeams: 0
99 | m_SelectedEditorRenderState: 3
100 | m_MinimumChartSize: 4
101 | m_AutoUVMaxDistance: 0.5
102 | m_AutoUVMaxAngle: 89
103 | m_LightmapParameters: {fileID: 0}
104 | m_SortingLayerID: 0
105 | m_SortingLayer: 0
106 | m_SortingOrder: 0
107 | --- !u!33 &33513704851634782
108 | MeshFilter:
109 | m_ObjectHideFlags: 1
110 | m_PrefabParentObject: {fileID: 0}
111 | m_PrefabInternal: {fileID: 100100000}
112 | m_GameObject: {fileID: 1615065038356996}
113 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
114 |
--------------------------------------------------------------------------------
/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 | particleRaycastBudget: 4
33 | asyncUploadTimeSlice: 2
34 | asyncUploadBufferSize: 4
35 | resolutionScalingFixedDPIFactor: 1
36 | excludedTargetPlatforms: []
37 | - serializedVersion: 2
38 | name: Low
39 | pixelLightCount: 0
40 | shadows: 0
41 | shadowResolution: 0
42 | shadowProjection: 1
43 | shadowCascades: 1
44 | shadowDistance: 20
45 | shadowNearPlaneOffset: 3
46 | shadowCascade2Split: 0.33333334
47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
48 | shadowmaskMode: 0
49 | blendWeights: 2
50 | textureQuality: 0
51 | anisotropicTextures: 0
52 | antiAliasing: 0
53 | softParticles: 0
54 | softVegetation: 0
55 | realtimeReflectionProbes: 0
56 | billboardsFaceCameraPosition: 0
57 | vSyncCount: 0
58 | lodBias: 0.4
59 | maximumLODLevel: 0
60 | particleRaycastBudget: 16
61 | asyncUploadTimeSlice: 2
62 | asyncUploadBufferSize: 4
63 | resolutionScalingFixedDPIFactor: 1
64 | excludedTargetPlatforms: []
65 | - serializedVersion: 2
66 | name: Medium
67 | pixelLightCount: 1
68 | shadows: 1
69 | shadowResolution: 0
70 | shadowProjection: 1
71 | shadowCascades: 1
72 | shadowDistance: 20
73 | shadowNearPlaneOffset: 3
74 | shadowCascade2Split: 0.33333334
75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
76 | shadowmaskMode: 0
77 | blendWeights: 2
78 | textureQuality: 0
79 | anisotropicTextures: 1
80 | antiAliasing: 0
81 | softParticles: 0
82 | softVegetation: 0
83 | realtimeReflectionProbes: 0
84 | billboardsFaceCameraPosition: 0
85 | vSyncCount: 1
86 | lodBias: 0.7
87 | maximumLODLevel: 0
88 | particleRaycastBudget: 64
89 | asyncUploadTimeSlice: 2
90 | asyncUploadBufferSize: 4
91 | resolutionScalingFixedDPIFactor: 1
92 | excludedTargetPlatforms: []
93 | - serializedVersion: 2
94 | name: High
95 | pixelLightCount: 2
96 | shadows: 2
97 | shadowResolution: 1
98 | shadowProjection: 1
99 | shadowCascades: 2
100 | shadowDistance: 40
101 | shadowNearPlaneOffset: 3
102 | shadowCascade2Split: 0.33333334
103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
104 | shadowmaskMode: 1
105 | blendWeights: 2
106 | textureQuality: 0
107 | anisotropicTextures: 1
108 | antiAliasing: 0
109 | softParticles: 0
110 | softVegetation: 1
111 | realtimeReflectionProbes: 1
112 | billboardsFaceCameraPosition: 1
113 | vSyncCount: 1
114 | lodBias: 1
115 | maximumLODLevel: 0
116 | particleRaycastBudget: 256
117 | asyncUploadTimeSlice: 2
118 | asyncUploadBufferSize: 4
119 | resolutionScalingFixedDPIFactor: 1
120 | excludedTargetPlatforms: []
121 | - serializedVersion: 2
122 | name: Very High
123 | pixelLightCount: 3
124 | shadows: 2
125 | shadowResolution: 2
126 | shadowProjection: 1
127 | shadowCascades: 2
128 | shadowDistance: 70
129 | shadowNearPlaneOffset: 3
130 | shadowCascade2Split: 0.33333334
131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
132 | shadowmaskMode: 1
133 | blendWeights: 4
134 | textureQuality: 0
135 | anisotropicTextures: 2
136 | antiAliasing: 2
137 | softParticles: 1
138 | softVegetation: 1
139 | realtimeReflectionProbes: 1
140 | billboardsFaceCameraPosition: 1
141 | vSyncCount: 1
142 | lodBias: 1.5
143 | maximumLODLevel: 0
144 | particleRaycastBudget: 1024
145 | asyncUploadTimeSlice: 2
146 | asyncUploadBufferSize: 4
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Ultra
151 | pixelLightCount: 4
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 4
156 | shadowDistance: 150
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: 2
171 | maximumLODLevel: 0
172 | particleRaycastBudget: 4096
173 | asyncUploadTimeSlice: 2
174 | asyncUploadBufferSize: 4
175 | resolutionScalingFixedDPIFactor: 1
176 | excludedTargetPlatforms: []
177 | m_PerPlatformDefaultQuality:
178 | Android: 2
179 | Nintendo 3DS: 5
180 | Nintendo Switch: 5
181 | PS4: 5
182 | PSM: 5
183 | PSP2: 2
184 | Standalone: 5
185 | Tizen: 2
186 | WebGL: 3
187 | WiiU: 5
188 | Windows Store Apps: 5
189 | XboxOne: 5
190 | iPhone: 2
191 | tvOS: 2
192 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/Assets/Scripts/WorldManager.cs:
--------------------------------------------------------------------------------
1 | //using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.UI;
5 | using UnityEngine.EventSystems;
6 |
7 | ///
8 | /// Types of world point "looks".
9 | /// "sphereLook" rotates the world sphere on the X and Y axis.
10 | /// "cameraLook" rotates the camera pivot on the X and Y axis.
11 | /// "sphereAndCameraLook" rotates the world sphere on the X axis and the camera on the Y axis
12 | ///
13 | public enum Rotations { sphereLook, cameraLook, sphereAndCameraLook }
14 |
15 | ///
16 | /// This script should be attached to an empty GameObject that has another empty GameObject as a child, let´s call this new child "WorldParent".
17 | /// Inside the WorldParent, we create the actual Sphere and call it something like "WorldSphere".
18 | ///
19 | public class WorldManager : MonoBehaviour {
20 |
21 | [Header("List of World Points")]
22 | /// The list of world points, all changes can be made in the inspector!
23 | /// Check the WorldPoint Class at the end of the code to see the clas variables.
24 | public List worldPointsList = new List();
25 | [Space]
26 | [Header("Parameters")]
27 | public Rotations rotationType;
28 | public float lookVelocity = 10;
29 | [Space]
30 | [Header("Public References")]
31 | /// Reference to the Sphere's Parent Transform.
32 | public Transform worldParent;
33 | /// Reference to the 3D World Sphere Transform.
34 | public Transform worldSphere;
35 | /// Reference to the Camera's Parent Transform.
36 | public Transform cameraParent;
37 | [Header("Prefabs")]
38 | /// Reference to the World Point Prefab. The prefab should be an empty GameObject that has a child that is moved on the Z-axis.
39 | /// The child has to be moved to the edge of the 3D sphere. In Unity's default sphere, that's 0.5 on the Z-axis.
40 | public GameObject worldPointPrefab;
41 | [Space]
42 | [Header("UI Stuff")]
43 | public Transform _ButtonUiHolder;
44 |
45 | /// Private variables
46 | private Transform target;
47 | private Vector3 rotation = Vector3.zero;
48 |
49 | void Start () {
50 |
51 | /// If World Points List is empty, create a few examples
52 | if (worldPointsList.Count == 0)
53 | {
54 | WorldPoint a = new WorldPoint();
55 | a.name = "Example 1"; a.color = Color.red; a.x = 0; a.y = 20;
56 | WorldPoint b = new WorldPoint();
57 | b.name = "Example 2"; b.color = Color.green; b.x = 50; b.y = -20;
58 | WorldPoint c = new WorldPoint();
59 | c.name = "Example 3"; c.color = Color.blue; c.x = -20; c.y = -10;
60 | worldPointsList.Add(a); worldPointsList.Add(b); worldPointsList.Add(c);
61 | }
62 |
63 | /// Loop through the list of world points
64 | for (int i = 0; i < worldPointsList.Count; i++)
65 | {
66 | /// Create the world point for the according element in the loop.
67 | CreateWorldPoint(worldPointsList[i]);
68 | /// Create the debug buttons for the according element in the loop.
69 | CreateDebugWorldPointButton(worldPointsList[i]);
70 | }
71 |
72 | /// Look at the first world point (If the list count is bigger than 0).
73 | if (worldPointsList.Count > 0)
74 | {
75 | LookAtWorldPoint(worldPointsList[0]);
76 | }
77 |
78 | }
79 |
80 | ///
81 | /// Function that creates the visual representation of a World Point class.
82 | ///
83 | /// Reference to the World Point to be created.
84 | void CreateWorldPoint(WorldPoint wp)
85 | {
86 | /// Instantiate the World Point point prefab as a child of the world sphere (As new GameObject)
87 | GameObject pivot = Instantiate(worldPointPrefab, worldSphere.transform);
88 | /// Use the World Point coordinates to rotate the New GameObject in euler angles.
89 | pivot.transform.eulerAngles = new Vector3(wp.y, -wp.x, 0);
90 | /// Name the New GameObject
91 | pivot.name = wp.name;
92 | /// Set the target transform of the reference World Point.
93 | wp.SetTarget(pivot.transform.GetChild(0));
94 | /// Change the color of the new Game Object's renderer.
95 | pivot.GetComponentInChildren().material.color = wp.color;
96 | }
97 |
98 | void Update () {
99 |
100 | /// Use the keyboard numbers to look at the world points.
101 | for (int i = 0; i < worldPointsList.Count; i++)
102 | {
103 | if (Input.GetKeyDown(i.ToString()))
104 | {
105 | LookAtWorldPoint(worldPointsList[i]);
106 | }
107 | }
108 |
109 | /// Lerp the angle of the world sphere on the Y (euler) axis using the X coordinates of the currently selected World Point.
110 | Vector3 worldAngle = new Vector3(0, Mathf.LerpAngle(worldSphere.localEulerAngles.y, rotation.x, lookVelocity * Time.deltaTime), 0);
111 | /// Lerp the angle of the world sphere PARENT on the X (euler) axis using the Y coordinates of the currently selected World Point.
112 | Vector3 worldParentAngle = new Vector3(Mathf.LerpAngle(worldParent.localEulerAngles.x, -rotation.y, lookVelocity * Time.deltaTime), 0, 0);
113 |
114 | ///Camera Lerps
115 | Vector3 cameraAngle = new Vector3(Mathf.LerpAngle(cameraParent.localEulerAngles.x, rotation.y, lookVelocity * Time.deltaTime), Mathf.LerpAngle(cameraParent.localEulerAngles.y, -rotation.x, lookVelocity * Time.deltaTime), 0);
116 | Vector3 cameraAxisAngle = new Vector3(Mathf.LerpAngle(cameraParent.localEulerAngles.x, rotation.y, lookVelocity * Time.deltaTime), 0, 0);
117 |
118 | if (rotationType == Rotations.sphereLook)
119 | {
120 | worldSphere.localEulerAngles = worldAngle;
121 | worldParent.localEulerAngles = worldParentAngle;
122 | }
123 |
124 | if (rotationType == Rotations.cameraLook)
125 | {
126 | cameraParent.localEulerAngles = cameraAngle;
127 | }
128 |
129 | if (rotationType == Rotations.sphereAndCameraLook)
130 | {
131 | worldSphere.localEulerAngles = worldAngle;
132 | cameraParent.localEulerAngles = cameraAxisAngle;
133 | }
134 |
135 | }
136 |
137 | ///
138 | /// Function that changes the current focused World Point.
139 | ///
140 | ///
141 | void LookAtWorldPoint(WorldPoint wp)
142 | {
143 | rotation = new Vector3(wp.x, wp.y);
144 | target = wp.target;
145 | }
146 |
147 | /// Draw Gizmos to facilitate the World Points visualisation.
148 | void OnDrawGizmos()
149 | {
150 | #if UNITY_EDITOR
151 | /// Only draw the gizmos is there is at least one world point.
152 | if (worldPointsList.Count > 0)
153 | {
154 | /// Loop through all the world points.
155 | for (int i = 0; i < worldPointsList.Count; i++)
156 | {
157 | /// Set gizmos color to be equal the correspondent world point.
158 | Gizmos.color = worldPointsList[i].color;
159 | /// Just in case the color is "empty", set it to Red.
160 | if (Gizmos.color == Color.clear) Gizmos.color = Color.red;
161 | /// Create two empty gameobjects to simulate the world point prefab's position / rotation.
162 | GameObject gizmoPoint = new GameObject();
163 | GameObject gizmoParent = new GameObject();
164 | /// Move the gizmoPoint to the edge of the sphere (0.5f on the Z axis)
165 | gizmoPoint.transform.position += -Vector3.forward/2;
166 | /// Parent the gizmoPoint to the "gizmoParent" object in the center.
167 | gizmoPoint.transform.parent = gizmoParent.transform;
168 | /// Rotate the gizmoParent object based on the world point cooridates.
169 | gizmoParent.transform.eulerAngles += new Vector3(worldPointsList[i].y, -worldPointsList[i].x, 0);
170 | /// Keep track of the world point position in play mode in order for the gizmos to follow.
171 | if (Application.isPlaying)
172 | {
173 | gizmoParent.transform.position += worldSphere.transform.position;
174 | gizmoParent.transform.rotation = worldPointsList[i].target.parent.rotation;
175 | }
176 | /// Draw a gizmo sphere in the world point position.
177 | Gizmos.DrawSphere(gizmoPoint.transform.position, 0.07f);
178 | /// Destroy all the objects created.
179 | DestroyImmediate(gizmoPoint);
180 | DestroyImmediate(gizmoParent);
181 | }
182 | }
183 | #endif
184 | }
185 |
186 | /// ------------------------------------------------ DEBUG STUFF ------------------------------------------------------ ///
187 |
188 | void CreateDebugWorldPointButton(WorldPoint wp)
189 | {
190 | GameObject button = new GameObject();
191 | GameObject text = new GameObject();
192 | button.transform.SetParent(_ButtonUiHolder);
193 | button.transform.localScale = Vector3.one;
194 | button.transform.localPosition = Vector3.zero;
195 | button.AddComponent();
196 | button.AddComponent();
197 | Button b = button.AddComponent