diff --git a/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs b/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs new file mode 100644 index 0000000..0beddb0 --- /dev/null +++ b/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs @@ -0,0 +1,8 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CloseZoneScript : MonoBehaviour +{ + +} diff --git a/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs.meta b/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs.meta new file mode 100644 index 0000000..7f23521 --- /dev/null +++ b/Assets/Crossy Road VR/Prefabs/Tiles/CloseZoneScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b39366110ffeab47abc38290121c2e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Crossy Road VR/Prefabs/Tiles/Road.prefab b/Assets/Crossy Road VR/Prefabs/Tiles/Road.prefab index 22970ec..99893fd 100644 --- a/Assets/Crossy Road VR/Prefabs/Tiles/Road.prefab +++ b/Assets/Crossy Road VR/Prefabs/Tiles/Road.prefab @@ -530,6 +530,124 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6345276865645612453 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4467392542930695542} + - component: {fileID: 1594294637520262978} + - component: {fileID: 7485553331260844503} + - component: {fileID: 3434549222649853026} + - component: {fileID: 5298382170043753822} + m_Layer: 0 + m_Name: Close Zone + m_TagString: Close Zone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4467392542930695542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345276865645612453} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.625, z: 9.750002} + m_LocalScale: {x: 50, y: 4.25, z: 3.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228295558237798990} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1594294637520262978 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345276865645612453} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7485553331260844503 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345276865645612453} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &3434549222649853026 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345276865645612453} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &5298382170043753822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6345276865645612453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b39366110ffeab47abc38290121c2e6, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &6782094349519774621 GameObject: m_ObjectHideFlags: 0 @@ -773,6 +891,7 @@ Transform: - {fileID: 933828303164731233} - {fileID: 1362658516631158686} - {fileID: 8924835910251761253} + - {fileID: 4467392542930695542} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8244820718347955365 @@ -909,8 +1028,8 @@ Transform: m_GameObject: {fileID: 8384643208066043371} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 2.625, z: -13.374998} - m_LocalScale: {x: 50, y: 4.25, z: 3.25} + m_LocalPosition: {x: 0, y: 2.625, z: -11.499998} + m_LocalScale: {x: 50, y: 4.25, z: 7} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4228295558237798990} @@ -1001,4 +1120,3 @@ MonoBehaviour: TriggerZoneEvent: m_PersistentCalls: m_Calls: [] - _wasTrigged: 0 diff --git a/Assets/Crossy Road VR/Scenes/Test/Scripts/TileManagerScript.cs b/Assets/Crossy Road VR/Scenes/Test/Scripts/TileManagerScript.cs index 716cb27..cfcf2c1 100644 --- a/Assets/Crossy Road VR/Scenes/Test/Scripts/TileManagerScript.cs +++ b/Assets/Crossy Road VR/Scenes/Test/Scripts/TileManagerScript.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; +using System.Linq; using UnityEngine; +using UnityEngine.Rendering.Universal; /// /// менеджер тайлов @@ -31,6 +33,11 @@ public class TileManagerScript : MonoBehaviour [SerializeField] private List _Tiles = new List(); + /// + /// счётчик кол-ва созданных тайлов + /// + private int _CountTile = 0; + /// /// при запуске сцены, создание новых тайлов /// @@ -43,7 +50,12 @@ public class TileManagerScript : MonoBehaviour for (int i = 0; i < _NumTile; i++) { // генерация нового тайла, с собственным z - GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0)); + GameObject tile = GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0)); + + if (z <= 0) + { + SetCloseZone(tile); + } // увелечение позиции тайла по transform.position.z z += _DistanceTiles; @@ -51,6 +63,53 @@ public class TileManagerScript : MonoBehaviour } + /// + /// Активация зон закрытия + /// + /// + private void SetCloseZone(GameObject tile) + { + // цикл нахождения скрипта тригера по тегу + foreach (Transform child in tile.transform) + { + // если найден тег, то передать и закрыть + if (child.CompareTag("Trigger Zone")) + { + // получение адреса объекта + child.GetComponent().WasTrigged = true; + + // выход из цикла + break; + } + } + + foreach (Transform child in tile.transform) + { + // если найден тег, то передать и закрыть + if (child.CompareTag("Close Zone")) + { + // передача адреса объекта + child.gameObject.SetActive(true); + + // выход из цикла + break; + } + } + } + + /// + /// присваивание тайлу его номера в имя + /// + /// передаваемый тайл + private void NewNameTile(GameObject tile) + { + // увеличение счётчика тайлов + _CountTile++; + + // Прибавить к имени тайла его номер + tile.name += _CountTile; + } + /// /// генератор тайлов по заданному transform /// @@ -62,11 +121,18 @@ public class TileManagerScript : MonoBehaviour // создание нового тайла GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), pos, rot); + // присваивание номера + NewNameTile(newTile); + + GameObject prevTile = _Tiles.LastOrDefault(); + + TransCloseZoneSub(newTile, prevTile); + // добавление массива в отслеживание _Tiles.Add(newTile); // подпись нового тайла на эвент - SubTrigEvent(newTile); + SubTileTrigEvent(newTile); // перемещение нового тайла в менеджер как child newTile.transform.SetParent(gameObject.transform); @@ -95,6 +161,13 @@ public class TileManagerScript : MonoBehaviour // создание нового тайла и получение его адреса GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), newVector, rot); + // присваивание номера + NewNameTile(newTile); + + GameObject prevTile = _Tiles.LastOrDefault(); + + TransCloseZoneSub(newTile, prevTile); + // добавление массива в отслеживание _Tiles.Add(newTile); @@ -102,7 +175,7 @@ public class TileManagerScript : MonoBehaviour newTile.transform.SetParent(gameObject.transform); // подпись нового тайла на эвент тригера зоны - SubTrigEvent(newTile); + SubTileTrigEvent(newTile); // удаление первого в списке тайла DeleteTile(); @@ -133,7 +206,7 @@ public class TileManagerScript : MonoBehaviour /// Подпись на триггер эвент в тайле /// /// передаваемый тайл на подпись - private void SubTrigEvent(GameObject tile) + private void SubTileTrigEvent(GameObject tile) { // прохождение по всем child в tile foreach (Transform child in tile.transform) @@ -150,10 +223,61 @@ public class TileManagerScript : MonoBehaviour } } - public void test() + /// + /// Передача в ново созданный тайл, зоны закртытия предыдущего + /// + /// Новый тайл + /// Предыдущий тайл + public void TransCloseZoneSub(GameObject newTile, GameObject pervTile) { - GenerateTile(); + // Получение зоны закрытия + GameObject closeZone = null; + + // скрипт с эвентом тригера + TriggerZoneScript triggerZoneScript = null; + + // проверка наличия нового тайла + if (newTile != null) + { + // цикл нахождения скрипта тригера по тегу + foreach (Transform child in newTile.transform) + { + // если найден тег, то передать и закрыть + if (child.CompareTag("Trigger Zone")) + { + // получение адреса объекта + triggerZoneScript = child.GetComponent(); + + // выход из цикла + break; + } + } + } + // проверка на наличие предыдущего тайла + if (pervTile != null) + { + // поиск зоны закрытия по тегу + foreach (Transform child in pervTile.transform) + { + // если найден тег, то передать и закрыть + if (child.CompareTag("Close Zone")) + { + // передача адреса объекта + closeZone = child.gameObject; + + // выход из цикла + break; + } + } + } + // проверка на первосозданный тайл, у него нет предыдущего тайла, поэтому нечего закрывать + if (closeZone != null) + { + // передача анонимной функции активации зоны закрытия + triggerZoneScript.GetComponent().TriggerZoneEvent.AddListener(() => closeZone.SetActive(true)); + } } + /// /// Генератор случайно взятого объекта /// diff --git a/Assets/Crossy Road VR/Scenes/Test/Scripts/TriggerZoneScript.cs b/Assets/Crossy Road VR/Scenes/Test/Scripts/TriggerZoneScript.cs index c072836..275ce41 100644 --- a/Assets/Crossy Road VR/Scenes/Test/Scripts/TriggerZoneScript.cs +++ b/Assets/Crossy Road VR/Scenes/Test/Scripts/TriggerZoneScript.cs @@ -7,15 +7,19 @@ using UnityEngine.Events; public class TriggerZoneScript : MonoBehaviour { /// - /// Эвент, который собирает подписи, необходимо присвоить ему новый UnityEvent + /// делегат и эвент, который собирает подписи /// public UnityEvent TriggerZoneEvent = new UnityEvent(); /// /// флаг реакции тригера /// - [SerializeField] private bool _wasTrigged = false; + public bool WasTrigged + { + get => _wasTrigged; + set => _wasTrigged = value; + } /// /// Реакция тригерной зоны на вхождение игрока @@ -24,13 +28,13 @@ public class TriggerZoneScript : MonoBehaviour private void OnTriggerEnter(Collider other) { // если тег игрока и первая реакция - if (other.gameObject.CompareTag("Player") && !_wasTrigged) + if (other.gameObject.CompareTag("Player") && !WasTrigged) { // Debug.Log("Was trigged"); // изменение, что тригер сработал - _wasTrigged = !_wasTrigged; + WasTrigged = !WasTrigged; // вызов всех подписей TriggerZoneEvent.Invoke(); diff --git a/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.meta b/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.meta new file mode 100644 index 0000000..c695536 --- /dev/null +++ b/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d38a70425181c164aba6e3dcb4b2f07d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.unity b/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.unity index e72dfeb..8c9b248 100644 --- a/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.unity +++ b/Assets/Crossy Road VR/Scenes/Test/Test Generate Map.unity @@ -222,7 +222,7 @@ Transform: m_GameObject: {fileID: 678815814} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 1, z: -11.25} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -508,7 +508,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 673f57172fdd6084f8c03e4433c6967c, type: 3} m_Name: m_EditorClassIdentifier: - _NumTile: 3 + _NumTile: 30 _DistanceTiles: 30 _TilePrefs: - {fileID: 7495788483562650455, guid: 4939760d0f519ec4f8d52cf5575a65c1, type: 3} @@ -565,7 +565,7 @@ Camera: m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index a904e11..65290e6 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -7,6 +7,7 @@ TagManager: - Tile - Trigger Zone - Tile Manager + - Close Zone layers: - Default - TransparentFX