Скрипт машин, префабы

Создал скрипт вращения колёс машин, может ещё что в него добавлю, создал префабы окружения и машин
This commit is contained in:
2024-12-17 16:00:59 +03:00
parent e54ba05865
commit 8358a1dcd6
60 changed files with 7960 additions and 740 deletions

View File

@ -1,316 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering.Universal;
/// <summary>
/// менеджер тайлов
/// инициализация, создание новых, удаление, отслеживание кол-ва тайлов
/// </ summary >
public class TileManagerScript : MonoBehaviour
{
public ScoreManagerScript scoreManager;
/// <summary>
/// число тайлов, которые будут созданы
/// </summary>
[SerializeField]
private int _NumTile;
/// <summary>
/// расстояние между центрами двух тайлов, нужно переделать, чтобы бралось само
/// </summary>
[SerializeField]
private float _DistanceTiles;
public float DistanceTiles
{
get => _DistanceTiles;
set => _DistanceTiles = value;
}
/// <summary>
/// список префабов для случайной генерации
/// </summary>
[SerializeField]
private List<GameObject> _TilePrefs = new List<GameObject>();
/// <summary>
/// поле массива тайлов
/// </summary>
[SerializeField]
private List<GameObject> _Tiles = new List<GameObject>();
/// <summary>
/// счётчик кол-ва созданных тайлов
/// </summary>
private int _CountTile = 0;
/// <summary>
/// при запуске сцены, создание новых тайлов
/// </summary>
private void Start()
{
// координата самого дальнего тайла
float z = -(_NumTile / 2) * _DistanceTiles;
// создание тайлов назад от игрока, где i номер тайла, а z координата transfrom.position.z
for (int i = 0; i < _NumTile; i++)
{
// генерация нового тайла, с собственным z
GameObject tile = GenerateTile(new Vector3(0, 0, z), new Quaternion(0, 0, 0, 0));
if (z <= 0)
{
SetCloseZone(tile);
}
// увелечение позиции тайла по transform.position.z
z += _DistanceTiles;
}
}
/// <summary>
/// Активация зон закрытия
/// </summary>
/// <param name="tile"></param>
private void SetCloseZone(GameObject tile)
{
// цикл нахождения скрипта тригера по тегу
foreach (Transform child in tile.transform)
{
// если найден тег, то передать и закрыть
if (child.CompareTag("Trigger Zone"))
{
// получение адреса объекта
child.GetComponent<TriggerZoneScript>().WasTrigged = true;
// выход из цикла
break;
}
}
foreach (Transform child in tile.transform)
{
// если найден тег, то передать и закрыть
if (child.CompareTag("Close Zone"))
{
// передача адреса объекта
child.gameObject.SetActive(true);
// выход из цикла
break;
}
}
}
/// <summary>
/// присваивание тайлу его номера в имя
/// </summary>
/// <param name="tile">передаваемый тайл</param>
private void NewNameTile(GameObject tile)
{
// увеличение счётчика тайлов
_CountTile++;
// Прибавить к имени тайла его номер
tile.name += _CountTile;
}
/// <summary>
/// генератор тайлов по заданному transform
/// </summary>
/// <param name="pos">позиция нового тайла</param>
/// <param name="rot">поворот нового тайла</param>
/// <returns>возвращает созданный тайл</returns>
public GameObject GenerateTile(Vector3 pos, Quaternion rot)
{
// создание нового тайла
GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), pos, rot);
// присваивание номера
NewNameTile(newTile);
GameObject prevTile = _Tiles.LastOrDefault();
TransCloseZoneSub(newTile, prevTile);
// добавление массива в отслеживание
_Tiles.Add(newTile);
// подпись нового тайла на эвент
SubTileTrigEvent(newTile);
// перемещение нового тайла в менеджер как child
newTile.transform.SetParent(gameObject.transform);
//Debug.Log($"Was created new tile awake");
return newTile;
}
/// <summary>
/// генерация тайла с добавлением его в конец списка
/// </summary>
/// <returns>возвращает созданный тайл</returns>
public GameObject GenerateTile()
{
// индекс последнего элемента
int index = _NumTile - 1;
// позиция и поворот последнего тайла
Vector3 pos = _Tiles[index].transform.position;
Quaternion rot = _Tiles[index].transform.rotation;
// создание нового position для генерации нового тайла
Vector3 newVector = new Vector3(pos.x, pos.y, pos.z + _DistanceTiles);
// создание нового тайла и получение его адреса
GameObject newTile = Instantiate(GetRandomObject(_TilePrefs), newVector, rot);
// присваивание номера
NewNameTile(newTile);
GameObject prevTile = _Tiles.LastOrDefault();
TransCloseZoneSub(newTile, prevTile);
// добавление массива в отслеживание
_Tiles.Add(newTile);
// перемещение нового тайла в менеджер как child
newTile.transform.SetParent(gameObject.transform);
// подпись нового тайла на эвент тригера зоны
SubTileTrigEvent(newTile);
// удаление первого в списке тайла
DeleteTile();
//Debug.Log($"Was created new tile");
return newTile;
}
/// <summary>
/// Удалитель тайлов
/// </summary>
public void DeleteTile()
{
// индекс первого тайла в списке
int index = 0;
// удаление GameObject первого тайла
Destroy(_Tiles[index]);
// удаление первого тайла в списке
_Tiles.RemoveAt(index);
//Debug.Log("Was deleted tile");
}
private delegate void SubTileTrigDelegate();
private SubTileTrigDelegate _SubTileTrigEvent;
/// <summary>
/// Подпись на триггер эвент в тайле
/// </summary>
/// <param name="tile">передаваемый тайл на подпись</param>
private void SubTileTrigEvent(GameObject tile)
{
// прохождение по всем child в tile
foreach (Transform child in tile.transform)
{
// если тайл является тригерной зоной, то подписаться и закончить
if (child.CompareTag("Trigger Zone"))
{
// в подпись передаётся анонимная функция, так как GenerateTile() возвращает GameObject
child.GetComponent<TriggerZoneScript>().TriggerZoneEvent.AddListener(() => GenerateTile());
// в подпись передаётся функция увелечения счёта
child.GetComponent<TriggerZoneScript>().TriggerZoneEvent.AddListener(scoreManager.Increase);
// в подпись передаётся функция перемещения счёта
child.GetComponent<TriggerZoneScript>().TriggerZoneEvent.AddListener(scoreManager.UpdatePos);
// выход из цикла
break;
}
}
}
/// <summary>
/// Передача в ново созданный тайл, зоны закртытия предыдущего
/// </summary>
/// <param name="newTile">Новый тайл</param>
/// <param name="pervTile">Предыдущий тайл</param>
public void TransCloseZoneSub(GameObject newTile, GameObject pervTile)
{
// Получение зоны закрытия
GameObject closeZone = null;
// скрипт с эвентом тригера
TriggerZoneScript triggerZoneScript = null;
// проверка наличия нового тайла
if (newTile != null)
{
// цикл нахождения скрипта тригера по тегу
foreach (Transform child in newTile.transform)
{
// если найден тег, то передать и закрыть
if (child.CompareTag("Trigger Zone"))
{
// получение адреса объекта
triggerZoneScript = child.GetComponent<TriggerZoneScript>();
// выход из цикла
break;
}
}
}
// проверка на наличие предыдущего тайла
if (pervTile != null)
{
// поиск зоны закрытия по тегу
foreach (Transform child in pervTile.transform)
{
// если найден тег, то передать и закрыть
if (child.CompareTag("Close Zone"))
{
// передача адреса объекта
closeZone = child.gameObject;
// выход из цикла
break;
}
}
}
// проверка на первосозданный тайл, у него нет предыдущего тайла, поэтому нечего закрывать
if (closeZone != null)
{
// передача анонимной функции активации зоны закрытия
triggerZoneScript.GetComponent<TriggerZoneScript>().TriggerZoneEvent.AddListener(() => closeZone.SetActive(true));
}
}
/// <summary>
/// Генератор случайно взятого объекта
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list">Список из которого брать</param>
/// <returns></returns>
T GetRandomObject<T>(List<T> list)
{
// проверка на пустоту списка
if (list == null || list.Count == 0)
{
return default;
}
// Генерация случайного индекса
int randomIndex = UnityEngine.Random.Range(0, list.Count);
return list[randomIndex];
}
}

View File

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

View File

@ -1,45 +0,0 @@
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// Обрабатывает триггерную зону тайла и вызывает эвент
/// </summary>
public class TriggerZoneScript : MonoBehaviour
{
/// <summary>
/// делегат и эвент, который собирает подписи
/// </summary>
public UnityEvent TriggerZoneEvent = new UnityEvent();
/// <summary>
/// флаг реакции тригера
/// </summary>
private bool _wasTrigged = false;
public bool WasTrigged
{
get => _wasTrigged;
set => _wasTrigged = value;
}
/// <summary>
/// Реакция тригерной зоны на вхождение игрока
/// </summary>
/// <param name="other">объект тригера</param>
private void OnTriggerEnter(Collider other)
{
// если тег игрока и первая реакция
if (other.gameObject.CompareTag("Player") && !WasTrigged)
{
// Debug.Log("Was trigged");
// изменение, что тригер сработал
WasTrigged = !WasTrigged;
// вызов всех подписей
TriggerZoneEvent.Invoke();
}
}
}

View File

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

View File

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

View File

@ -268,10 +268,11 @@ Transform:
m_GameObject: {fileID: 678815814}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -11.25}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalPosition: {x: 0, y: 1.5038, z: -11.25}
m_LocalScale: {x: 1, y: 2, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 1544359499}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &678815819
@ -419,223 +420,6 @@ MonoBehaviour:
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
--- !u!1 &913452651
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 913452653}
- component: {fileID: 913452652}
m_Layer: 0
m_Name: Score Manager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &913452652
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 913452651}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3139efcae2b31a64f88f543730cea817, type: 3}
m_Name:
m_EditorClassIdentifier:
_ScoreText: {fileID: 942770731}
--- !u!4 &913452653
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 913452651}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 942770730}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &942770729
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 942770730}
- component: {fileID: 942770732}
- component: {fileID: 942770731}
m_Layer: 0
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &942770730
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 942770729}
m_LocalRotation: {x: -0.70710576, y: -0, z: -0, w: 0.70710784}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 913452653}
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 20}
m_SizeDelta: {x: 20, y: 5}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &942770731
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 942770729}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\u0421\u0447\u0451\u0442 - 0"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 0
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
_SortingLayer: 0
_SortingLayerID: 0
_SortingOrder: 0
m_hasFontAssetChanged: 0
m_renderer: {fileID: 942770732}
m_maskType: 0
--- !u!23 &942770732
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 942770729}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
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: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &961775090
GameObject:
m_ObjectHideFlags: 0
@ -810,7 +594,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!81 &1544359497
AudioListener:
m_ObjectHideFlags: 0
@ -878,12 +662,12 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1544359496}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0.49199998, z: 0.4949999}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_Father: {fileID: 678815818}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1544359500
MonoBehaviour:
@ -1026,15 +810,74 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 895f6f3c2d334633b5800312285058d2, type: 3}
--- !u!1001 &7812853551478214283
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 359741391555935905, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1812251619614480449, guid: d345ba61556173847ba32546368899cd, type: 3}
propertyPath: m_Name
value: Score Manager
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 1478161082377504939, guid: d345ba61556173847ba32546368899cd, type: 3}
insertIndex: -1
addedObject: {fileID: 0}
m_SourcePrefab: {fileID: 100100000, guid: d345ba61556173847ba32546368899cd, type: 3}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1544359499}
- {fileID: 691500690}
- {fileID: 678815818}
- {fileID: 961775094}
- {fileID: 1034189939}
- {fileID: 913452653}
- {fileID: 7812853551478214283}
- {fileID: 397243931}
- {fileID: 2011068378}