From e12fcea2e862b547f39c8a3e0e1532b6a95722fc Mon Sep 17 00:00:00 2001 From: Dmitry Evdokimov Date: Thu, 4 Jun 2026 15:45:39 +0300 Subject: [PATCH] first commit --- .gitignore | 74 + Assets/Scenes.meta | 8 + Assets/Scenes/SampleScene.unity | 267 + Assets/Scenes/SampleScene.unity.meta | 7 + Assets/_Audio.meta | 8 + Assets/_Audio/AttentionCue.wav | Bin 0 -> 48554 bytes Assets/_Audio/AttentionCue.wav.meta | 23 + Assets/_Materials.meta | 8 + Assets/_Materials/Chest_Mat.mat | 83 + Assets/_Materials/Chest_Mat.mat.meta | 8 + Assets/_Materials/Dark_Mat.mat | 83 + Assets/_Materials/Dark_Mat.mat.meta | 8 + Assets/_Materials/Door_Mat.mat | 83 + Assets/_Materials/Door_Mat.mat.meta | 8 + Assets/_Materials/Floor_Mat.mat | 83 + Assets/_Materials/Floor_Mat.mat.meta | 8 + Assets/_Materials/Highlight_Mat.mat | 83 + Assets/_Materials/Highlight_Mat.mat.meta | 8 + Assets/_Materials/Statue_Mat.mat | 83 + Assets/_Materials/Statue_Mat.mat.meta | 8 + Assets/_Materials/Wall_Mat.mat | 83 + Assets/_Materials/Wall_Mat.mat.meta | 8 + Assets/_Prefabs.meta | 8 + Assets/_Prefabs/SecretChest.prefab | 385 ++ Assets/_Prefabs/SecretChest.prefab.meta | 7 + Assets/_Scenes.meta | 8 + Assets/_Scenes/NarrativeScene.unity | 4592 +++++++++++++++++ Assets/_Scenes/NarrativeScene.unity.meta | 7 + Assets/_Scripts.meta | 8 + Assets/_Scripts/AttentionTrigger.cs | 56 + Assets/_Scripts/AttentionTrigger.cs.meta | 11 + Assets/_Scripts/CameraController.cs | 126 + Assets/_Scripts/CameraController.cs.meta | 11 + Assets/_Scripts/DepthOfFieldController.cs | 24 + .../_Scripts/DepthOfFieldController.cs.meta | 11 + Assets/_Scripts/Editor.meta | 8 + Assets/_Scripts/Editor/Lab8SceneBuilder.cs | 525 ++ .../_Scripts/Editor/Lab8SceneBuilder.cs.meta | 11 + Assets/_Scripts/HighlightOnApproach.cs | 76 + Assets/_Scripts/HighlightOnApproach.cs.meta | 11 + Assets/_Scripts/HintManager.cs | 59 + Assets/_Scripts/HintManager.cs.meta | 11 + Assets/_Scripts/InteractableObject.cs | 49 + Assets/_Scripts/InteractableObject.cs.meta | 11 + Assets/_Scripts/NarrativeEventManager.cs | 70 + Assets/_Scripts/NarrativeEventManager.cs.meta | 11 + Assets/_Scripts/PlayerMovement.cs | 80 + Assets/_Scripts/PlayerMovement.cs.meta | 11 + Packages/manifest.json | 41 + Packages/packages-lock.json | 382 ++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 34 + ProjectSettings/EditorBuildSettings.asset | 11 + ProjectSettings/EditorSettings.asset | 30 + ProjectSettings/GraphicsSettings.asset | 63 + ProjectSettings/InputManager.asset | 295 ++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/NavMeshAreas.asset | 91 + ProjectSettings/PackageManagerSettings.asset | 35 + .../Settings.json | 5 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 772 +++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 234 + ProjectSettings/SceneTemplateSettings.json | 121 + ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 36 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 73 files changed, 9576 insertions(+) create mode 100644 .gitignore create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/SampleScene.unity create mode 100644 Assets/Scenes/SampleScene.unity.meta create mode 100644 Assets/_Audio.meta create mode 100644 Assets/_Audio/AttentionCue.wav create mode 100644 Assets/_Audio/AttentionCue.wav.meta create mode 100644 Assets/_Materials.meta create mode 100644 Assets/_Materials/Chest_Mat.mat create mode 100644 Assets/_Materials/Chest_Mat.mat.meta create mode 100644 Assets/_Materials/Dark_Mat.mat create mode 100644 Assets/_Materials/Dark_Mat.mat.meta create mode 100644 Assets/_Materials/Door_Mat.mat create mode 100644 Assets/_Materials/Door_Mat.mat.meta create mode 100644 Assets/_Materials/Floor_Mat.mat create mode 100644 Assets/_Materials/Floor_Mat.mat.meta create mode 100644 Assets/_Materials/Highlight_Mat.mat create mode 100644 Assets/_Materials/Highlight_Mat.mat.meta create mode 100644 Assets/_Materials/Statue_Mat.mat create mode 100644 Assets/_Materials/Statue_Mat.mat.meta create mode 100644 Assets/_Materials/Wall_Mat.mat create mode 100644 Assets/_Materials/Wall_Mat.mat.meta create mode 100644 Assets/_Prefabs.meta create mode 100644 Assets/_Prefabs/SecretChest.prefab create mode 100644 Assets/_Prefabs/SecretChest.prefab.meta create mode 100644 Assets/_Scenes.meta create mode 100644 Assets/_Scenes/NarrativeScene.unity create mode 100644 Assets/_Scenes/NarrativeScene.unity.meta create mode 100644 Assets/_Scripts.meta create mode 100644 Assets/_Scripts/AttentionTrigger.cs create mode 100644 Assets/_Scripts/AttentionTrigger.cs.meta create mode 100644 Assets/_Scripts/CameraController.cs create mode 100644 Assets/_Scripts/CameraController.cs.meta create mode 100644 Assets/_Scripts/DepthOfFieldController.cs create mode 100644 Assets/_Scripts/DepthOfFieldController.cs.meta create mode 100644 Assets/_Scripts/Editor.meta create mode 100644 Assets/_Scripts/Editor/Lab8SceneBuilder.cs create mode 100644 Assets/_Scripts/Editor/Lab8SceneBuilder.cs.meta create mode 100644 Assets/_Scripts/HighlightOnApproach.cs create mode 100644 Assets/_Scripts/HighlightOnApproach.cs.meta create mode 100644 Assets/_Scripts/HintManager.cs create mode 100644 Assets/_Scripts/HintManager.cs.meta create mode 100644 Assets/_Scripts/InteractableObject.cs create mode 100644 Assets/_Scripts/InteractableObject.cs.meta create mode 100644 Assets/_Scripts/NarrativeEventManager.cs create mode 100644 Assets/_Scripts/NarrativeEventManager.cs.meta create mode 100644 Assets/_Scripts/PlayerMovement.cs create mode 100644 Assets/_Scripts/PlayerMovement.cs.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/SceneTemplateSettings.json create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8044d52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# Unity generated folders +/Library/ +/Temp/ +/Obj/ +/Build/ +/Builds/ +/Logs/ +/UserSettings/ +/MemoryCaptures/ +/Recordings/ + +# Unity generated files +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db +*.pidb.meta +*.pdb.meta +*.mdb.meta +sysinfo.txt + +# Unity crash reports +/[Cc]rash[Rr]eports/ + +# Unity asset store tools +/Assets/AssetStoreTools* + +# Visual Studio / Rider / VS Code generated files +/.vs/ +/.vscode/ +/.idea/ +*.csproj +*.sln +*.suo +*.user +*.userprefs +*.pidb +*.booproj +*.tmp +*.cache + +# OS files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Thumbs.db +ehthumbs.db +Desktop.ini + +# Builds and packages +*.apk +*.aab +*.unitypackage +*.app +*.exe +*.zip +*.tar +*.tar.gz +*.rar +*.7z + +# Lab reports / office documents +*.doc +*.docx +~$*.docx + +# Local Codex/agent workspace metadata +/.agents/ +/.codex/ diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..b563758 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf4ba00c00089dfe7872bcf06a1a5b96 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..c39e581 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,267 @@ +%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: 9 + 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: 705507994} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + 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_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + 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 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + 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 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 8 + 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_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_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 705507993} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + 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 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 963194225} + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + 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 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 963194225} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Audio.meta b/Assets/_Audio.meta new file mode 100644 index 0000000..86998be --- /dev/null +++ b/Assets/_Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51391f79e1a807a1e92afe32fdeb553c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Audio/AttentionCue.wav b/Assets/_Audio/AttentionCue.wav new file mode 100644 index 0000000000000000000000000000000000000000..8c0c764a06d5794f27bbabf5a50014fc04f95b78 GIT binary patch literal 48554 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.isTrigger = true; + } + + private void OnTriggerEnter(Collider other) + { + if (hasTriggered || !other.CompareTag("Player")) + { + return; + } + + hasTriggered = true; + + // One trigger coordinates camera focus, UI hint, and sound cue. + cameraController?.SetFixedCamera(cameraPoint, fixedCameraDuration); + hintManager?.ShowHint(hintText, hintDuration); + + if (audioClip != null) + { + if (audioSource != null) + { + audioSource.PlayOneShot(audioClip); + } + else + { + AudioSource.PlayClipAtPoint(audioClip, transform.position); + } + } + + Collider triggerCollider = GetComponent(); + triggerCollider.enabled = false; + + if (destroyAfterTrigger) + { + Destroy(gameObject, fixedCameraDuration + 1f); + } + } +} diff --git a/Assets/_Scripts/AttentionTrigger.cs.meta b/Assets/_Scripts/AttentionTrigger.cs.meta new file mode 100644 index 0000000..cbccd0e --- /dev/null +++ b/Assets/_Scripts/AttentionTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1bafa59269f1b99d81a3b4abfd5e865 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/CameraController.cs b/Assets/_Scripts/CameraController.cs new file mode 100644 index 0000000..690eeae --- /dev/null +++ b/Assets/_Scripts/CameraController.cs @@ -0,0 +1,126 @@ +using System.Collections; +using UnityEngine; + +public class CameraController : MonoBehaviour +{ + [Header("Follow")] + public Transform target; + public Vector3 followOffset = new Vector3(0f, 1.7f, -3.5f); + public float followSmooth = 10f; + public float rotationSmooth = 12f; + + [Header("Fixed Camera")] + public float transitionTime = 1.1f; + public DepthOfFieldController depthOfFieldController; + + public bool IsInFixedMode { get; private set; } + + private float pitch; + private Coroutine fixedCameraRoutine; + + private void Start() + { + SnapToFollowPosition(); + } + + private void LateUpdate() + { + if (IsInFixedMode || target == null) + { + return; + } + + // Normal mode: keep the rig behind the player and match the player's yaw plus camera pitch. + Vector3 desiredPosition = GetFollowPosition(); + Quaternion desiredRotation = GetFollowRotation(); + + transform.position = Vector3.Lerp(transform.position, desiredPosition, followSmooth * Time.deltaTime); + transform.rotation = Quaternion.Slerp(transform.rotation, desiredRotation, rotationSmooth * Time.deltaTime); + } + + public void SetPitch(float newPitch) + { + pitch = newPitch; + } + + public void SetFixedCamera(Transform point, float duration) + { + if (point == null) + { + return; + } + + if (fixedCameraRoutine != null) + { + StopCoroutine(fixedCameraRoutine); + } + + fixedCameraRoutine = StartCoroutine(FixedCameraRoutine(point, duration)); + } + + private IEnumerator FixedCameraRoutine(Transform point, float duration) + { + IsInFixedMode = true; + depthOfFieldController?.EnableFocus(point); + + // Attention mode: move to the authored point, hold the shot, then return control to the player. + yield return MoveCamera(transform.position, transform.rotation, point.position, point.rotation, transitionTime); + yield return new WaitForSeconds(duration); + yield return MoveCamera(transform.position, transform.rotation, GetFollowPosition(), GetFollowRotation(), transitionTime); + + depthOfFieldController?.DisableFocus(); + IsInFixedMode = false; + fixedCameraRoutine = null; + } + + private IEnumerator MoveCamera(Vector3 startPosition, Quaternion startRotation, Vector3 endPosition, Quaternion endRotation, float time) + { + float timer = 0f; + + while (timer < time) + { + timer += Time.deltaTime; + float t = Mathf.Clamp01(timer / time); + + transform.position = Vector3.Lerp(startPosition, endPosition, t); + transform.rotation = Quaternion.Slerp(startRotation, endRotation, t); + + yield return null; + } + + transform.position = endPosition; + transform.rotation = endRotation; + } + + private Vector3 GetFollowPosition() + { + if (target == null) + { + return transform.position; + } + + Quaternion yawRotation = Quaternion.Euler(0f, target.eulerAngles.y, 0f); + return target.position + yawRotation * followOffset; + } + + private Quaternion GetFollowRotation() + { + if (target == null) + { + return transform.rotation; + } + + return Quaternion.Euler(pitch, target.eulerAngles.y, 0f); + } + + private void SnapToFollowPosition() + { + if (target == null) + { + return; + } + + transform.position = GetFollowPosition(); + transform.rotation = GetFollowRotation(); + } +} diff --git a/Assets/_Scripts/CameraController.cs.meta b/Assets/_Scripts/CameraController.cs.meta new file mode 100644 index 0000000..462d49f --- /dev/null +++ b/Assets/_Scripts/CameraController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 243d19ebb175df8a0823d7191d4c835b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/DepthOfFieldController.cs b/Assets/_Scripts/DepthOfFieldController.cs new file mode 100644 index 0000000..8272e72 --- /dev/null +++ b/Assets/_Scripts/DepthOfFieldController.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +public class DepthOfFieldController : MonoBehaviour +{ + public bool IsFocusEnabled { get; private set; } + public Transform FocusTarget { get; private set; } + + public void EnableFocus(Transform focusTarget) + { + IsFocusEnabled = true; + FocusTarget = focusTarget; + + // In a project with Post Processing or URP Volume, enable Depth of Field here + // and update focus distance from the active camera to FocusTarget. + } + + public void DisableFocus() + { + IsFocusEnabled = false; + FocusTarget = null; + + // Disable the real Depth of Field override here when a post-processing stack is connected. + } +} diff --git a/Assets/_Scripts/DepthOfFieldController.cs.meta b/Assets/_Scripts/DepthOfFieldController.cs.meta new file mode 100644 index 0000000..ce1e97d --- /dev/null +++ b/Assets/_Scripts/DepthOfFieldController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fa130583c0c407c193059fbef648fcc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/Editor.meta b/Assets/_Scripts/Editor.meta new file mode 100644 index 0000000..84ab139 --- /dev/null +++ b/Assets/_Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43921b15919f250b98decc7a8b08d09a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/Editor/Lab8SceneBuilder.cs b/Assets/_Scripts/Editor/Lab8SceneBuilder.cs new file mode 100644 index 0000000..f6d45a9 --- /dev/null +++ b/Assets/_Scripts/Editor/Lab8SceneBuilder.cs @@ -0,0 +1,525 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEditor.Events; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.SceneManagement; +using UnityEngine.UI; + +public static class Lab8SceneBuilder +{ + private const string ScenePath = "Assets/_Scenes/NarrativeScene.unity"; + + [MenuItem("Tools/Lab8/Build Narrative Scene")] + public static void BuildNarrativeScene() + { + EnsureFolders(); + + Material floorMat = CreateMaterial("Floor_Mat", new Color(0.28f, 0.30f, 0.27f), 0.1f, 0.35f); + Material wallMat = CreateMaterial("Wall_Mat", new Color(0.48f, 0.46f, 0.42f), 0.05f, 0.25f); + Material statueMat = CreateMaterial("Statue_Mat", new Color(0.62f, 0.66f, 0.70f), 0.25f, 0.55f); + Material highlightMat = CreateMaterial("Highlight_Mat", new Color(1f, 0.86f, 0.34f), 0.1f, 0.75f); + Material doorMat = CreateMaterial("Door_Mat", new Color(0.34f, 0.18f, 0.09f), 0.05f, 0.25f); + Material chestMat = CreateMaterial("Chest_Mat", new Color(0.50f, 0.28f, 0.12f), 0.05f, 0.45f); + Material darkMat = CreateMaterial("Dark_Mat", new Color(0.12f, 0.13f, 0.15f), 0.02f, 0.15f); + + AudioClip attentionClip = CreateAttentionCue(); + + Scene scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + RenderSettings.ambientLight = new Color(0.08f, 0.09f, 0.11f); + RenderSettings.fog = true; + RenderSettings.fogColor = new Color(0.08f, 0.09f, 0.10f); + RenderSettings.fogDensity = 0.018f; + + CreateEnvironment(floorMat, wallMat, darkMat); + HintManager hintManager = CreateUI(); + NarrativeEventManager eventManager = CreateEventManager(hintManager); + + GameObject player = CreatePlayer(); + CameraController cameraController = CreateCamera(player.transform); + + GameObject statue = CreateStatue(statueMat, highlightMat, player.transform, eventManager); + Transform statueCameraPoint = CreateStatueCameraPoint(statue.transform); + + GameObject exitDoor = CreateExitDoor(doorMat); + GameObject secretChest = CreateSecretChest(chestMat, highlightMat, player.transform, eventManager); + Light secretLight = CreateSecretLight(); + CreateDecorations(darkMat, chestMat); + CreateLights(); + CreateAttentionTrigger(cameraController, statueCameraPoint, hintManager, attentionClip); + + eventManager.secretChest = secretChest; + eventManager.secretLight = secretLight; + eventManager.exitDoor = exitDoor.transform; + + PlayerMovement movement = player.GetComponent(); + movement.cameraController = cameraController; + + SaveSecretChestPrefab(secretChest); + secretChest.SetActive(false); + + EditorSceneManager.MarkSceneDirty(scene); + EditorSceneManager.SaveScene(scene, ScenePath); + AddSceneToBuildSettings(ScenePath); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + Debug.Log($"Lab 8 narrative scene built and saved: {ScenePath}"); + } + + private static void EnsureFolders() + { + string[] folders = + { + "Assets/_Scenes", + "Assets/_Scripts", + "Assets/_Scripts/Editor", + "Assets/_Materials", + "Assets/_Prefabs", + "Assets/_Audio" + }; + + foreach (string folder in folders) + { + Directory.CreateDirectory(folder); + } + + AssetDatabase.Refresh(); + } + + private static Material CreateMaterial(string materialName, Color color, float metallic, float smoothness) + { + string path = $"Assets/_Materials/{materialName}.mat"; + Material material = AssetDatabase.LoadAssetAtPath(path); + + if (material == null) + { + Shader shader = Shader.Find("Standard"); + material = new Material(shader); + AssetDatabase.CreateAsset(material, path); + } + + material.name = materialName; + material.color = color; + material.SetFloat("_Metallic", metallic); + material.SetFloat("_Glossiness", smoothness); + EditorUtility.SetDirty(material); + return material; + } + + private static void CreateEnvironment(Material floorMat, Material wallMat, Material darkMat) + { + GameObject environment = new GameObject("AdventureLocation"); + + CreateCube("CorridorFloor", new Vector3(0f, -0.05f, -5f), new Vector3(3f, 0.1f, 14f), floorMat, environment.transform); + CreateCube("RoomFloor", new Vector3(0f, -0.05f, 6f), new Vector3(10f, 0.1f, 8f), floorMat, environment.transform); + + CreateCube("Corridor_LeftWall", new Vector3(-1.65f, 1.5f, -5f), new Vector3(0.25f, 3f, 14f), wallMat, environment.transform); + CreateCube("Corridor_RightWall", new Vector3(1.65f, 1.5f, -5f), new Vector3(0.25f, 3f, 14f), wallMat, environment.transform); + CreateCube("Corridor_BackWall", new Vector3(0f, 1.5f, -12.1f), new Vector3(3.5f, 3f, 0.25f), darkMat, environment.transform); + + CreateCube("Room_LeftWall", new Vector3(-5.1f, 1.5f, 6f), new Vector3(0.25f, 3f, 8.4f), wallMat, environment.transform); + CreateCube("Room_RightWall", new Vector3(5.1f, 1.5f, 6f), new Vector3(0.25f, 3f, 8.4f), wallMat, environment.transform); + CreateCube("Room_BackWall", new Vector3(0f, 1.5f, 10.1f), new Vector3(10.2f, 3f, 0.25f), wallMat, environment.transform); + CreateCube("Room_EntranceWall_Left", new Vector3(-3.4f, 1.5f, 1.9f), new Vector3(3.2f, 3f, 0.25f), wallMat, environment.transform); + CreateCube("Room_EntranceWall_Right", new Vector3(3.4f, 1.5f, 1.9f), new Vector3(3.2f, 3f, 0.25f), wallMat, environment.transform); + CreateCube("Room_EntranceLintel", new Vector3(0f, 2.75f, 1.9f), new Vector3(3f, 0.5f, 0.25f), wallMat, environment.transform); + } + + private static GameObject CreatePlayer() + { + GameObject player = GameObject.CreatePrimitive(PrimitiveType.Capsule); + player.name = "Player"; + player.tag = "Player"; + player.transform.position = new Vector3(0f, 1f, -8.5f); + + UnityEngine.Object.DestroyImmediate(player.GetComponent()); + CharacterController controller = player.AddComponent(); + controller.height = 2f; + controller.radius = 0.45f; + controller.stepOffset = 0.35f; + controller.slopeLimit = 45f; + + player.AddComponent(); + return player; + } + + private static CameraController CreateCamera(Transform player) + { + GameObject rig = new GameObject("CameraRig"); + DepthOfFieldController dof = rig.AddComponent(); + CameraController controller = rig.AddComponent(); + controller.target = player; + controller.followOffset = new Vector3(0f, 1.65f, -3f); + controller.depthOfFieldController = dof; + + GameObject cameraObject = new GameObject("Main Camera"); + cameraObject.tag = "MainCamera"; + cameraObject.transform.SetParent(rig.transform, false); + Camera camera = cameraObject.AddComponent(); + camera.nearClipPlane = 0.05f; + camera.fieldOfView = 65f; + cameraObject.AddComponent(); + + return controller; + } + + private static HintManager CreateUI() + { + GameObject canvasObject = new GameObject("HintCanvas", typeof(RectTransform), typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster)); + Canvas canvas = canvasObject.GetComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + + CanvasScaler scaler = canvasObject.GetComponent(); + scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; + scaler.referenceResolution = new Vector2(1920f, 1080f); + scaler.matchWidthOrHeight = 0.5f; + + GameObject panelObject = new GameObject("HintPanel", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image)); + panelObject.transform.SetParent(canvasObject.transform, false); + RectTransform panelRect = panelObject.GetComponent(); + panelRect.anchorMin = new Vector2(0.5f, 0f); + panelRect.anchorMax = new Vector2(0.5f, 0f); + panelRect.pivot = new Vector2(0.5f, 0f); + panelRect.anchoredPosition = new Vector2(0f, 36f); + panelRect.sizeDelta = new Vector2(900f, 96f); + + Image panelImage = panelObject.GetComponent(); + panelImage.color = new Color(0.02f, 0.02f, 0.02f, 0.78f); + + GameObject textObject = new GameObject("HintText", typeof(RectTransform), typeof(CanvasRenderer), typeof(Text)); + textObject.transform.SetParent(panelObject.transform, false); + RectTransform textRect = textObject.GetComponent(); + textRect.anchorMin = Vector2.zero; + textRect.anchorMax = Vector2.one; + textRect.offsetMin = new Vector2(24f, 10f); + textRect.offsetMax = new Vector2(-24f, -10f); + + Text text = textObject.GetComponent(); + text.font = Resources.GetBuiltinResource("LegacyRuntime.ttf"); + text.fontSize = 28; + text.alignment = TextAnchor.MiddleCenter; + text.color = Color.white; + text.horizontalOverflow = HorizontalWrapMode.Wrap; + text.verticalOverflow = VerticalWrapMode.Truncate; + + HintManager hintManager = canvasObject.AddComponent(); + hintManager.hintPanel = panelObject; + hintManager.hintText = text; + panelObject.SetActive(false); + + GameObject eventSystemObject = new GameObject("EventSystem", typeof(EventSystem), typeof(StandaloneInputModule)); + eventSystemObject.transform.SetAsLastSibling(); + + return hintManager; + } + + private static NarrativeEventManager CreateEventManager(HintManager hintManager) + { + GameObject managerObject = new GameObject("NarrativeEventManager"); + NarrativeEventManager manager = managerObject.AddComponent(); + manager.hintManager = hintManager; + return manager; + } + + private static GameObject CreateStatue(Material statueMat, Material highlightMat, Transform player, NarrativeEventManager eventManager) + { + GameObject statue = new GameObject("Statue"); + statue.transform.position = new Vector3(0f, 0f, 6.8f); + + CreateCube("Statue_Pedestal", new Vector3(0f, 0.25f, 6.8f), new Vector3(1.8f, 0.5f, 1.8f), statueMat, statue.transform); + + GameObject body = GameObject.CreatePrimitive(PrimitiveType.Cylinder); + body.name = "Statue_Body"; + body.transform.SetParent(statue.transform, true); + body.transform.position = new Vector3(0f, 1.15f, 6.8f); + body.transform.localScale = new Vector3(0.72f, 0.9f, 0.72f); + SetMaterial(body, statueMat); + + GameObject head = GameObject.CreatePrimitive(PrimitiveType.Sphere); + head.name = "Statue_Head"; + head.transform.SetParent(statue.transform, true); + head.transform.position = new Vector3(0f, 2.15f, 6.8f); + head.transform.localScale = new Vector3(0.65f, 0.65f, 0.65f); + SetMaterial(head, statueMat); + + GameObject leftArm = GameObject.CreatePrimitive(PrimitiveType.Capsule); + leftArm.name = "Statue_LeftArm"; + leftArm.transform.SetParent(statue.transform, true); + leftArm.transform.position = new Vector3(-0.7f, 1.35f, 6.8f); + leftArm.transform.localScale = new Vector3(0.22f, 0.55f, 0.22f); + leftArm.transform.rotation = Quaternion.Euler(0f, 0f, 28f); + SetMaterial(leftArm, statueMat); + + GameObject rightArm = GameObject.CreatePrimitive(PrimitiveType.Capsule); + rightArm.name = "Statue_RightArm"; + rightArm.transform.SetParent(statue.transform, true); + rightArm.transform.position = new Vector3(0.7f, 1.35f, 6.8f); + rightArm.transform.localScale = new Vector3(0.22f, 0.55f, 0.22f); + rightArm.transform.rotation = Quaternion.Euler(0f, 0f, -28f); + SetMaterial(rightArm, statueMat); + + HighlightOnApproach highlight = statue.AddComponent(); + highlight.player = player; + highlight.highlightMaterial = highlightMat; + highlight.targetRenderers = statue.GetComponentsInChildren(); + highlight.radius = 2.8f; + + InteractableObject interactable = statue.AddComponent(); + interactable.player = player; + interactable.interactionRadius = 2.6f; + interactable.promptText = "Нажмите E, чтобы осмотреть статую"; + UnityEventTools.AddPersistentListener(interactable.onInteract, eventManager.OnStatueInteracted); + + return statue; + } + + private static Transform CreateStatueCameraPoint(Transform statue) + { + GameObject point = new GameObject("StatueCameraPoint"); + point.transform.position = new Vector3(0f, 2.15f, 3.45f); + Vector3 focusPosition = statue.position + new Vector3(0f, 1.45f, 0f); + point.transform.rotation = Quaternion.LookRotation(focusPosition - point.transform.position, Vector3.up); + return point.transform; + } + + private static GameObject CreateExitDoor(Material doorMat) + { + return CreateCube("ExitDoor", new Vector3(0f, 1.2f, 9.95f), new Vector3(2.1f, 2.4f, 0.28f), doorMat, null); + } + + private static GameObject CreateSecretChest(Material chestMat, Material highlightMat, Transform player, NarrativeEventManager eventManager) + { + GameObject chest = new GameObject("SecretChest"); + chest.transform.position = new Vector3(3.45f, 0.05f, 7.5f); + + CreateCube("SecretChest_Base", new Vector3(3.45f, 0.35f, 7.5f), new Vector3(1.3f, 0.55f, 0.85f), chestMat, chest.transform); + GameObject lid = CreateCube("SecretChest_Lid", new Vector3(3.45f, 0.75f, 7.5f), new Vector3(1.35f, 0.25f, 0.9f), chestMat, chest.transform); + lid.transform.rotation = Quaternion.Euler(-8f, 0f, 0f); + + GameObject artifact = GameObject.CreatePrimitive(PrimitiveType.Sphere); + artifact.name = "KeyArtifact"; + artifact.transform.SetParent(chest.transform, true); + artifact.transform.position = new Vector3(3.45f, 1.05f, 7.5f); + artifact.transform.localScale = new Vector3(0.35f, 0.35f, 0.35f); + SetMaterial(artifact, highlightMat); + + InteractableObject interactable = chest.AddComponent(); + interactable.player = player; + interactable.interactionRadius = 2.2f; + interactable.promptText = "Нажмите E, чтобы забрать артефакт"; + UnityEventTools.AddPersistentListener(interactable.onInteract, eventManager.FinishScene); + + return chest; + } + + private static void CreateDecorations(Material darkMat, Material chestMat) + { + GameObject decorRoot = new GameObject("Decorations"); + + CreateColumn("Column_LeftFront", new Vector3(-3.7f, 1.1f, 3.2f), darkMat, decorRoot.transform); + CreateColumn("Column_RightFront", new Vector3(3.7f, 1.1f, 3.2f), darkMat, decorRoot.transform); + CreateColumn("Column_LeftBack", new Vector3(-3.7f, 1.1f, 8.8f), darkMat, decorRoot.transform); + CreateColumn("Column_RightBack", new Vector3(3.7f, 1.1f, 8.8f), darkMat, decorRoot.transform); + + CreateCube("Crate_Left", new Vector3(-3.1f, 0.35f, 5.4f), new Vector3(0.75f, 0.7f, 0.75f), chestMat, decorRoot.transform); + CreateCube("Crate_Right", new Vector3(2.85f, 0.3f, 4.4f), new Vector3(0.65f, 0.6f, 0.65f), chestMat, decorRoot.transform); + CreateCube("BrokenBlock_01", new Vector3(-1.2f, 0.18f, 8.8f), new Vector3(0.9f, 0.35f, 0.55f), darkMat, decorRoot.transform); + CreateCube("BrokenBlock_02", new Vector3(1.25f, 0.18f, 8.55f), new Vector3(0.8f, 0.35f, 0.5f), darkMat, decorRoot.transform); + } + + private static void CreateColumn(string name, Vector3 position, Material material, Transform parent) + { + GameObject column = GameObject.CreatePrimitive(PrimitiveType.Cylinder); + column.name = name; + column.transform.SetParent(parent, true); + column.transform.position = position; + column.transform.localScale = new Vector3(0.42f, 1.1f, 0.42f); + SetMaterial(column, material); + } + + private static void CreateLights() + { + GameObject directionObject = new GameObject("LowAmbient_DirectionalLight"); + Light directionLight = directionObject.AddComponent(); + directionLight.type = LightType.Directional; + directionLight.intensity = 0.22f; + directionLight.color = new Color(0.70f, 0.78f, 0.9f); + directionObject.transform.rotation = Quaternion.Euler(50f, -35f, 0f); + + GameObject statueSpotObject = new GameObject("Statue_SpotLight"); + Light statueSpot = statueSpotObject.AddComponent(); + statueSpot.type = LightType.Spot; + statueSpot.intensity = 5.2f; + statueSpot.range = 8f; + statueSpot.spotAngle = 45f; + statueSpot.color = new Color(1f, 0.86f, 0.58f); + statueSpotObject.transform.position = new Vector3(0f, 4.6f, 4.5f); + statueSpotObject.transform.rotation = Quaternion.LookRotation(new Vector3(0f, 1.2f, 6.8f) - statueSpotObject.transform.position, Vector3.up); + + GameObject corridorLightObject = new GameObject("DimCorridor_PointLight"); + Light corridorLight = corridorLightObject.AddComponent(); + corridorLight.type = LightType.Point; + corridorLight.intensity = 0.65f; + corridorLight.range = 5.5f; + corridorLight.color = new Color(0.55f, 0.62f, 0.78f); + corridorLightObject.transform.position = new Vector3(0f, 2.4f, -5.5f); + } + + private static Light CreateSecretLight() + { + GameObject lightObject = new GameObject("SecretChest_PointLight"); + Light light = lightObject.AddComponent(); + light.type = LightType.Point; + light.intensity = 3.2f; + light.range = 4.5f; + light.color = new Color(1f, 0.80f, 0.35f); + light.transform.position = new Vector3(3.45f, 1.8f, 7.5f); + light.enabled = false; + return light; + } + + private static void CreateAttentionTrigger(CameraController cameraController, Transform cameraPoint, HintManager hintManager, AudioClip clip) + { + GameObject triggerObject = new GameObject("RoomEntrance_AttentionTrigger"); + triggerObject.transform.position = new Vector3(0f, 1.2f, 1.1f); + BoxCollider collider = triggerObject.AddComponent(); + collider.isTrigger = true; + collider.size = new Vector3(3.1f, 2.4f, 1.1f); + + AudioSource audioSource = triggerObject.AddComponent(); + audioSource.playOnAwake = false; + audioSource.spatialBlend = 0.25f; + + AttentionTrigger trigger = triggerObject.AddComponent(); + trigger.cameraController = cameraController; + trigger.cameraPoint = cameraPoint; + trigger.hintManager = hintManager; + trigger.hintText = "Похоже, здесь что-то спрятано..."; + trigger.fixedCameraDuration = 2.4f; + trigger.hintDuration = 3.2f; + trigger.audioClip = clip; + trigger.audioSource = audioSource; + trigger.destroyAfterTrigger = false; + } + + private static GameObject CreateCube(string name, Vector3 position, Vector3 scale, Material material, Transform parent) + { + GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.name = name; + cube.transform.position = position; + cube.transform.localScale = scale; + + if (parent != null) + { + cube.transform.SetParent(parent, true); + } + + SetMaterial(cube, material); + return cube; + } + + private static void SetMaterial(GameObject gameObject, Material material) + { + Renderer renderer = gameObject.GetComponent(); + + if (renderer != null) + { + renderer.sharedMaterial = material; + } + } + + private static AudioClip CreateAttentionCue() + { + string path = "Assets/_Audio/AttentionCue.wav"; + string fullPath = Path.Combine(Directory.GetCurrentDirectory(), path); + + const int sampleRate = 44100; + const float duration = 0.55f; + int sampleCount = Mathf.CeilToInt(sampleRate * duration); + byte[] wav = BuildWav(sampleRate, sampleCount, index => + { + float time = index / (float)sampleRate; + float envelope = Mathf.Clamp01(1f - time / duration); + float toneA = Mathf.Sin(2f * Mathf.PI * 660f * time); + float toneB = Mathf.Sin(2f * Mathf.PI * 990f * time) * 0.35f; + return (toneA + toneB) * envelope * 0.35f; + }); + + File.WriteAllBytes(fullPath, wav); + AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); + return AssetDatabase.LoadAssetAtPath(path); + } + + private static byte[] BuildWav(int sampleRate, int sampleCount, Func sampleFunction) + { + const short channels = 1; + const short bitsPerSample = 16; + int byteRate = sampleRate * channels * bitsPerSample / 8; + int dataSize = sampleCount * channels * bitsPerSample / 8; + byte[] bytes = new byte[44 + dataSize]; + + WriteAscii(bytes, 0, "RIFF"); + WriteInt(bytes, 4, 36 + dataSize); + WriteAscii(bytes, 8, "WAVE"); + WriteAscii(bytes, 12, "fmt "); + WriteInt(bytes, 16, 16); + WriteShort(bytes, 20, 1); + WriteShort(bytes, 22, channels); + WriteInt(bytes, 24, sampleRate); + WriteInt(bytes, 28, byteRate); + WriteShort(bytes, 32, (short)(channels * bitsPerSample / 8)); + WriteShort(bytes, 34, bitsPerSample); + WriteAscii(bytes, 36, "data"); + WriteInt(bytes, 40, dataSize); + + int offset = 44; + for (int i = 0; i < sampleCount; i++) + { + float sample = Mathf.Clamp(sampleFunction(i), -1f, 1f); + short value = (short)(sample * short.MaxValue); + WriteShort(bytes, offset, value); + offset += 2; + } + + return bytes; + } + + private static void WriteAscii(byte[] bytes, int offset, string value) + { + for (int i = 0; i < value.Length; i++) + { + bytes[offset + i] = (byte)value[i]; + } + } + + private static void WriteInt(byte[] bytes, int offset, int value) + { + bytes[offset] = (byte)(value & 0xff); + bytes[offset + 1] = (byte)((value >> 8) & 0xff); + bytes[offset + 2] = (byte)((value >> 16) & 0xff); + bytes[offset + 3] = (byte)((value >> 24) & 0xff); + } + + private static void WriteShort(byte[] bytes, int offset, short value) + { + bytes[offset] = (byte)(value & 0xff); + bytes[offset + 1] = (byte)((value >> 8) & 0xff); + } + + private static void SaveSecretChestPrefab(GameObject secretChest) + { + string path = "Assets/_Prefabs/SecretChest.prefab"; + PrefabUtility.SaveAsPrefabAsset(secretChest, path); + } + + private static void AddSceneToBuildSettings(string scenePath) + { + EditorBuildSettings.scenes = new[] + { + new EditorBuildSettingsScene(scenePath, true) + }; + } +} diff --git a/Assets/_Scripts/Editor/Lab8SceneBuilder.cs.meta b/Assets/_Scripts/Editor/Lab8SceneBuilder.cs.meta new file mode 100644 index 0000000..8561ccc --- /dev/null +++ b/Assets/_Scripts/Editor/Lab8SceneBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 424ed2179214096579a44f6917019335 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/HighlightOnApproach.cs b/Assets/_Scripts/HighlightOnApproach.cs new file mode 100644 index 0000000..ab6e60b --- /dev/null +++ b/Assets/_Scripts/HighlightOnApproach.cs @@ -0,0 +1,76 @@ +using UnityEngine; + +public class HighlightOnApproach : MonoBehaviour +{ + public Transform player; + public Renderer targetRenderer; + public Renderer[] targetRenderers; + public Material highlightMaterial; + public float radius = 2.6f; + + private Material originalMaterial; + private Material[] originalMaterials; + private bool highlighted; + + private void Start() + { + if (targetRenderers == null || targetRenderers.Length == 0) + { + targetRenderers = targetRenderer != null ? new[] { targetRenderer } : GetComponentsInChildren(); + } + + originalMaterials = new Material[targetRenderers.Length]; + + for (int i = 0; i < targetRenderers.Length; i++) + { + originalMaterials[i] = targetRenderers[i].sharedMaterial; + } + + if (targetRenderers.Length > 0) + { + originalMaterial = originalMaterials[0]; + } + } + + private void Update() + { + if (player == null) + { + GameObject playerObject = GameObject.FindGameObjectWithTag("Player"); + player = playerObject != null ? playerObject.transform : null; + } + + if (player == null || highlightMaterial == null) + { + return; + } + + bool shouldHighlight = Vector3.Distance(transform.position, player.position) <= radius; + + if (shouldHighlight != highlighted) + { + // The scene builder assigns all statue renderers, so the whole object changes material together. + SetHighlighted(shouldHighlight); + } + } + + private void SetHighlighted(bool value) + { + highlighted = value; + + for (int i = 0; i < targetRenderers.Length; i++) + { + if (targetRenderers[i] == null) + { + continue; + } + + targetRenderers[i].sharedMaterial = value ? highlightMaterial : originalMaterials[i]; + } + } + + public Material GetOriginalMaterial() + { + return originalMaterial; + } +} diff --git a/Assets/_Scripts/HighlightOnApproach.cs.meta b/Assets/_Scripts/HighlightOnApproach.cs.meta new file mode 100644 index 0000000..ebf20e3 --- /dev/null +++ b/Assets/_Scripts/HighlightOnApproach.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f2db2d437b46699abc04fdadab35d63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/HintManager.cs b/Assets/_Scripts/HintManager.cs new file mode 100644 index 0000000..e469aa1 --- /dev/null +++ b/Assets/_Scripts/HintManager.cs @@ -0,0 +1,59 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +public class HintManager : MonoBehaviour +{ + public static HintManager Instance { get; private set; } + + public GameObject hintPanel; + public Text hintText; + + private Coroutine hideRoutine; + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + + Instance = this; + HideHint(); + } + + public void ShowHint(string text, float duration) + { + if (hintPanel == null || hintText == null) + { + return; + } + + // Restarting the timer lets stronger narrative hints replace short interaction prompts. + hintText.text = text; + hintPanel.SetActive(true); + + if (hideRoutine != null) + { + StopCoroutine(hideRoutine); + } + + hideRoutine = StartCoroutine(HideAfterDelay(duration)); + } + + public void HideHint() + { + if (hintPanel != null) + { + hintPanel.SetActive(false); + } + } + + private IEnumerator HideAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + HideHint(); + hideRoutine = null; + } +} diff --git a/Assets/_Scripts/HintManager.cs.meta b/Assets/_Scripts/HintManager.cs.meta new file mode 100644 index 0000000..a64a164 --- /dev/null +++ b/Assets/_Scripts/HintManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e3ea752ce90cee87975273878c15ec1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/InteractableObject.cs b/Assets/_Scripts/InteractableObject.cs new file mode 100644 index 0000000..a38ae71 --- /dev/null +++ b/Assets/_Scripts/InteractableObject.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using UnityEngine.Events; + +public class InteractableObject : MonoBehaviour +{ + public Transform player; + public float interactionRadius = 2.4f; + public string promptText = "Нажмите E, чтобы осмотреть статую"; + public float promptDuration = 1.2f; + public bool interactOnce = true; + public UnityEvent onInteract = new UnityEvent(); + + private bool hasInteracted; + private float nextPromptTime; + + private void Update() + { + if (player == null) + { + GameObject playerObject = GameObject.FindGameObjectWithTag("Player"); + player = playerObject != null ? playerObject.transform : null; + } + + if (player == null || (interactOnce && hasInteracted)) + { + return; + } + + bool isNear = Vector3.Distance(transform.position, player.position) <= interactionRadius; + + if (!isNear) + { + return; + } + + if (Time.time >= nextPromptTime) + { + // Repeated short prompts keep the interaction readable while the player stays nearby. + HintManager.Instance?.ShowHint(promptText, promptDuration); + nextPromptTime = Time.time + promptDuration + 0.25f; + } + + if (Input.GetKeyDown(KeyCode.E)) + { + hasInteracted = true; + onInteract?.Invoke(); + } + } +} diff --git a/Assets/_Scripts/InteractableObject.cs.meta b/Assets/_Scripts/InteractableObject.cs.meta new file mode 100644 index 0000000..57e4bb8 --- /dev/null +++ b/Assets/_Scripts/InteractableObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 301827ee8465f3007b374e1182451d52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/NarrativeEventManager.cs b/Assets/_Scripts/NarrativeEventManager.cs new file mode 100644 index 0000000..7e2030e --- /dev/null +++ b/Assets/_Scripts/NarrativeEventManager.cs @@ -0,0 +1,70 @@ +using UnityEngine; + +public class NarrativeEventManager : MonoBehaviour +{ + public HintManager hintManager; + public GameObject secretChest; + public Light secretLight; + public Transform exitDoor; + public Vector3 doorOpenOffset = new Vector3(0f, 2.6f, 0f); + + private bool statueEventCompleted; + private bool sceneFinished; + private Vector3 closedDoorPosition; + + private void Start() + { + if (exitDoor != null) + { + closedDoorPosition = exitDoor.position; + } + + if (secretChest != null) + { + secretChest.SetActive(false); + } + + if (secretLight != null) + { + secretLight.enabled = false; + } + } + + public void OnStatueInteracted() + { + if (statueEventCompleted) + { + return; + } + + statueEventCompleted = true; + hintManager?.ShowHint("В стене открылся тайный механизм...", 3.5f); + + // This is the simple narrative payoff: reveal reward, add light, and open the exit. + if (secretChest != null) + { + secretChest.SetActive(true); + } + + if (secretLight != null) + { + secretLight.enabled = true; + } + + if (exitDoor != null) + { + exitDoor.position = closedDoorPosition + doorOpenOffset; + } + } + + public void FinishScene() + { + if (sceneFinished) + { + return; + } + + sceneFinished = true; + hintManager?.ShowHint("Артефакт найден. Сцена завершена.", 4f); + } +} diff --git a/Assets/_Scripts/NarrativeEventManager.cs.meta b/Assets/_Scripts/NarrativeEventManager.cs.meta new file mode 100644 index 0000000..709dc59 --- /dev/null +++ b/Assets/_Scripts/NarrativeEventManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 803b1df5ca326a5a4a58de795a3f2383 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Scripts/PlayerMovement.cs b/Assets/_Scripts/PlayerMovement.cs new file mode 100644 index 0000000..ea42b79 --- /dev/null +++ b/Assets/_Scripts/PlayerMovement.cs @@ -0,0 +1,80 @@ +using UnityEngine; + +[RequireComponent(typeof(CharacterController))] +public class PlayerMovement : MonoBehaviour +{ + public float moveSpeed = 4.5f; + public float mouseSensitivity = 2f; + public float gravity = -18f; + public CameraController cameraController; + + private CharacterController controller; + private float verticalVelocity; + private float pitch; + + private void Awake() + { + controller = GetComponent(); + } + + private void Start() + { + Cursor.lockState = CursorLockMode.Locked; + Cursor.visible = false; + } + + private void Update() + { + if (cameraController != null && cameraController.IsInFixedMode) + { + // During the attention shot the player should not move or rotate the camera. + ApplyGravityOnly(); + return; + } + + LookAround(); + Move(); + } + + private void LookAround() + { + float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; + float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; + + transform.Rotate(Vector3.up * mouseX); + pitch = Mathf.Clamp(pitch - mouseY, -65f, 70f); + cameraController?.SetPitch(pitch); + } + + private void Move() + { + float horizontal = Input.GetAxisRaw("Horizontal"); + float vertical = Input.GetAxisRaw("Vertical"); + + // WASD is interpreted relative to the player's current view direction. + Vector3 direction = (transform.right * horizontal + transform.forward * vertical).normalized; + + if (controller.isGrounded && verticalVelocity < 0f) + { + verticalVelocity = -1f; + } + + verticalVelocity += gravity * Time.deltaTime; + + Vector3 velocity = direction * moveSpeed; + velocity.y = verticalVelocity; + + controller.Move(velocity * Time.deltaTime); + } + + private void ApplyGravityOnly() + { + if (controller.isGrounded && verticalVelocity < 0f) + { + verticalVelocity = -1f; + } + + verticalVelocity += gravity * Time.deltaTime; + controller.Move(Vector3.up * verticalVelocity * Time.deltaTime); + } +} diff --git a/Assets/_Scripts/PlayerMovement.cs.meta b/Assets/_Scripts/PlayerMovement.cs.meta new file mode 100644 index 0000000..9b9e6fa --- /dev/null +++ b/Assets/_Scripts/PlayerMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85e49aae2eba68e73b7cbb58a33abba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..9e4493a --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,41 @@ +{ + "dependencies": { + "com.unity.collab-proxy": "2.12.4", + "com.unity.feature.development": "1.0.1", + "com.unity.textmeshpro": "3.0.7", + "com.unity.timeline": "1.7.7", + "com.unity.ugui": "1.0.0", + "com.unity.visualscripting": "1.9.4", + "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" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..a21f4d7 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,382 @@ +{ + "dependencies": { + "com.unity.collab-proxy": { + "version": "2.12.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.editorcoroutines": { + "version": "1.0.0", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.feature.development": { + "version": "1.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.ide.rider": "3.0.36", + "com.unity.ide.vscode": "1.2.5", + "com.unity.editorcoroutines": "1.0.0", + "com.unity.performance.profile-analyzer": "1.2.3", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.6" + } + }, + "com.unity.ide.rider": { + "version": "3.0.36", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.22", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.5", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.performance.profile-analyzer": { + "version": "1.2.3", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.settings-manager": { + "version": "2.1.0", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.testtools.codecoverage": { + "version": "1.2.6", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.0.16", + "com.unity.settings-manager": "1.0.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "3.0.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.7.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "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.visualscripting": { + "version": "1.9.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "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.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.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" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..07ebfb0 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..d623e25 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/_Scenes/NarrativeScene.unity + guid: e50c9a96abbac000b804f8fbef894894 + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..1e44a0a --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..43369e3 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..112a053 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -830 + m_OriginalInstanceId: -832 + m_LoadAssets: 0 diff --git a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 0000000..3c7b4c1 --- /dev/null +++ b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,5 @@ +{ + "m_Dictionary": { + "m_DictionaryValues": [] + } +} \ No newline at end of file diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..47880b1 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..063e06e --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,772 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 26 + productGUID: 47b011af5dffcc22faa7e80409eaa0b0 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: PIM_8 + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 0 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + switchMaxWorkerMultiple: 8 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@8.1.3 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 1 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 + scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + managedStrippingLevel: + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: PIM_8 + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: PIM_8 + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..587f809 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.62f3 +m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..36c0dad --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,234 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + GameCoreScarlett: 5 + GameCoreXboxOne: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PS5: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..5e97f83 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -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.PhysicMaterial", + "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": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..a88bee0 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file