Compare commits

...

6 Commits

76 changed files with 6606 additions and 14 deletions

View File

@@ -0,0 +1,13 @@
{
"permissions": {
"allow": [
"Bash(nul)",
"Bash(mkdir:*)",
"Bash(dir:*)",
"Bash(findstr:*)",
"Bash(move \"Assets\\Scripts\\TiltUI.cs\" \"Assets\\Scripts\\TiltUI.cs.DISABLED\")"
],
"deny": [],
"ask": []
}
}

4
.gitignore vendored
View File

@@ -186,7 +186,6 @@ StyleCopReport.xml
*_p.c *_p.c
*_h.h *_h.h
*.ilk *.ilk
*.meta
*.obj *.obj
*.iobj *.iobj
*.pch *.pch
@@ -305,7 +304,6 @@ PublishScripts/
# NuGet Symbol Packages # NuGet Symbol Packages
*.snupkg *.snupkg
# The packages folder can be ignored because of Package Restore # The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target. # except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/ !**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed # Uncomment if necessary however generally it will be regenerated when needed
@@ -501,3 +499,5 @@ FodyWeavers.xsd
# End of https://www.toptal.com/developers/gitignore/api/unity,visualstudiocode,visualstudio,vim # End of https://www.toptal.com/developers/gitignore/api/unity,visualstudiocode,visualstudio,vim
.utmp/

View File

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

Binary file not shown.

View File

@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 58ebc3ffa125a9949953f6704e0a8c39
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

8
Assets/GameManager.meta Normal file
View File

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

View File

@@ -0,0 +1,21 @@
//using GeoSus.Client;
using System;
using UnityEngine;
public enum TaskType
{
Task
}
public interface ITask
{
public string TaskID { get; set; } // Unikátní ID úkolu pro server
public TaskType TaskType { get; set; } // Typ úkolu
public string TaskName { get; set; } // Viditelný název úkolu
public (double, double) TaskLocation { get; set; } // Poloha na mapě
public bool IsCompleted { get; } // Stav dokončení úkolu
void Initialize(Action<ITask> onCompleted); // Vytvoření tasku
void ExitTask(Action<ITask> onExit); // Při opuštění úkolu
void Complete(); // Označit úkol jako dokončený
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 00f17be43b5049645915f193bf99516b

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 55b6abf6106d3da4d9a6d0550a804f3b
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Materials.meta Normal file
View File

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

8
Assets/Readme.asset.meta Normal file
View File

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

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8afa6ce05eb7dba4c894b910786e3baf
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Scenes.meta Normal file
View File

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

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8afa6ce05eb7dba4c894b910786e3baf
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Scripts.meta Normal file
View File

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

View File

@@ -0,0 +1,27 @@
using UnityEngine;
public class FollowParentPositionOnly : MonoBehaviour
{
public Transform parent;
private Quaternion initialRotation;
private Vector3 worldOffset;
void Start()
{
if (parent == null)
parent = transform.parent;
// Store offset in WORLD space
worldOffset = transform.position - parent.position;
initialRotation = transform.rotation;
}
void LateUpdate()
{
if (parent == null) return;
// Move child using stored world offset
transform.position = parent.position + worldOffset;
transform.rotation = initialRotation;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b159266533f64ba4eb30ef6112cc4611

View File

@@ -0,0 +1,30 @@
using UnityEngine;
public class GyroPlatformController : MonoBehaviour
{
public Rigidbody ball;
public float forceStrength = 30f;
public float dampingPerSecond = 0.9f;
void Start()
{
if (SystemInfo.supportsGyroscope)
{
Input.gyro.enabled = true;
}
}
void FixedUpdate()
{
if (ball == null) return;
Vector3 g = Input.gyro.gravity;
Vector3 force = new Vector3(g.x, 0f, g.y);
ball.AddForce(force * forceStrength, ForceMode.Acceleration);
float frameDamping = Mathf.Pow(dampingPerSecond, Time.deltaTime);
ball.linearVelocity *= frameDamping;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d665da208a5a3ad408e85341263c60e5

View File

@@ -0,0 +1,33 @@
using UnityEngine;
public class HoleGoalTrigger : MonoBehaviour
{
[Tooltip("Optional: assign the ball rigidbody or leave empty to accept any Rigidbody with tag Ball.")]
public Rigidbody ballRigidbody;
[Tooltip("If true, checks tag 'Ball' when ballRigidbody not assigned.")]
public bool requireBallTag = true;
public System.Action OnBallScored;
private void OnTriggerEnter(Collider other)
{
if (ballRigidbody != null)
{
if (other.attachedRigidbody == ballRigidbody)
{
OnBallScored?.Invoke();
}
return;
}
if (other.attachedRigidbody == null) return;
if (requireBallTag)
{
if (!other.CompareTag("Ball")) return;
}
OnBallScored?.Invoke();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e6bad0eb7441229448191433d8a9f758

View File

@@ -0,0 +1,30 @@
using UnityEngine;
public class PlayAudioOnCamera : MonoBehaviour
{
public AudioClip clip; // assign your audio file in the Inspector
private AudioSource audioSource;
void Start()
{
// Get or add an AudioSource to this GameObject
audioSource = gameObject.GetComponent<AudioSource>();
if (audioSource == null)
{
audioSource = gameObject.AddComponent<AudioSource>();
}
// Assign the audio clip
if (clip != null)
{
audioSource.clip = clip;
audioSource.playOnAwake = false;
audioSource.loop = false; // change to true if you want looping
audioSource.Play();
}
else
{
Debug.LogWarning("PlayAudioOnCamera: No audio clip assigned!");
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 37f33c8b63e5b384db6a385b909b27aa

View File

@@ -0,0 +1,29 @@
using UnityEngine;
public class TeleportOnTrigger : MonoBehaviour
{
[Header("Teleport Target")]
public Transform targetPosition;
private void OnTriggerEnter(Collider other)
{
if (targetPosition == null) return;
Rigidbody rb = other.attachedRigidbody;
if (rb != null)
{
// STOP ALL MOTION
rb.linearVelocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
// TELEPORT
rb.position = targetPosition.position;
}
else
{
// Non-physics objects
other.transform.position = targetPosition.position;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2e101cb487f02244592e16548d98f0b5

View File

@@ -0,0 +1,187 @@
using System;
using UnityEngine;
public class TiltHoleMiniGameManager : MonoBehaviour, ITask
{
// =========================
// ITask PROPERTIES
// =========================
public string TaskID { get; private set; } = "TILT_HOLE_01";
public TaskType TaskType { get; private set; } = TaskType.Task;
public string TaskName { get; private set; } = "Tilt Ball Into Hole";
public (double, double) TaskLocation { get; private set; } = (0, 0);
public bool IsCompleted { get; private set; }
private Action<ITask> _onCompletedCallback;
// =========================
// MINIGAME REFERENCES
// =========================
[Header("References")]
public GyroPlatformController platformController;
public HoleGoalTrigger goalTrigger;
public Rigidbody ball;
[Header("Audio")]
public AudioClip startSound;
public AudioClip winSound;
private AudioSource audioSource;
[Header("Game State")]
public bool isActive = false;
[Header("Win Behavior")]
public bool freezeOnWin = true;
public bool disableBallOnWin = false;
// =========================
// UNITY LIFECYCLE
// =========================
void Awake()
{
if (platformController == null) platformController = FindFirstObjectByType<GyroPlatformController>();
if (goalTrigger == null) goalTrigger = FindFirstObjectByType<HoleGoalTrigger>();
if (Camera.main != null)
{
audioSource = Camera.main.GetComponent<AudioSource>();
if (audioSource == null)
audioSource = Camera.main.gameObject.AddComponent<AudioSource>();
}
}
void Start()
{
if (goalTrigger != null)
{
goalTrigger.OnBallScored += HandleWin;
}
if (ball != null && goalTrigger != null)
{
goalTrigger.ballRigidbody = ball;
}
}
void OnDestroy()
{
if (goalTrigger != null)
goalTrigger.OnBallScored -= HandleWin;
}
// =========================
// TASK LIFECYCLE
// =========================
public void Initialize(Action<ITask> onCompleted)
{
Debug.Log("Initializing Tilt Hole Task");
IsCompleted = false;
isActive = true;
_onCompletedCallback = onCompleted;
if (platformController != null)
platformController.enabled = true;
if (ball != null)
{
ball.isKinematic = false;
ball.linearVelocity = Vector3.zero;
ball.angularVelocity = Vector3.zero;
}
if (startSound != null && audioSource != null)
{
audioSource.PlayOneShot(startSound);
}
}
public void ExitTask(Action<ITask> onExit)
{
Debug.Log("Exiting Tilt Hole Task");
isActive = false;
if (platformController != null)
platformController.enabled = false;
onExit?.Invoke(this);
}
public void Complete()
{
if (IsCompleted) return;
Debug.Log("Task Complete: Tilt Hole");
IsCompleted = true;
isActive = false;
if (winSound != null && audioSource != null)
{
audioSource.PlayOneShot(winSound);
}
_onCompletedCallback?.Invoke(this);
ExitTask(null);
}
// =========================
// MINIGAME WIN EVENT
// =========================
private void HandleWin()
{
if (!isActive) return;
Debug.Log("Ball reached hole.");
if (freezeOnWin)
{
if (platformController != null)
platformController.enabled = false;
if (ball != null)
{
ball.linearVelocity = Vector3.zero;
ball.angularVelocity = Vector3.zero;
ball.isKinematic = true;
}
}
if (disableBallOnWin && ball != null)
{
ball.gameObject.SetActive(false);
}
Complete(); // 🔥 THIS completes the task
}
// =========================
// DEBUG GUI
// =========================
void OnGUI()
{
GUIStyle s = new GUIStyle(GUI.skin.label);
s.fontSize = 24;
if (isActive)
{
s.normal.textColor = Color.white;
GUI.Label(new Rect(10, 10, 700, 30),
"Goal: Tilt platform to roll the ball into the hole.", s);
}
else if (IsCompleted)
{
s.normal.textColor = Color.yellow;
GUI.Label(new Rect(10, 10, 700, 30),
"Task Completed!", s);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9f70c5a8e211b7142b26b4ea95bf2348

View File

@@ -0,0 +1,51 @@
using UnityEngine;
public class WindController : MonoBehaviour
{
[Header("settings větru")]
[Tooltip("Maximální síla větru (kladná i záporná)")]
public float maxWindTorque = 8f;
[Tooltip("Jak rychle se větr mění směrem/sílou")]
public float windChangeSpeed = 0.6f;
[Tooltip("Jak často se objeví silnější vichřice (v sekundách)")]
public float gustInterval = 4f;
[Tooltip("Multiplier pro sílu vichřice")]
public float gustMultiplier = 2.0f;
public float CurrentWindTorque { get; private set; }
private float targetTorque;
private float gustTimer;
void Start()
{
PickNewTargetTorque();
gustTimer = gustInterval;
}
void Update()
{
// Smoothly move wind toward target torque
CurrentWindTorque = Mathf.Lerp(CurrentWindTorque, targetTorque, Time.deltaTime * windChangeSpeed);
// Occasional gusts
gustTimer -= Time.deltaTime;
if (gustTimer <= 0f)
{
// Apply a short gust by shifting target torque more aggressively
float gust = Random.Range(-maxWindTorque, maxWindTorque) * gustMultiplier;
targetTorque = Mathf.Clamp(gust, -maxWindTorque * gustMultiplier, maxWindTorque * gustMultiplier);
gustTimer = gustInterval;
Invoke(nameof(PickNewTargetTorque), 0.8f); // gust lasts ~0.8s
}
}
private void PickNewTargetTorque()
{
targetTorque = Random.Range(-maxWindTorque, maxWindTorque);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a2d62d3ffa507924ab3a6fd97f185f3e

8
Assets/Settings.meta Normal file
View File

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

View File

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

View File

@@ -0,0 +1,55 @@
%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: 15003, guid: 0000000000000000e000000000000000, type: 0}
m_Name: "Android\u2122 1"
m_EditorClassIdentifier: UnityEditor.dll::UnityEditor.Build.Profile.BuildProfile
m_AssetVersion: 1
m_BuildTarget: 13
m_Subtarget: 0
m_PlatformId: b9b35072a6f44c2e863f17467ea3dc13
m_PlatformBuildProfile:
rid: 240730859082350731
m_OverrideGlobalSceneList: 0
m_Scenes: []
m_ScriptingDefines: []
m_PlayerSettingsYaml:
m_Settings: []
references:
version: 2
RefIds:
- rid: 240730859082350731
type: {class: AndroidPlatformBuildSettings, ns: UnityEditor.Android, asm: UnityEditor.Android.Extensions}
data:
m_Development: 0
m_ConnectProfiler: 0
m_BuildWithDeepProfilingSupport: 0
m_AllowDebugging: 0
m_WaitForManagedDebugger: 0
m_ManagedDebuggerFixedPort: 0
m_ExplicitNullChecks: 0
m_ExplicitDivideByZeroChecks: 0
m_ExplicitArrayBoundsChecks: 0
m_CompressionType: 2
m_InstallInBuildFolder: 0
m_InsightsSettingsContainer:
m_BuildProfileEngineDiagnosticsState: 2
m_BuildSubtarget: 0
m_BuildSystem: 1
m_ExportAsGoogleAndroidProject: 0
m_DebugSymbolLevel: 1
m_DebugSymbolFormat: 5
m_CurrentDeploymentTargetId: __builtin__target_default
m_BuildType: 2
m_LinkTimeOptimization: 0
m_BuildAppBundle: 0
m_IPAddressToConnect:
m_SymlinkSources: 0

View File

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

View File

@@ -0,0 +1,55 @@
%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: 15003, guid: 0000000000000000e000000000000000, type: 0}
m_Name: "Android\u2122"
m_EditorClassIdentifier: UnityEditor.dll::UnityEditor.Build.Profile.BuildProfile
m_AssetVersion: 1
m_BuildTarget: 13
m_Subtarget: 0
m_PlatformId: b9b35072a6f44c2e863f17467ea3dc13
m_PlatformBuildProfile:
rid: 4246746364202188844
m_OverrideGlobalSceneList: 0
m_Scenes: []
m_ScriptingDefines: []
m_PlayerSettingsYaml:
m_Settings: []
references:
version: 2
RefIds:
- rid: 4246746364202188844
type: {class: AndroidPlatformBuildSettings, ns: UnityEditor.Android, asm: UnityEditor.Android.Extensions}
data:
m_Development: 1
m_ConnectProfiler: 0
m_BuildWithDeepProfilingSupport: 0
m_AllowDebugging: 0
m_WaitForManagedDebugger: 0
m_ManagedDebuggerFixedPort: 0
m_ExplicitNullChecks: 0
m_ExplicitDivideByZeroChecks: 0
m_ExplicitArrayBoundsChecks: 0
m_CompressionType: 2
m_InstallInBuildFolder: 0
m_InsightsSettingsContainer:
m_BuildProfileEngineDiagnosticsState: 2
m_BuildSubtarget: 0
m_BuildSystem: 1
m_ExportAsGoogleAndroidProject: 0
m_DebugSymbolLevel: 4
m_DebugSymbolFormat: 5
m_CurrentDeploymentTargetId: __builtin__target_default
m_BuildType: 1
m_LinkTimeOptimization: 0
m_BuildAppBundle: 0
m_IPAddressToConnect:
m_SymlinkSources: 0

View File

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

View File

@@ -0,0 +1,49 @@
%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: 15003, guid: 0000000000000000e000000000000000, type: 0}
m_Name: iOS
m_EditorClassIdentifier: UnityEditor.dll::UnityEditor.Build.Profile.BuildProfile
m_AssetVersion: 1
m_BuildTarget: 9
m_Subtarget: 0
m_PlatformId: ad48d16a66894befa4d8181998c3cb09
m_PlatformBuildProfile:
rid: 4718407457732296746
m_OverrideGlobalSceneList: 0
m_Scenes: []
m_ScriptingDefines:
-
m_PlayerSettingsYaml:
m_Settings: []
references:
version: 2
RefIds:
- rid: 4718407457732296746
type: {class: iOSPlatformSettings, ns: UnityEditor.iOS, asm: UnityEditor.iOS.Extensions}
data:
m_Development: 0
m_ConnectProfiler: 0
m_BuildWithDeepProfilingSupport: 0
m_AllowDebugging: 0
m_WaitForManagedDebugger: 0
m_ManagedDebuggerFixedPort: 0
m_ExplicitNullChecks: 0
m_ExplicitDivideByZeroChecks: 0
m_ExplicitArrayBoundsChecks: 0
m_CompressionType: 0
m_InstallInBuildFolder: 0
m_InsightsSettingsContainer:
m_BuildProfileEngineDiagnosticsState: 2
m_iOSXcodeBuildConfig: 1
m_SymlinkSources: 0
m_PreferredXcode:
m_SymlinkTrampoline: 0

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

8
Assets/TutorialInfo.meta Normal file
View File

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

View File

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

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 95952c7b1590baf479a484d39d256da9
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7717e22d410f9a444be1699f27f08476
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 84b2aaf916697844694b8831472d3e0e

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bd183dd179558504ab1767087b1efc32

BIN
Assets/Untitled.blend1 Normal file

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8a3ae6902f1c0f640a60306c36bf7976
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Untitled.stl Normal file

Binary file not shown.

7
Assets/Untitled.stl.meta Normal file
View File

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

View File

@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 26709d992d8a99b4791083f116c56a36
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

348
Assets/dd.unity Normal file
View File

@@ -0,0 +1,348 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &871248414
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 871248415}
m_Layer: 0
m_Name: gamemanager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &871248415
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 871248414}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.27, y: 0, z: 0.21026}
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 &1078774431
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1078774434}
- component: {fileID: 1078774433}
- component: {fileID: 1078774432}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &1078774432
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078774431}
m_Enabled: 1
--- !u!20 &1078774433
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078774431}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1078774434
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078774431}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, 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 &1757180458
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1757180460}
- component: {fileID: 1757180459}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1757180459
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1757180458}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
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:
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_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1757180460
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1757180458}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1078774434}
- {fileID: 1757180460}
- {fileID: 871248415}

7
Assets/dd.unity.meta Normal file
View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8f9e944b2f23a444588ce2e4ac78b0f0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/koulickaone.blend1 Normal file

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 74379ac554348f84c8d3abeb440b79b9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/koulickaone.fbx Normal file

Binary file not shown.

110
Assets/koulickaone.fbx.meta Normal file
View File

@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 7fd80bd46d706b042a137593bf706d58
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

1047
Assets/pojekt.unity Normal file

File diff suppressed because it is too large Load Diff

7
Assets/pojekt.unity.meta Normal file
View File

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

2909
CODE_EXPLANATION.md Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

39
Packages/manifest.json Normal file
View File

@@ -0,0 +1,39 @@
{
"dependencies": {
"com.unity.textmeshpro": "4.0.0",
"com.unity.ugui": "2.0.0",
"com.unity.multiplayer.center": "1.0.0",
"com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.cloth": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.screencapture": "1.0.0",
"com.unity.modules.terrain": "1.0.0",
"com.unity.modules.terrainphysics": "1.0.0",
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.umbra": "1.0.0",
"com.unity.modules.unityanalytics": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.unitywebrequesttexture": "1.0.0",
"com.unity.modules.unitywebrequestwww": "1.0.0",
"com.unity.modules.vehicles": "1.0.0",
"com.unity.modules.video": "1.0.0",
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
}

286
Packages/packages-lock.json Normal file
View File

@@ -0,0 +1,286 @@
{
"dependencies": {
"com.unity.multiplayer.center": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.uielements": "1.0.0"
}
},
"com.unity.textmeshpro": {
"version": "5.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.ugui": "2.0.0"
}
},
"com.unity.ugui": {
"version": "2.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0"
}
},
"com.unity.modules.accessibility": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.ai": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.androidjni": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.animation": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.assetbundle": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.audio": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.cloth": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.director": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.animation": "1.0.0"
}
},
"com.unity.modules.hierarchycore": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.imageconversion": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.imgui": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.jsonserialize": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.particlesystem": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.physics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.physics2d": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.screencapture": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.subsystems": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {
"com.unity.modules.jsonserialize": "1.0.0"
}
},
"com.unity.modules.terrain": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.terrainphysics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.terrain": "1.0.0"
}
},
"com.unity.modules.tilemap": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics2d": "1.0.0"
}
},
"com.unity.modules.ui": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.uielements": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.hierarchycore": "1.0.0",
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.umbra": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.unityanalytics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
}
},
"com.unity.modules.unitywebrequest": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.unitywebrequestassetbundle": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0"
}
},
"com.unity.modules.unitywebrequestaudio": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.audio": "1.0.0"
}
},
"com.unity.modules.unitywebrequesttexture": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.unitywebrequestwww": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.vehicles": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.video": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0"
}
},
"com.unity.modules.vr": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
},
"com.unity.modules.wind": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.xr": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.subsystems": "1.0.0"
}
}
}
}

View File

@@ -3,10 +3,11 @@
--- !u!55 &1 --- !u!55 &1
PhysicsManager: PhysicsManager:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 13 serializedVersion: 20
m_Gravity: {x: 0, y: -9.81, z: 0} m_Gravity: {x: 0, y: -20, z: 0}
m_DefaultMaterial: {fileID: 0} m_DefaultMaterial: {fileID: 0}
m_BounceThreshold: 2 m_BounceThreshold: 2
m_DefaultMaxDepenetrationVelocity: 10
m_SleepThreshold: 0.005 m_SleepThreshold: 0.005
m_DefaultContactOffset: 0.01 m_DefaultContactOffset: 0.01
m_DefaultSolverIterations: 6 m_DefaultSolverIterations: 6
@@ -16,11 +17,11 @@ PhysicsManager:
m_EnableAdaptiveForce: 0 m_EnableAdaptiveForce: 0
m_ClothInterCollisionDistance: 0.1 m_ClothInterCollisionDistance: 0.1
m_ClothInterCollisionStiffness: 0.2 m_ClothInterCollisionStiffness: 0.2
m_ContactsGeneration: 1
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_AutoSimulation: 1 m_SimulationMode: 0
m_AutoSyncTransforms: 0 m_AutoSyncTransforms: 0
m_ReuseCollisionCallbacks: 1 m_ReuseCollisionCallbacks: 1
m_InvokeCollisionCallbacks: 1
m_ClothInterCollisionSettingsToggle: 0 m_ClothInterCollisionSettingsToggle: 0
m_ClothGravity: {x: 0, y: -9.81, z: 0} m_ClothGravity: {x: 0, y: -9.81, z: 0}
m_ContactPairsMode: 0 m_ContactPairsMode: 0
@@ -31,6 +32,10 @@ PhysicsManager:
m_WorldSubdivisions: 8 m_WorldSubdivisions: 8
m_FrictionType: 0 m_FrictionType: 0
m_EnableEnhancedDeterminism: 0 m_EnableEnhancedDeterminism: 0
m_EnableUnifiedHeightmaps: 1 m_ImprovedPatchFriction: 0
m_GenerateOnTriggerStayEvents: 1
m_SolverType: 0 m_SolverType: 0
m_DefaultMaxAngularSpeed: 50 m_DefaultMaxAngularSpeed: 50
m_ScratchBufferChunkCount: 4
m_CurrentBackendId: 4072204805
m_FastMotionThreshold: 3.4028235e+38

View File

@@ -5,9 +5,12 @@ EditorBuildSettings:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Scenes: m_Scenes:
- enabled: 1 - enabled: 0
path: Assets/Scenes/SampleScene.unity path: Assets/Scenes/SampleScene.unity
guid: 99c9720ab356a0642a771bea13969a05 guid: 6a18d9b328b6a794da5d050347950362
- enabled: 1
path: Assets/pojekt.unity
guid: f01e25b5a8e60224fa8643bf4f074a71
m_configObjects: m_configObjects:
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
m_UseUCBPForAssetBundles: 0 m_UseUCBPForAssetBundles: 0

View File

@@ -8,7 +8,7 @@ PlayerSettings:
AndroidProfiler: 0 AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0 AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0 AndroidEnableSustainedPerformanceMode: 0
defaultScreenOrientation: 4 defaultScreenOrientation: 0
targetDevice: 2 targetDevice: 2
useOnDemandResources: 0 useOnDemandResources: 0
accelerometerFrequency: 60 accelerometerFrequency: 60
@@ -161,7 +161,7 @@ PlayerSettings:
m_ColorGamuts: 00000000 m_ColorGamuts: 00000000
targetPixelDensity: 30 targetPixelDensity: 30
resolutionScalingMode: 0 resolutionScalingMode: 0
resetResolutionOnWindowResize: 0 resetResolutionOnWindowResize: 1
androidSupportedAspectRatio: 1 androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.4 androidMaxAspectRatio: 2.4
androidMinAspectRatio: 1 androidMinAspectRatio: 1
@@ -558,13 +558,16 @@ PlayerSettings:
- serializedVersion: 3 - serializedVersion: 3
m_BuildTarget: Android m_BuildTarget: Android
m_Formats: 03000000 m_Formats: 03000000
- serializedVersion: 3
m_BuildTarget: iOS
m_Formats: 03000000
playModeTestRunnerEnabled: 0 playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0 runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1 actionOnDotNetUnhandledException: 1
editorGfxJobOverride: 1 editorGfxJobOverride: 1
enableInternalProfiler: 0 enableInternalProfiler: 0
logObjCUncaughtExceptions: 1 logObjCUncaughtExceptions: 1
enableCrashReportAPI: 0 enableCrashReportAPI: 1
cameraUsageDescription: cameraUsageDescription:
locationUsageDescription: locationUsageDescription:
microphoneUsageDescription: microphoneUsageDescription:
@@ -920,7 +923,7 @@ PlayerSettings:
qnxGraphicConfPath: qnxGraphicConfPath:
apiCompatibilityLevel: 6 apiCompatibilityLevel: 6
captureStartupLogs: {} captureStartupLogs: {}
activeInputHandler: 1 activeInputHandler: 0
windowsGamepadBackendHint: 0 windowsGamepadBackendHint: 0
cloudProjectId: 8feb5b9d-fe4c-4652-bc44-283fb1a29892 cloudProjectId: 8feb5b9d-fe4c-4652-bc44-283fb1a29892
framebufferDepthMemorylessMode: 0 framebufferDepthMemorylessMode: 0

View File

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

View File

@@ -4,7 +4,7 @@
UnityConnectSettings: UnityConnectSettings:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 1 serializedVersion: 1
m_Enabled: 0 m_Enabled: 1
m_TestMode: 0 m_TestMode: 0
m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
m_EventUrl: https://cdp.cloud.unity3d.com/v1/events m_EventUrl: https://cdp.cloud.unity3d.com/v1/events

719
SETUP_GUIDE.md Normal file
View File

@@ -0,0 +1,719 @@
# GYROSCOPE TILT GAME - COMPLETE SETUP GUIDE
> **Unity 6 (6000.x) Specific Guide**
> This guide uses Unity 6's new **Build Profiles** system (replaces old Build Settings).
> If you're on Unity 2022 or older, some menu names will be different.
## 📋 TABLE OF CONTENTS
1. [Overview](#overview)
2. [Unity Scene Setup](#unity-scene-setup)
3. [Build Profiles](#build-profiles-unity-6)
4. [Testing on Device](#testing-on-device)
5. [How to Play](#how-to-play)
6. [Customization](#customization)
7. [Troubleshooting](#troubleshooting)
---
## 📖 OVERVIEW
### What This Game Does:
- Detects when you tilt your phone around the Z-axis (portrait to landscape)
- Counts successful tilts (crossing -45° or +45°)
- Tracks time spent holding tilt position
- Hybrid scoring: Complete 10 tilts AND hold for 15 seconds total
### Scripts Included:
1. **GyroTiltController.cs** - Handles all gyroscope input, calibration, and tilt detection
2. **TiltGameManagerAutoStart.cs** - Game logic with auto-start (no UI needed)
### What You'll See:
- Debug text overlay showing angles, score, and objectives
- Optional 3D cube that rotates with your phone
- Game auto-starts after 2 seconds
- Game auto-restarts after completion
---
## 🎮 UNITY SCENE SETUP
### STEP 1: Create GameManager
1. **Create Empty GameObject:**
- Right-click in **Hierarchy****Create Empty**
- Name it: `GameManager`
- Position: `(0, 0, 0)`
2. **Add GyroTiltController Script:**
- Select `GameManager` in Hierarchy
- In Inspector, click **Add Component**
- Type: `GyroTiltController`
- Press Enter
3. **Configure GyroTiltController:**
```
✓ Enable Gyro On Start: CHECKED
Smoothing: 0.5
Left Tilt Threshold: -45
Right Tilt Threshold: 45
Deadzone Angle: 10
Visual Target: (leave empty for now - we'll add in Step 2)
Visual Rotation Multiplier: 1
```
4. **Add TiltGameManagerAutoStart Script:**
- With `GameManager` still selected
- Click **Add Component**
- Type: `TiltGameManagerAutoStart`
- Press Enter
5. **Configure TiltGameManagerAutoStart:**
```
Gyro Controller: [Drag "GameManager" from Hierarchy here]
Game Duration: 30
Target Tilt Count: 10
Target Hold Time: 15
Points Per Tilt: 10
Points Per Second Hold: 5
Completion Bonus: 100
Auto Start Delay: 2
```
**IMPORTANT:** You MUST drag the `GameManager` GameObject into the "Gyro Controller" field!
---
### STEP 2: Create Visual Indicator (Optional but Recommended)
This creates a 3D object that rotates when you tilt your phone.
1. **Create 3D Cube:**
- Right-click Hierarchy → **3D Object** → **Cube**
- Name it: `TiltIndicator`
2. **Position It:**
- Select `TiltIndicator`
- In Inspector, set Transform:
```
Position: X=0, Y=0, Z=5 (in front of camera)
Rotation: X=0, Y=0, Z=0
Scale: X=0.5, Y=2, Z=0.1 (makes it arrow-like)
```
3. **Optional - Add Color:**
- In Project window: Right-click → **Create** → **Material**
- Name: `TiltMaterial`
- Select it, set Albedo color to bright cyan or any color you like
- Drag `TiltMaterial` onto `TiltIndicator` in Scene view
4. **Connect to GyroTiltController:**
- Select `GameManager` in Hierarchy
- Find the **GyroTiltController** component in Inspector
- Drag `TiltIndicator` from Hierarchy into the **Visual Target** field
- Now the cube will rotate with your phone!
---
### STEP 3: Verify Camera Exists
- You should already have **Main Camera** in your scene
- If not: GameObject → Camera
- Default position is fine: `(0, 1, -10)`
---
### STEP 4: Save Your Scene
1. **File** → **Save As**
2. Name: `TiltGame`
3. Save location: `Assets/Scenes/TiltGame.unity`
---
### ✅ FINAL HIERARCHY CHECK
Your Hierarchy should look like this:
```
Scene: TiltGame
├── Main Camera
├── Directional Light (default)
├── GameManager
│ ├── GyroTiltController (script component)
│ └── TiltGameManagerAutoStart (script component)
└── TiltIndicator (Cube)
```
That's it! Only 3-4 GameObjects needed.
---
## 📱 BUILD PROFILES (Unity 6)
Unity 6 uses **Build Profiles** instead of the old Build Settings window.
### STEP 1: Open Build Profiles Window
1. **File** → **Build Profiles**
2. The Build Profiles window opens (replaces old Build Settings)
---
### STEP 2: Create Android Build Profile
1. In Build Profiles window, click **Create Build Profile** (or the **+** button)
2. Select **Android** from the list
3. The Android build profile is created and activated automatically
**For iOS (if targeting iPhone):**
1. Click **+** button in Build Profiles window
2. Select **iOS**
3. You'll need a Mac and Xcode for the actual build
---
### STEP 3: Add Scene to Build Profile
1. In Build Profiles window, make sure your **Android** profile is selected (highlighted)
2. Look for the **Scenes in Build** section
3. Click **Add Open Scenes** button (or drag scene from Project window)
4. You should see `Scenes/TiltGame` in the list with a checkmark
---
### STEP 4: Configure Player Settings
1. In Build Profiles window, with Android profile selected, find the **Player Settings** section
2. Or go to: **Edit** → **Project Settings** → **Player** → **Android tab** (Android icon)
3. Configure these settings:
```
Company Name: YourName
Product Name: TiltGame
Version: 1.0
Resolution and Presentation:
Default Orientation: Portrait
(or Auto Rotation if you want flexibility)
Allowed Orientations for Auto Rotation:
✓ Portrait
✓ Landscape Left
✓ Landscape Right
Other Settings (scroll down):
Minimum API Level: Android 7.0 'Nougat' (API Level 24) or higher
Target API Level: Automatic (highest installed)
Scripting Backend: IL2CPP (recommended) or Mono
ARM64: ✓ (required for Google Play)
```
---
### STEP 5: Build to Device
**Option A: Build And Run (Recommended)**
1. **Enable USB Debugging on your Android phone:**
- Settings → About Phone → Tap "Build Number" 7 times
- Settings → Developer Options → Enable "USB Debugging"
2. **Connect phone via USB cable**
3. **In Unity:**
- Make sure Android build profile is **active** (selected in Build Profiles window)
- Click **Build and Run** button in Build Profiles window
- Choose save location for APK (e.g., `Builds/TiltGame.apk`)
- Click Save
- Wait for build (2-10 minutes first time)
- App automatically installs and launches on phone!
**Option B: Build APK Only**
1. In Build Profiles window, click **Build** button
2. Choose save location (e.g., `Builds/TiltGame.apk`)
3. Click Save and wait for build to complete
4. Transfer APK to phone (Google Drive, email, USB, etc.)
5. Install manually on phone
**Option C: Quick Build (Unity 6 Feature)**
1. Use keyboard shortcut: **Ctrl+B** (Windows) or **Cmd+B** (Mac)
2. Builds to the last used location automatically
3. Super fast for testing iterations!
---
### Unity 6 Build Profiles - What's New?
Unity 6's Build Profiles are better than old Build Settings:
✅ **Multiple profiles:** Create Android, iOS, and PC builds without switching platforms constantly
✅ **Faster switching:** No more waiting 5 minutes to switch platforms
✅ **Per-profile settings:** Different scenes/settings for each platform
✅ **Keyboard shortcuts:** Ctrl+B for quick builds
**Example workflow:**
1. Create Android profile (for phone testing)
2. Create Standalone profile (for PC testing)
3. Switch between them instantly - no re-importing!
---
## 🎮 HOW TO PLAY
### When You Launch the App:
#### **First 2 Seconds:**
```
Debug text shows:
"Game starting soon..."
"Hold device and press CALIBRATE if needed"
Raw Z: 12.3° ← Your current tilt angle (raw sensor data)
Smoothed Z: 11.8° ← Filtered angle (smoother, less jittery)
State: Neutral ← Current tilt state
```
**What to do:** Hold your phone in a comfortable position (portrait, landscape, whatever you prefer)
---
#### **Game Starts (After 2 Seconds):**
```
GAME ACTIVE
Time: 30.0s ← Countdown timer
Score: 0 ← Your current score
Tilts: 0/10 ← Tilt count / target
Hold: 0.0s/15s ← Hold time / target
```
**Objective:** Complete BOTH goals before time runs out:
- ✅ Cross tilt threshold 10 times (left or right)
- ✅ Hold tilted position for 15 seconds total (cumulative)
---
#### **How to Score Points:**
1. **Tilt Scoring (+10 points each):**
- Tilt phone LEFT past -45° → triggers "TILT LEFT"
- Tilt phone RIGHT past +45° → triggers "TILT RIGHT"
- Each crossing = 1 tilt counted
- Console shows: `>>> TILT #1! +10 points`
2. **Hold Time Scoring (+5 points per second):**
- Stay tilted past threshold (left OR right)
- Timer accumulates while holding
- Points added continuously: `+5, +10, +15...`
3. **Completion Bonus (+100 points):**
- Complete BOTH objectives before 30 seconds
- Automatically awards 100 bonus points
- Shows: `★★★ ALL OBJECTIVES COMPLETED! ★★★`
---
#### **Visual Feedback:**
- **Tilt Angle Number:** Updates in real-time as you tilt
- **State Indicator:** Shows "Neutral", "TiltLeft", or "TiltRight"
- **Cube Rotation:** The TiltIndicator cube rotates matching your phone tilt
- **Score Counter:** Updates continuously
- **Green Text:** Objectives turn green when completed
---
#### **Game Over:**
```
GAME OVER
Final Score: 245
Restarting in 5s...
```
Game automatically restarts after 5 seconds!
---
### Controls Summary:
| Action | What Happens |
|--------|--------------|
| Tilt left (past -45°) | +1 tilt, +10 points, state = TiltLeft |
| Tilt right (past +45°) | +1 tilt, +10 points, state = TiltRight |
| Hold tilt position | Hold time increases, +5 pts/second |
| Return to neutral | State = Neutral, hold time stops |
| Complete objectives | Game ends, +100 bonus |
| Time reaches 0s | Game ends, no bonus |
---
## ⚙️ CUSTOMIZATION
### Make Game Easier/Harder:
Open Unity, select `GameManager`, modify these values:
**Easier:**
```
TiltGameManagerAutoStart:
Game Duration: 45 (more time)
Target Tilt Count: 5 (fewer tilts needed)
Target Hold Time: 10 (less hold time needed)
GyroTiltController:
Left Tilt Threshold: -30 (easier to trigger)
Right Tilt Threshold: 30
```
**Harder:**
```
TiltGameManagerAutoStart:
Game Duration: 20 (less time)
Target Tilt Count: 15 (more tilts needed)
Target Hold Time: 20 (more hold time needed)
GyroTiltController:
Left Tilt Threshold: -60 (harder to trigger)
Right Tilt Threshold: 60
```
---
### Adjust Smoothing:
**Jittery/Jumpy rotation?**
```
GyroTiltController:
Smoothing: 0.7-0.9 (more smoothing, less jitter)
```
**Laggy/Slow response?**
```
GyroTiltController:
Smoothing: 0.1-0.3 (less smoothing, faster response)
```
---
### Change Scoring:
```
TiltGameManagerAutoStart:
Points Per Tilt: 20 (instead of 10)
Points Per Second Hold: 10 (instead of 5)
Completion Bonus: 500 (instead of 100)
```
---
### Adjust Auto-Start Delay:
```
TiltGameManagerAutoStart:
Auto Start Delay: 5 (wait 5 seconds instead of 2)
```
Set to `0` to start immediately!
---
### Change Game Duration:
```
TiltGameManagerAutoStart:
Game Duration: 60 (1 minute game)
```
---
## 🔧 TROUBLESHOOTING
### Problem: "Gyroscope not supported"
**Cause:** Device doesn't have gyroscope sensor (rare on modern phones)
**Fix:**
- Test on a different phone
- Verify gyro exists: Install "Sensor Kinetics" app from Play Store
- Most phones from 2015+ have gyroscope
---
### Problem: Tilt detection feels backwards
**Cause:** Different phone orientation than expected
**Fix Option 1 - Recalibrate:**
- Hold phone in your preferred "neutral" position
- (Future version will have calibrate button)
**Fix Option 2 - Swap thresholds in code:**
```
Left Tilt Threshold: 45
Right Tilt Threshold: -45
```
---
### Problem: Cube doesn't rotate
**Cause:** Visual Target not assigned
**Fix:**
1. Select `GameManager`
2. Find `GyroTiltController` component
3. Drag `TiltIndicator` into "Visual Target" field
4. If field is grayed out, make sure TiltIndicator exists in Hierarchy
---
### Problem: No tilts detected when I tilt phone
**Cause 1:** Threshold too high
```
Solution: Lower thresholds to -30 / +30
```
**Cause 2:** Wrong axis
```
Solution: Check you're tilting around Z-axis (portrait ↔ landscape)
Not tilting forward/backward (that's X-axis)
```
**Cause 3:** Inside deadzone
```
Solution: Lower deadzone from 10 to 5
```
---
### Problem: Game doesn't start
**Cause:** Gyro Controller reference missing
**Fix:**
1. Select `GameManager`
2. Find `TiltGameManagerAutoStart` component
3. Make sure "Gyro Controller" field has `GameManager` assigned
4. If it says "None", drag `GameManager` from Hierarchy into that field
---
### Problem: Compilation errors in Unity
**Cause:** TiltUI.cs or TiltGameManager.cs are active (they need TextMeshPro)
**Fix:**
These files should be disabled (renamed to `.DISABLED` extension).
Only these scripts should exist:
- ✅ GyroTiltController.cs
- ✅ TiltGameManagerAutoStart.cs
If you see TiltUI.cs, rename it to TiltUI.cs.DISABLED
---
### Problem: Gyro drifts over time
**Cause:** Gyroscope sensors have slight drift
**Fix:**
- Calibration helps reset the drift
- In current version, game auto-calibrates on start
- Future: Add manual calibrate button
---
### Problem: Can't install APK on phone
**Cause:** "Install from unknown sources" disabled
**Fix:**
1. Settings → Security
2. Enable "Unknown Sources" or "Install Unknown Apps"
3. Allow installation from your file manager app
---
### Problem: Screen auto-rotates during gameplay
**Cause:** Orientation set to Auto Rotation
**Fix:**
- Unity: Player Settings → Default Orientation → Portrait
- Or: Lock orientation in phone settings during gameplay
---
### Problem: Build fails / Unity crashes
**Solutions:**
1. Close Unity, delete `Library` folder, reopen project
2. Update Android SDK/NDK (Unity Hub → Installs → Add Modules)
3. Lower graphics quality: Edit → Project Settings → Quality → Set to "Low"
4. Check disk space (need ~5GB free)
5. **Unity 6 specific:** Make sure Build Profile is active (highlighted in Build Profiles window)
6. **Unity 6 specific:** Check that scene is in the Build Profile's "Scenes in Build" list
---
## 📊 UNDERSTANDING THE DEBUG TEXT
### Upper Section (Always Visible):
```
Raw Z: -23.4° ← Direct sensor reading (updates ~100 times/sec)
Smoothed Z: -21.8° ← Filtered value (what game uses for detection)
State: TiltLeft ← Current tilt state (Neutral/TiltLeft/TiltRight)
```
**What the angles mean:**
- `` = Neutral position (as calibrated)
- Negative (-45°) = Tilted LEFT (counterclockwise)
- Positive (+45°) = Tilted RIGHT (clockwise)
- Range: -180° to +180°
---
### Lower Section (During Gameplay):
```
GAME ACTIVE ← Game state indicator
Time: 18.3s ← Countdown (turns red below 10s)
Score: 145 ← Current score (yellow)
Tilts: 7/10 ← Progress (turns green when complete)
Hold: 9.2s/15s ← Progress (turns green when complete)
```
---
## 🎯 TIPS FOR BEST EXPERIENCE
1. **Calibrate at start:**
- Hold phone comfortably when game starts
- This becomes your "0 degrees" reference
2. **Smooth tilting:**
- Tilt smoothly, not jerky
- Cross the threshold clearly (go past -45° or +45°)
3. **Alternate left/right:**
- Tilt left, back to center, tilt right, repeat
- Gets tilts quickly while building hold time
4. **Hold at threshold:**
- After tilting past threshold, hold position
- Accumulates hold time while waiting to tilt back
5. **Watch the cube:**
- Visual indicator helps you see current tilt
- When cube is heavily tilted, you're in scoring zone
---
## 📝 GAME STRATEGY
### Beginner Strategy: "Slow and Steady"
- Tilt left → hold 2 seconds → center
- Tilt right → hold 2 seconds → center
- Repeat 10 times
- Time: ~25-30 seconds (good if you're methodical)
### Advanced Strategy: "Fast Tilts"
- Rapid tilts left-right-left-right (get to 10 tilts fast)
- Then hold at either threshold for remaining hold time
- Time: ~15-20 seconds (requires practice)
### Perfect Strategy: "Hybrid"
- Tilt left → hold 1.5s
- Tilt right → hold 1.5s
- Repeat 10 times (10 tilts × 1.5s × 2 = 30s hold time!)
- Completes both objectives simultaneously
---
## 📂 FILE STRUCTURE
```
Assets/
├── Scenes/
│ └── TiltGame.unity (Your game scene)
├── Scripts/
│ ├── GyroTiltController.cs (Gyro input handler)
│ └── TiltGameManagerAutoStart.cs (Game logic)
└── Materials/ (optional)
└── TiltMaterial.mat (Color for cube)
Builds/
└── TiltGame.apk (Android build output)
```
---
## 🚀 QUICK START CHECKLIST
Before building, verify:
- [ ] Scene saved as `TiltGame.unity`
- [ ] `GameManager` exists in Hierarchy
- [ ] `GameManager` has 2 scripts: GyroTiltController + TiltGameManagerAutoStart
- [ ] `TiltGameManagerAutoStart` → Gyro Controller field = `GameManager`
- [ ] `TiltIndicator` (cube) exists
- [ ] `TiltIndicator` assigned to GyroTiltController → Visual Target
- [ ] Scene added to Build Profile
- [ ] Android Build Profile created and active
- [ ] Player Settings configured (Orientation, API Level)
- [ ] Phone connected via USB (for Build And Run)
- [ ] USB Debugging enabled on phone
---
## 🎓 NEXT STEPS / ENHANCEMENTS
Want to improve the game? Here are ideas:
### Easy Additions:
- Add UI buttons (requires setting up TextMeshPro)
- Add sound effects on tilt
- Change cube to arrow 3D model
- Add particle effects on successful tilt
### Medium Additions:
- Add difficulty levels (Easy/Medium/Hard)
- Add high score tracking (PlayerPrefs)
- Add different game modes
- Add vibration feedback on tilt
### Advanced Additions:
- Online leaderboards
- Multiple levels with increasing difficulty
- Power-ups (2x points, slow time, etc.)
- Tutorial sequence for first-time players
- Settings menu (adjust thresholds, smoothing)
---
## 📞 NEED HELP?
If you encounter issues not covered in Troubleshooting:
1. Check Unity Console for error messages
2. Verify all steps were followed exactly
3. Try on a different Android device
4. Rebuild after cleaning (delete Library folder)
---
**Created for Unity 6 (6000.2.8f1)**
**Works on Android 7.0+ and iOS 11+**
**Last Updated: 2025-11-15**
---
## 🎉 YOU'RE READY!
Follow the steps above and you'll have a fully working gyroscope tilt game.
**Estimated Setup Time:** 10-15 minutes
**Estimated Build Time:** 5-10 minutes (first build)
Have fun tilting! 📱🎮