first commit

This commit is contained in:
2026-06-04 17:00:04 +03:00
commit 18c4277523
70 changed files with 9539 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6fb075048c7ac577c938bcaf60392436
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+446
View File
@@ -0,0 +1,446 @@
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
/// <summary>
/// Builds the complete lab scene from code:
/// folders, materials, prefabs, player, camera, generator, UI and saved scene.
/// </summary>
public static class Lab1SceneBuilder
{
private const string ScriptsFolder = "Assets/_Scripts";
private const string ScenesFolder = "Assets/_Scenes";
private const string PrefabsFolder = "Assets/_Prefabs";
private const string MaterialsFolder = "Assets/_Materials";
private const string EditorFolder = "Assets/Editor";
private const string ScenePath = "Assets/_Scenes/Level_Procedural.unity";
[MenuItem("Tools/Technical Game Design/Lab1/Create Procedural Level Scene")]
public static void CreateProceduralLevelScene()
{
EnsureProjectFolders();
Material basicMaterial = CreateOrUpdateMaterial("M_Platform_Basic", new Color(0.35f, 0.48f, 0.68f));
Material wideMaterial = CreateOrUpdateMaterial("M_Platform_Wide", new Color(0.28f, 0.62f, 0.43f));
Material narrowMaterial = CreateOrUpdateMaterial("M_Platform_Narrow", new Color(0.82f, 0.65f, 0.28f));
Material obstacleBaseMaterial = CreateOrUpdateMaterial("M_Platform_Obstacle_Base", new Color(0.42f, 0.42f, 0.48f));
Material obstacleMaterial = CreateOrUpdateMaterial("M_Obstacle_Red", new Color(0.86f, 0.16f, 0.14f));
Material directionMaterial = CreateOrUpdateMaterial("M_Direction_Marker", new Color(0.15f, 0.9f, 0.95f));
Material playerMaterial = CreateOrUpdateMaterial("M_Player", new Color(0.2f, 0.2f, 0.24f));
GameObject basicPrefab = CreatePlatformPrefab(
"Platform_Basic",
PlatformInfo.PlatformType.Basic,
new Vector3(3f, 0.5f, 3f),
basicMaterial,
directionMaterial,
false,
obstacleMaterial);
GameObject widePrefab = CreatePlatformPrefab(
"Platform_Wide",
PlatformInfo.PlatformType.Wide,
new Vector3(5f, 0.5f, 3f),
wideMaterial,
directionMaterial,
false,
obstacleMaterial);
GameObject narrowPrefab = CreatePlatformPrefab(
"Platform_Narrow",
PlatformInfo.PlatformType.Narrow,
new Vector3(2f, 0.5f, 3f),
narrowMaterial,
directionMaterial,
false,
obstacleMaterial);
GameObject obstaclePrefab = CreatePlatformPrefab(
"Platform_Obstacle",
PlatformInfo.PlatformType.Obstacle,
new Vector3(3f, 0.5f, 3f),
obstacleBaseMaterial,
directionMaterial,
true,
obstacleMaterial);
Scene scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
scene.name = "Level_Procedural";
SetupLighting();
GameObject player = CreatePlayer(playerMaterial);
Camera camera = CreateCamera(player.transform);
LevelGenerator generator = CreateGenerator(player, basicPrefab, widePrefab, narrowPrefab, obstaclePrefab);
LevelGenUI ui = CreateUi(generator);
generator.ui = ui;
ui.generator = generator;
generator.GenerateInitialLevel();
ui.UpdateInfo();
Selection.activeObject = generator.gameObject;
EditorSceneManager.SaveScene(scene, ScenePath);
AddSceneToBuildSettings(ScenePath);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("Lab 1 procedural level scene created: " + ScenePath);
}
private static void EnsureProjectFolders()
{
EnsureFolder(ScriptsFolder);
EnsureFolder(ScenesFolder);
EnsureFolder(PrefabsFolder);
EnsureFolder(MaterialsFolder);
EnsureFolder(EditorFolder);
}
private static void EnsureFolder(string path)
{
if (AssetDatabase.IsValidFolder(path))
{
return;
}
string[] parts = path.Split('/');
string current = parts[0];
for (int i = 1; i < parts.Length; i++)
{
string next = current + "/" + parts[i];
if (!AssetDatabase.IsValidFolder(next))
{
AssetDatabase.CreateFolder(current, parts[i]);
}
current = next;
}
}
private static Material CreateOrUpdateMaterial(string materialName, Color color)
{
string path = MaterialsFolder + "/" + materialName + ".mat";
Material material = AssetDatabase.LoadAssetAtPath<Material>(path);
if (material == null)
{
Shader shader = Shader.Find("Standard");
if (shader == null)
{
shader = Shader.Find("Diffuse");
}
material = new Material(shader);
AssetDatabase.CreateAsset(material, path);
}
material.color = color;
EditorUtility.SetDirty(material);
return material;
}
private static GameObject CreatePlatformPrefab(
string prefabName,
PlatformInfo.PlatformType platformType,
Vector3 platformScale,
Material baseMaterial,
Material directionMaterial,
bool withObstacle,
Material obstacleMaterial)
{
GameObject root = GameObject.CreatePrimitive(PrimitiveType.Cube);
root.name = prefabName;
root.transform.localScale = platformScale;
root.GetComponent<Renderer>().sharedMaterial = baseMaterial;
PlatformInfo info = root.AddComponent<PlatformInfo>();
info.platformType = platformType;
info.generatedIndex = -1;
info.isSafe = platformType != PlatformInfo.PlatformType.Obstacle;
CreateDirectionMarker(root.transform, platformScale, directionMaterial);
if (withObstacle)
{
GameObject obstacle = GameObject.CreatePrimitive(PrimitiveType.Cube);
obstacle.name = "Obstacle";
obstacle.transform.SetParent(root.transform, false);
obstacle.transform.localPosition = new Vector3(
0.9f / platformScale.x,
0.78f / platformScale.y,
0.35f / platformScale.z);
obstacle.transform.localScale = new Vector3(
0.75f / platformScale.x,
1.05f / platformScale.y,
0.95f / platformScale.z);
obstacle.GetComponent<Renderer>().sharedMaterial = obstacleMaterial;
}
string path = PrefabsFolder + "/" + prefabName + ".prefab";
AssetDatabase.DeleteAsset(path);
GameObject prefab = PrefabUtility.SaveAsPrefabAsset(root, path);
Object.DestroyImmediate(root);
return prefab;
}
private static void CreateDirectionMarker(Transform parent, Vector3 platformScale, Material directionMaterial)
{
GameObject marker = GameObject.CreatePrimitive(PrimitiveType.Cube);
marker.name = "Direction_Marker";
marker.transform.SetParent(parent, false);
marker.transform.localPosition = new Vector3(0f, 0.58f, 0.22f);
marker.transform.localScale = new Vector3(0.55f, 0.08f, 0.1f);
marker.GetComponent<Renderer>().sharedMaterial = directionMaterial;
Collider markerCollider = marker.GetComponent<Collider>();
if (markerCollider != null)
{
Object.DestroyImmediate(markerCollider);
}
}
private static GameObject CreatePlayer(Material playerMaterial)
{
GameObject player = GameObject.CreatePrimitive(PrimitiveType.Capsule);
player.name = "Player";
player.transform.position = new Vector3(0f, 1.35f, 0f);
player.GetComponent<Renderer>().sharedMaterial = playerMaterial;
Rigidbody rb = player.AddComponent<Rigidbody>();
rb.mass = 1f;
rb.drag = 0f;
rb.angularDrag = 0.05f;
rb.interpolation = RigidbodyInterpolation.Interpolate;
rb.collisionDetectionMode = CollisionDetectionMode.Continuous;
rb.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ;
SimplePlayerController controller = player.AddComponent<SimplePlayerController>();
controller.moveSpeed = 6f;
controller.jumpForce = 7f;
controller.groundCheckRadius = 0.25f;
controller.groundMask = LayerMask.GetMask("Default");
controller.fallResetY = -10f;
controller.lastSafePosition = player.transform.position;
return player;
}
private static Camera CreateCamera(Transform player)
{
GameObject cameraObject = new GameObject("Main Camera");
Camera camera = cameraObject.AddComponent<Camera>();
camera.tag = "MainCamera";
camera.clearFlags = CameraClearFlags.Skybox;
camera.fieldOfView = 60f;
camera.nearClipPlane = 0.1f;
camera.farClipPlane = 250f;
CameraFollow follow = cameraObject.AddComponent<CameraFollow>();
follow.target = player;
follow.offset = new Vector3(0f, 8f, -8f);
follow.followSpeed = 6f;
follow.lookHeight = 1f;
cameraObject.transform.position = player.position + follow.offset;
cameraObject.transform.LookAt(player.position + Vector3.up);
return camera;
}
private static LevelGenerator CreateGenerator(
GameObject player,
GameObject basicPrefab,
GameObject widePrefab,
GameObject narrowPrefab,
GameObject obstaclePrefab)
{
GameObject generatorObject = new GameObject("LevelGenerator");
LevelGenerator generator = generatorObject.AddComponent<LevelGenerator>();
generator.platformPrefabs = new[] { basicPrefab, widePrefab, narrowPrefab, obstaclePrefab };
generator.player = player.transform;
generator.playerController = player.GetComponent<SimplePlayerController>();
generator.initialPlatformCount = 12;
generator.stepDistance = 3.5f;
generator.generationThreshold = 12f;
generator.removeThreshold = 18f;
generator.obstacleChance = 0.3f;
generator.sideOffsetRange = 2f;
generator.infiniteMode = true;
generator.maxPlatformsAlive = 30;
return generator;
}
private static void SetupLighting()
{
RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat;
RenderSettings.ambientLight = new Color(0.45f, 0.48f, 0.54f);
RenderSettings.skybox = null;
GameObject lightObject = new GameObject("Directional Light");
Light light = lightObject.AddComponent<Light>();
light.type = LightType.Directional;
light.intensity = 1.15f;
light.shadows = LightShadows.Soft;
lightObject.transform.rotation = Quaternion.Euler(50f, -30f, 0f);
}
private static LevelGenUI CreateUi(LevelGenerator generator)
{
Font font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
GameObject canvasObject = new GameObject("Canvas");
Canvas canvas = canvasObject.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvasObject.AddComponent<GraphicRaycaster>();
CanvasScaler scaler = canvasObject.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920f, 1080f);
scaler.matchWidthOrHeight = 0.5f;
LevelGenUI ui = canvasObject.AddComponent<LevelGenUI>();
ui.generator = generator;
ui.titleText = CreateText(
"Title",
canvasObject.transform,
font,
30,
FontStyle.Bold,
new Color(1f, 1f, 1f),
new Vector2(0f, 1f),
new Vector2(0f, 1f),
new Vector2(0f, 1f),
new Vector2(28f, -24f),
new Vector2(900f, 42f),
TextAnchor.UpperLeft);
ui.hintsText = CreateText(
"Controls_Hints",
canvasObject.transform,
font,
22,
FontStyle.Normal,
new Color(0.9f, 0.95f, 1f),
new Vector2(0f, 1f),
new Vector2(0f, 1f),
new Vector2(0f, 1f),
new Vector2(30f, -82f),
new Vector2(360f, 110f),
TextAnchor.UpperLeft);
ui.parametersText = CreateText(
"Generation_Parameters",
canvasObject.transform,
font,
22,
FontStyle.Normal,
new Color(0.92f, 1f, 0.92f),
new Vector2(1f, 1f),
new Vector2(1f, 1f),
new Vector2(1f, 1f),
new Vector2(-370f, -28f),
new Vector2(340f, 170f),
TextAnchor.UpperLeft);
ui.statusText = CreateText(
"Status",
canvasObject.transform,
font,
20,
FontStyle.Normal,
new Color(1f, 0.94f, 0.78f),
new Vector2(0f, 0f),
new Vector2(0f, 0f),
new Vector2(0f, 0f),
new Vector2(30f, 28f),
new Vector2(620f, 65f),
TextAnchor.LowerLeft);
ui.messageText = CreateText(
"Message",
canvasObject.transform,
font,
26,
FontStyle.Bold,
new Color(0.55f, 1f, 0.55f),
new Vector2(0.5f, 1f),
new Vector2(0.5f, 1f),
new Vector2(0.5f, 1f),
new Vector2(-180f, -150f),
new Vector2(360f, 42f),
TextAnchor.MiddleCenter);
ui.messageText.gameObject.SetActive(false);
CreateEventSystem();
return ui;
}
private static Text CreateText(
string name,
Transform parent,
Font font,
int fontSize,
FontStyle fontStyle,
Color color,
Vector2 anchorMin,
Vector2 anchorMax,
Vector2 pivot,
Vector2 anchoredPosition,
Vector2 sizeDelta,
TextAnchor alignment)
{
GameObject textObject = new GameObject(name);
textObject.transform.SetParent(parent, false);
RectTransform rectTransform = textObject.AddComponent<RectTransform>();
rectTransform.anchorMin = anchorMin;
rectTransform.anchorMax = anchorMax;
rectTransform.pivot = pivot;
rectTransform.anchoredPosition = anchoredPosition;
rectTransform.sizeDelta = sizeDelta;
Text text = textObject.AddComponent<Text>();
text.font = font;
text.fontSize = fontSize;
text.fontStyle = fontStyle;
text.color = color;
text.alignment = alignment;
text.horizontalOverflow = HorizontalWrapMode.Wrap;
text.verticalOverflow = VerticalWrapMode.Overflow;
text.raycastTarget = false;
Outline outline = textObject.AddComponent<Outline>();
outline.effectColor = new Color(0f, 0f, 0f, 0.8f);
outline.effectDistance = new Vector2(1.4f, -1.4f);
return text;
}
private static void CreateEventSystem()
{
GameObject eventSystemObject = new GameObject("EventSystem");
eventSystemObject.AddComponent<EventSystem>();
eventSystemObject.AddComponent<StandaloneInputModule>();
}
private static void AddSceneToBuildSettings(string scenePath)
{
EditorBuildSettingsScene[] oldScenes = EditorBuildSettings.scenes;
for (int i = 0; i < oldScenes.Length; i++)
{
if (oldScenes[i].path == scenePath)
{
oldScenes[i].enabled = true;
EditorBuildSettings.scenes = oldScenes;
return;
}
}
EditorBuildSettingsScene[] newScenes = new EditorBuildSettingsScene[oldScenes.Length + 1];
oldScenes.CopyTo(newScenes, 0);
newScenes[newScenes.Length - 1] = new EditorBuildSettingsScene(scenePath, true);
EditorBuildSettings.scenes = newScenes;
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 32c22bb9a7ab2490daf033faee36e98d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1c19e554ccd5af173a6baf038a729214
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+267
View File
@@ -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}
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 239a4458667f00ba199b6828087707e9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Direction_Marker
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.15, g: 0.9, b: 0.95, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 68e24a6ae20ad408b8b4ecfc126eb27f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Obstacle_Red
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.86, g: 0.16, b: 0.14, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a40e87abc5ce74ffab143cb556e0d3ba
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Platform_Basic
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.35, g: 0.48, b: 0.68, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e039f767c280193f8a9f30112d27bbfd
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Platform_Narrow
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.82, g: 0.65, b: 0.28, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 329f8f7b6635a87f68799da2a00e7172
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Platform_Obstacle_Base
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.42, g: 0.42, b: 0.48, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6be83a9e159b9d597aa3bfe07546b423
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Platform_Wide
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.28, g: 0.62, b: 0.43, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7c638834a537e8eb99c0a7b478ce8f98
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+83
View File
@@ -0,0 +1,83 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Player
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.2, g: 0.2, b: 0.24, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7823c8b890280818cafc14acb76ee31e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5405dde3f3b2ac2968643352719f2e83
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+207
View File
@@ -0,0 +1,207 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &5627953879910372584
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5318531227032914284}
- component: {fileID: 8651410971968439820}
- component: {fileID: 3339422148293540750}
- component: {fileID: 4571193790018289036}
- component: {fileID: 802412584090247391}
m_Layer: 0
m_Name: Platform_Basic
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5318531227032914284
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5627953879910372584}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3, y: 0.5, z: 3}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4334116587939866897}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8651410971968439820
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5627953879910372584}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &3339422148293540750
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5627953879910372584}
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!23 &4571193790018289036
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5627953879910372584}
m_Enabled: 1
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: e039f767c280193f8a9f30112d27bbfd, 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: 1
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!114 &802412584090247391
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5627953879910372584}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ec3ea738b9a87ea3b71d9f612198a5d, type: 3}
m_Name:
m_EditorClassIdentifier:
platformType: 0
generatedIndex: -1
isSafe: 1
--- !u!1 &5794617538146362607
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4334116587939866897}
- component: {fileID: 6037412911797331076}
- component: {fileID: 5890490228173243040}
m_Layer: 0
m_Name: Direction_Marker
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4334116587939866897
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5794617538146362607}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.58, z: 0.22}
m_LocalScale: {x: 0.55, y: 0.08, z: 0.1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5318531227032914284}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6037412911797331076
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5794617538146362607}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &5890490228173243040
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5794617538146362607}
m_Enabled: 1
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: 68e24a6ae20ad408b8b4ecfc126eb27f, 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: 1
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}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1a595ffb4bfed262a889619fd5775b0b
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+207
View File
@@ -0,0 +1,207 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4298958215728018641
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5555097119958669792}
- component: {fileID: 254352852322294159}
- component: {fileID: 2484821656566063127}
m_Layer: 0
m_Name: Direction_Marker
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5555097119958669792
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4298958215728018641}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.58, z: 0.22}
m_LocalScale: {x: 0.55, y: 0.08, z: 0.1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1342319215330659642}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &254352852322294159
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4298958215728018641}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &2484821656566063127
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4298958215728018641}
m_Enabled: 1
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: 68e24a6ae20ad408b8b4ecfc126eb27f, 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: 1
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 &6460606625030056861
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1342319215330659642}
- component: {fileID: 8662847080008314460}
- component: {fileID: 1646082533531213419}
- component: {fileID: 8570954925663070356}
- component: {fileID: 4970917587120412871}
m_Layer: 0
m_Name: Platform_Narrow
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1342319215330659642
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6460606625030056861}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 2, y: 0.5, z: 3}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5555097119958669792}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &8662847080008314460
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6460606625030056861}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &1646082533531213419
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6460606625030056861}
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!23 &8570954925663070356
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6460606625030056861}
m_Enabled: 1
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: 329f8f7b6635a87f68799da2a00e7172, 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: 1
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!114 &4970917587120412871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6460606625030056861}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ec3ea738b9a87ea3b71d9f612198a5d, type: 3}
m_Name:
m_EditorClassIdentifier:
platformType: 2
generatedIndex: -1
isSafe: 1
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 552c8159964e7b93a8f0ee268303a585
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+313
View File
@@ -0,0 +1,313 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1714994646849751708
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 93251559583404586}
- component: {fileID: 5985323954380516728}
- component: {fileID: 2139925950764852174}
- component: {fileID: 3358519260101977279}
- component: {fileID: 346291535823987157}
m_Layer: 0
m_Name: Platform_Obstacle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &93251559583404586
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1714994646849751708}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 3, y: 0.5, z: 3}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6612372135672844808}
- {fileID: 2141484277302022474}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5985323954380516728
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1714994646849751708}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &2139925950764852174
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1714994646849751708}
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!23 &3358519260101977279
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1714994646849751708}
m_Enabled: 1
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: 6be83a9e159b9d597aa3bfe07546b423, 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: 1
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!114 &346291535823987157
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1714994646849751708}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ec3ea738b9a87ea3b71d9f612198a5d, type: 3}
m_Name:
m_EditorClassIdentifier:
platformType: 3
generatedIndex: -1
isSafe: 0
--- !u!1 &3790139722086613306
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2141484277302022474}
- component: {fileID: 6229565836121607482}
- component: {fileID: 1419158052869144071}
- component: {fileID: 3293781219495546304}
m_Layer: 0
m_Name: Obstacle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2141484277302022474
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3790139722086613306}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.29999998, y: 1.56, z: 0.11666667}
m_LocalScale: {x: 0.25, y: 2.1, z: 0.31666666}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 93251559583404586}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6229565836121607482
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3790139722086613306}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &1419158052869144071
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3790139722086613306}
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!23 &3293781219495546304
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3790139722086613306}
m_Enabled: 1
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: a40e87abc5ce74ffab143cb556e0d3ba, 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: 1
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 &6715772009819273802
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6612372135672844808}
- component: {fileID: 3005972327399616305}
- component: {fileID: 1018767381438285975}
m_Layer: 0
m_Name: Direction_Marker
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6612372135672844808
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6715772009819273802}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.58, z: 0.22}
m_LocalScale: {x: 0.55, y: 0.08, z: 0.1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 93251559583404586}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3005972327399616305
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6715772009819273802}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &1018767381438285975
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6715772009819273802}
m_Enabled: 1
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: 68e24a6ae20ad408b8b4ecfc126eb27f, 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: 1
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}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ec2c2d059b49a7861959f27a554de180
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+207
View File
@@ -0,0 +1,207 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6477892089916058228
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8689699650678761083}
- component: {fileID: 4197432759004830252}
- component: {fileID: 4732386656686870055}
- component: {fileID: 8345283462738661428}
- component: {fileID: 4464636800797105579}
m_Layer: 0
m_Name: Platform_Wide
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8689699650678761083
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6477892089916058228}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 5, y: 0.5, z: 3}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3455064335130694245}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4197432759004830252
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6477892089916058228}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &4732386656686870055
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6477892089916058228}
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!23 &8345283462738661428
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6477892089916058228}
m_Enabled: 1
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: 7c638834a537e8eb99c0a7b478ce8f98, 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: 1
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!114 &4464636800797105579
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6477892089916058228}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ec3ea738b9a87ea3b71d9f612198a5d, type: 3}
m_Name:
m_EditorClassIdentifier:
platformType: 1
generatedIndex: -1
isSafe: 1
--- !u!1 &8267925295546894163
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3455064335130694245}
- component: {fileID: 2136869810791351229}
- component: {fileID: 5397520265168158230}
m_Layer: 0
m_Name: Direction_Marker
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3455064335130694245
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8267925295546894163}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.58, z: 0.22}
m_LocalScale: {x: 0.55, y: 0.08, z: 0.1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8689699650678761083}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2136869810791351229
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8267925295546894163}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &5397520265168158230
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8267925295546894163}
m_Enabled: 1
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: 68e24a6ae20ad408b8b4ecfc126eb27f, 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: 1
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}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a018af35f916a005dac71a1ff03477e5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 639d96ce754893f2086f78096cf828fb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b3a245adc017ba8609251c35efaebc5f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 961508d12b5787efb8fa4e15e46e3baf
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+24
View File
@@ -0,0 +1,24 @@
using UnityEngine;
/// <summary>
/// Smooth top/back camera that keeps the player and generated path visible.
/// </summary>
public class CameraFollow : MonoBehaviour
{
public Transform target;
public Vector3 offset = new Vector3(0f, 8f, -8f);
public float followSpeed = 6f;
public float lookHeight = 1f;
private void LateUpdate()
{
if (target == null)
{
return;
}
Vector3 desiredPosition = target.position + offset;
transform.position = Vector3.Lerp(transform.position, desiredPosition, followSpeed * Time.deltaTime);
transform.LookAt(target.position + Vector3.up * lookHeight);
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 86be7a5eb87cf48deb7b7aca235b349c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+86
View File
@@ -0,0 +1,86 @@
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// Runtime text HUD for generation parameters, counters and short status messages.
/// </summary>
public class LevelGenUI : MonoBehaviour
{
public Text titleText;
public Text hintsText;
public Text parametersText;
public Text statusText;
public Text messageText;
public float refreshInterval = 0.2f;
public LevelGenerator generator;
private float nextRefreshTime;
private float messageHideTime;
private void Start()
{
UpdateInfo();
}
private void Update()
{
if (Time.time >= nextRefreshTime)
{
UpdateInfo();
nextRefreshTime = Time.time + refreshInterval;
}
if (messageText != null && messageText.gameObject.activeSelf && Time.time > messageHideTime)
{
messageText.gameObject.SetActive(false);
}
}
public void SetGenerator(LevelGenerator generator)
{
this.generator = generator;
UpdateInfo();
}
public void UpdateInfo()
{
if (titleText != null)
{
titleText.text = "Лабораторная работа №1 — Процедурная генерация уровня";
}
if (hintsText != null)
{
hintsText.text = "WASD — движение\nSpace — прыжок\nR — пересоздать уровень";
}
if (parametersText != null && generator != null)
{
parametersText.text =
"Initial Platforms: " + generator.initialPlatformCount + "\n" +
"Step Distance: " + generator.stepDistance.ToString("0.0") + "\n" +
"Obstacle Chance: " + generator.obstacleChance.ToString("0.00") + "\n" +
"Alive Platforms: " + generator.GetAlivePlatformCount() + "\n" +
"Generated Total: " + generator.GetGeneratedCount();
}
if (statusText != null && generator != null)
{
statusText.text =
"Бесконечный режим: " + (generator.infiniteMode ? "включён" : "выключен") + "\n" +
"Старые платформы удаляются позади игрока";
}
}
public void ShowMessage(string message)
{
if (messageText == null)
{
return;
}
messageText.text = message;
messageText.gameObject.SetActive(true);
messageHideTime = Time.time + 2f;
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 455048cc87c1ca9fb87de97356c2cebd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+380
View File
@@ -0,0 +1,380 @@
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// Generates a simple endless platform path along the Z axis.
/// Platforms are spawned with small X offsets, old chunks are removed behind the player.
/// </summary>
public class LevelGenerator : MonoBehaviour
{
public GameObject[] platformPrefabs;
public Transform player;
public int initialPlatformCount = 12;
public float stepDistance = 3.5f;
public float generationThreshold = 12f;
public float removeThreshold = 18f;
public float obstacleChance = 0.3f;
public float sideOffsetRange = 2f;
public bool infiniteMode = true;
public int maxPlatformsAlive = 30;
public LevelGenUI ui;
public SimplePlayerController playerController;
[SerializeField]
private List<GameObject> spawnedPlatforms = new List<GameObject>();
private float lastGeneratedZ;
private int generatedCount;
private Vector3 initialPlayerPosition;
private Quaternion initialPlayerRotation;
private bool hasInitialPlayerPose;
private void Awake()
{
CacheInitialPlayerPose();
}
private void Start()
{
if (ui != null)
{
ui.SetGenerator(this);
}
RegenerateLevel(false);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
RegenerateLevel();
}
if (player == null)
{
return;
}
RemoveOldPlatforms();
if (!infiniteMode)
{
return;
}
// Limit catch-up generation so a temporary teleport cannot spawn an uncontrolled amount in one frame.
int generatedThisFrame = 0;
while (player.position.z + generationThreshold > lastGeneratedZ &&
spawnedPlatforms.Count < maxPlatformsAlive &&
generatedThisFrame < 4)
{
GenerateNextPlatform();
generatedThisFrame++;
}
}
public void GenerateInitialLevel()
{
ClearGeneratedLevel();
if (player == null || platformPrefabs == null || platformPrefabs.Length == 0)
{
Debug.LogWarning("LevelGenerator requires a player and at least one platform prefab.");
return;
}
generatedCount = 0;
Vector3 startPosition = player.position;
lastGeneratedZ = startPosition.z - stepDistance;
for (int i = 0; i < initialPlatformCount; i++)
{
GenerateNextPlatform();
}
if (spawnedPlatforms.Count > 0)
{
PlacePlayerOnPlatform(spawnedPlatforms[0]);
}
}
public GameObject GenerateNextPlatform()
{
if (platformPrefabs == null || platformPrefabs.Length == 0)
{
return null;
}
bool firstPlatform = generatedCount == 0;
GameObject prefab = ChoosePlatformPrefab(firstPlatform);
if (prefab == null)
{
return null;
}
float x = firstPlatform || player == null
? (player != null ? player.position.x : 0f)
: Random.Range(-sideOffsetRange, sideOffsetRange);
lastGeneratedZ += Mathf.Max(2.5f, stepDistance);
Vector3 position = new Vector3(x, 0f, firstPlatform && player != null ? player.position.z : lastGeneratedZ);
GameObject platform = Instantiate(prefab, position, Quaternion.identity, transform);
platform.name = prefab.name + "_" + generatedCount.ToString("000");
PlatformInfo info = platform.GetComponent<PlatformInfo>();
if (info != null)
{
info.generatedIndex = generatedCount;
info.isSafe = firstPlatform || info.platformType != PlatformInfo.PlatformType.Obstacle;
}
spawnedPlatforms.Add(platform);
generatedCount++;
return platform;
}
public void RemoveOldPlatforms()
{
if (player == null)
{
return;
}
for (int i = spawnedPlatforms.Count - 1; i >= 0; i--)
{
GameObject platform = spawnedPlatforms[i];
if (platform == null)
{
spawnedPlatforms.RemoveAt(i);
continue;
}
if (platform.transform.position.z < player.position.z - removeThreshold)
{
spawnedPlatforms.RemoveAt(i);
DestroyPlatform(platform);
}
}
}
public void ClearGeneratedLevel()
{
HashSet<GameObject> scheduledForDestroy = new HashSet<GameObject>();
for (int i = spawnedPlatforms.Count - 1; i >= 0; i--)
{
if (spawnedPlatforms[i] != null)
{
scheduledForDestroy.Add(spawnedPlatforms[i]);
DestroyPlatform(spawnedPlatforms[i]);
}
}
spawnedPlatforms.Clear();
// Also remove generated children if the serialized list was lost after domain reload.
for (int i = transform.childCount - 1; i >= 0; i--)
{
Transform child = transform.GetChild(i);
if (child != null && !scheduledForDestroy.Contains(child.gameObject))
{
DestroyPlatform(child.gameObject);
}
}
}
public void RegenerateLevel()
{
RegenerateLevel(true);
}
public void RegenerateLevel(bool showMessage)
{
CacheInitialPlayerPose();
ResetPlayer();
GenerateInitialLevel();
if (ui != null)
{
ui.UpdateInfo();
if (showMessage)
{
ui.ShowMessage("Уровень пересоздан");
}
}
}
public int GetGeneratedCount()
{
return generatedCount;
}
public int GetAlivePlatformCount()
{
return spawnedPlatforms.Count;
}
private GameObject ChoosePlatformPrefab(bool firstPlatform)
{
if (firstPlatform)
{
return platformPrefabs[0];
}
int obstacleIndex = FindObstaclePrefabIndex();
if (obstacleIndex >= 0 && Random.value < obstacleChance)
{
return platformPrefabs[obstacleIndex];
}
List<GameObject> regularPrefabs = new List<GameObject>();
for (int i = 0; i < platformPrefabs.Length; i++)
{
if (i != obstacleIndex && platformPrefabs[i] != null)
{
regularPrefabs.Add(platformPrefabs[i]);
}
}
if (regularPrefabs.Count == 0)
{
return platformPrefabs[0];
}
return regularPrefabs[Random.Range(0, regularPrefabs.Count)];
}
private int FindObstaclePrefabIndex()
{
for (int i = 0; i < platformPrefabs.Length; i++)
{
GameObject prefab = platformPrefabs[i];
if (prefab == null)
{
continue;
}
PlatformInfo info = prefab.GetComponent<PlatformInfo>();
if (info != null && info.platformType == PlatformInfo.PlatformType.Obstacle)
{
return i;
}
}
return -1;
}
private void CacheInitialPlayerPose()
{
if (hasInitialPlayerPose || player == null)
{
return;
}
initialPlayerPosition = player.position;
initialPlayerRotation = player.rotation;
hasInitialPlayerPose = true;
}
private void ResetPlayer()
{
if (player == null || !hasInitialPlayerPose)
{
return;
}
player.position = initialPlayerPosition;
player.rotation = initialPlayerRotation;
if (playerController == null)
{
playerController = player.GetComponent<SimplePlayerController>();
}
if (playerController != null)
{
playerController.ResetToPosition(initialPlayerPosition);
}
}
private void PlacePlayerOnPlatform(GameObject platform)
{
if (player == null || platform == null)
{
return;
}
if (!TryGetColliderBounds(platform, out Bounds bounds))
{
return;
}
CapsuleCollider capsule = player.GetComponent<CapsuleCollider>();
float bottomOffset = 1f;
if (capsule != null)
{
bottomOffset = (capsule.height * 0.5f * player.lossyScale.y) - (capsule.center.y * player.lossyScale.y);
}
Vector3 safePosition = new Vector3(
bounds.center.x,
bounds.max.y + bottomOffset + 0.05f,
bounds.center.z);
if (playerController == null)
{
playerController = player.GetComponent<SimplePlayerController>();
}
if (playerController != null)
{
playerController.ResetToPosition(safePosition);
}
else
{
player.position = safePosition;
}
}
private bool TryGetColliderBounds(GameObject platform, out Bounds bounds)
{
Collider[] colliders = platform.GetComponentsInChildren<Collider>();
bounds = new Bounds(platform.transform.position, Vector3.zero);
bool hasBounds = false;
for (int i = 0; i < colliders.Length; i++)
{
Collider collider = colliders[i];
if (collider == null || collider.isTrigger)
{
continue;
}
if (!hasBounds)
{
bounds = collider.bounds;
hasBounds = true;
}
else
{
bounds.Encapsulate(collider.bounds);
}
}
return hasBounds;
}
private void DestroyPlatform(GameObject platform)
{
if (Application.isPlaying)
{
Destroy(platform);
}
else
{
DestroyImmediate(platform);
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9dbf56311a510b5bea85d342eb39300f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+20
View File
@@ -0,0 +1,20 @@
using UnityEngine;
/// <summary>
/// Stores lightweight metadata about a generated platform.
/// The generator and UI can use this for debugging and display.
/// </summary>
public class PlatformInfo : MonoBehaviour
{
public enum PlatformType
{
Basic,
Wide,
Narrow,
Obstacle
}
public PlatformType platformType = PlatformType.Basic;
public int generatedIndex;
public bool isSafe = true;
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ec3ea738b9a87ea3b71d9f612198a5d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+146
View File
@@ -0,0 +1,146 @@
using UnityEngine;
/// <summary>
/// Minimal Rigidbody-based third-person controller for the lab prototype.
/// Uses the classic Unity input axes, so it works in a default 3D template.
/// </summary>
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
public class SimplePlayerController : MonoBehaviour
{
public float moveSpeed = 6f;
public float jumpForce = 7f;
public float groundCheckRadius = 0.25f;
public LayerMask groundMask = ~0;
public float fallResetY = -10f;
public Transform respawnPoint;
public Vector3 lastSafePosition;
private Rigidbody rb;
private CapsuleCollider capsuleCollider;
private Collider[] ownColliders;
private bool isGrounded;
private void Awake()
{
rb = GetComponent<Rigidbody>();
capsuleCollider = GetComponent<CapsuleCollider>();
ownColliders = GetComponentsInChildren<Collider>();
rb.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ;
lastSafePosition = transform.position;
}
private void Update()
{
UpdateGroundedState();
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && rb.velocity.y <= 0.1f)
{
Vector3 velocity = rb.velocity;
velocity.y = 0f;
rb.velocity = velocity;
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
if (transform.position.y < fallResetY)
{
ResetToLastSafePosition();
}
}
private void FixedUpdate()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 input = new Vector3(horizontal, 0f, vertical);
if (input.sqrMagnitude > 1f)
{
input.Normalize();
}
Vector3 horizontalVelocity = input * moveSpeed;
rb.velocity = new Vector3(horizontalVelocity.x, rb.velocity.y, horizontalVelocity.z);
if (input.sqrMagnitude > 0.01f)
{
Quaternion targetRotation = Quaternion.LookRotation(input, Vector3.up);
rb.MoveRotation(Quaternion.Slerp(rb.rotation, targetRotation, 12f * Time.fixedDeltaTime));
}
if (isGrounded && rb.velocity.y <= 0.05f)
{
lastSafePosition = transform.position;
}
}
public void ResetToPosition(Vector3 position)
{
if (rb == null)
{
rb = GetComponent<Rigidbody>();
}
transform.position = position;
lastSafePosition = position;
if (rb != null)
{
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
}
}
public void ResetToLastSafePosition()
{
Vector3 target = respawnPoint != null ? respawnPoint.position : lastSafePosition;
ResetToPosition(target + Vector3.up * 0.25f);
}
private void UpdateGroundedState()
{
Vector3 capsuleCenter = transform.TransformPoint(capsuleCollider.center);
Vector3 sphereCenter = capsuleCenter + Vector3.down * ((capsuleCollider.height * 0.5f) - (groundCheckRadius * 0.5f));
Collider[] hits = Physics.OverlapSphere(
sphereCenter,
groundCheckRadius,
groundMask,
QueryTriggerInteraction.Ignore);
isGrounded = false;
for (int i = 0; i < hits.Length; i++)
{
Collider hit = hits[i];
if (hit == null || IsOwnCollider(hit))
{
continue;
}
// A valid jump surface must be below the player's feet, not inside the player body.
if (hit.bounds.max.y <= sphereCenter.y + groundCheckRadius)
{
isGrounded = true;
return;
}
}
}
private bool IsOwnCollider(Collider collider)
{
if (ownColliders == null || ownColliders.Length == 0)
{
ownColliders = GetComponentsInChildren<Collider>();
}
for (int i = 0; i < ownColliders.Length; i++)
{
if (ownColliders[i] == collider)
{
return true;
}
}
return false;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 906b7a39ca8f9f8ff884e5f7cdffeeee
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: