parent
2ff87e9e15
commit
82ad671bf2
10 changed files with 793 additions and 1 deletions
@ -0,0 +1,8 @@ |
||||
fileFormatVersion: 2 |
||||
guid: b9a186e998591ef46a976b06d5973e32 |
||||
folderAsset: yes |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
||||
@ -0,0 +1,264 @@ |
||||
using System.Collections.Generic; |
||||
using UnityEngine; |
||||
|
||||
/// <summary> |
||||
/// Simulates a single lane of traffic by recycling a fixed pool of vehicle GameObjects. |
||||
/// Vehicles travel along local +Z, with organic lateral drift driven by Perlin noise. |
||||
/// |
||||
/// Usage: |
||||
/// 1. Place this component on an empty GameObject aligned with the road lane. |
||||
/// 2. Assign vehicle prefabs, tune speed and drift. |
||||
/// 3. Duplicate and mirror-X for the opposite lane. |
||||
/// </summary> |
||||
public class TrafficLane : MonoBehaviour |
||||
{ |
||||
// ── Route ───────────────────────────────────────────────────────────────── |
||||
|
||||
[Header("Route")] |
||||
[Tooltip("Length of the lane in local +Z units. Vehicles are recycled at the far end.")] |
||||
public float routeLength = 80f; |
||||
|
||||
[Tooltip("Local X position of the lane centre.")] |
||||
public float laneCenter = 0f; |
||||
|
||||
// ── Vehicle Pool ────────────────────────────────────────────────────────── |
||||
|
||||
[Header("Vehicle Pool")] |
||||
[Tooltip("Prefabs to randomly draw from when spawning. Can contain different vehicle types.")] |
||||
public GameObject[] vehiclePrefabs; |
||||
|
||||
[Tooltip("Total number of vehicle instances kept alive at once.")] |
||||
[Range(1, 60)] |
||||
public int poolSize = 12; |
||||
|
||||
// ── Speed ───────────────────────────────────────────────────────────────── |
||||
|
||||
[Header("Speed")] |
||||
[Tooltip("Average forward speed in units / second.")] |
||||
public float baseSpeed = 6f; |
||||
|
||||
[Tooltip("Per-vehicle speed spread as a fraction of baseSpeed (±).")] |
||||
[Range(0f, 0.5f)] |
||||
public float speedVariance = 0.2f; |
||||
|
||||
// ── Spawn ───────────────────────────────────────────────────────────────── |
||||
|
||||
[Header("Spawn")] |
||||
[Tooltip("Average seconds between consecutive spawns.")] |
||||
public float spawnInterval = 2.5f; |
||||
|
||||
[Tooltip("Randomisation of spawn interval as a fraction (±).")] |
||||
[Range(0f, 0.9f)] |
||||
public float spawnIntervalVariance = 0.4f; |
||||
|
||||
[Tooltip("Minimum clearance required at Z=0 before the next vehicle may enter.")] |
||||
public float minSpawnGap = 4f; |
||||
|
||||
// ── Lateral Drift ───────────────────────────────────────────────────────── |
||||
|
||||
[Header("Lateral Drift")] |
||||
[Tooltip("Maximum left / right deviation from lane centre (units).")] |
||||
public float driftAmplitude = 0.25f; |
||||
|
||||
[Tooltip("Spatial frequency of the drift wave — lower = longer, lazier curves.")] |
||||
[Range(0.01f, 1f)] |
||||
public float driftFrequency = 0.08f; |
||||
|
||||
// ── Private state ───────────────────────────────────────────────────────── |
||||
|
||||
private class Agent |
||||
{ |
||||
public GameObject go; |
||||
public float progress; // distance travelled along Z this trip |
||||
public float speed; // units / second for this trip |
||||
public float noiseRow; // unique Y coordinate in Perlin space for this trip |
||||
public bool active; |
||||
} |
||||
|
||||
private readonly List<Agent> pool = new(); |
||||
private float spawnTimer; |
||||
private float nextSpawnDelay; |
||||
|
||||
// ── Lifecycle ───────────────────────────────────────────────────────────── |
||||
|
||||
private void Start() |
||||
{ |
||||
if (vehiclePrefabs == null || vehiclePrefabs.Length == 0) |
||||
{ |
||||
Debug.LogWarning("[TrafficLane] No vehicle prefabs assigned.", this); |
||||
enabled = false; |
||||
return; |
||||
} |
||||
|
||||
BuildPool(); |
||||
ScheduleNextSpawn(); |
||||
|
||||
// Scatter a few vehicles along the lane so it doesn't look empty at start. |
||||
PrewarmLane(); |
||||
} |
||||
|
||||
private void Update() |
||||
{ |
||||
TickAgents(); |
||||
TickSpawn(); |
||||
} |
||||
|
||||
// ── Pool construction ───────────────────────────────────────────────────── |
||||
|
||||
private void BuildPool() |
||||
{ |
||||
for (var i = 0; i < poolSize; i++) |
||||
{ |
||||
var prefab = vehiclePrefabs[Random.Range(0, vehiclePrefabs.Length)]; |
||||
var go = Instantiate(prefab, transform); |
||||
go.SetActive(false); |
||||
pool.Add(new Agent { go = go, noiseRow = Random.Range(0f, 100f) }); |
||||
} |
||||
} |
||||
|
||||
private void PrewarmLane() |
||||
{ |
||||
// Spread inactive vehicles evenly so the lane looks populated from frame 1. |
||||
var step = routeLength / Mathf.Max(poolSize * 0.5f, 1f); |
||||
var z = Random.Range(0f, step); |
||||
foreach (var agent in pool) |
||||
{ |
||||
if (z >= routeLength) |
||||
{ |
||||
break; |
||||
} |
||||
Activate(agent, z); |
||||
z += step * Random.Range(0.7f, 1.3f); |
||||
} |
||||
} |
||||
|
||||
// ── Per-frame tick ──────────────────────────────────────────────────────── |
||||
|
||||
private void TickAgents() |
||||
{ |
||||
foreach (var agent in pool) |
||||
{ |
||||
if (!agent.active) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
agent.progress += agent.speed * Time.deltaTime; |
||||
|
||||
if (agent.progress >= routeLength) |
||||
{ |
||||
Deactivate(agent); |
||||
continue; |
||||
} |
||||
|
||||
// Perlin noise: x-axis = position along route, y-axis = per-agent seed. |
||||
var noise = Mathf.PerlinNoise(agent.progress * driftFrequency, agent.noiseRow); |
||||
var lateral = laneCenter + (noise * 2f - 1f) * driftAmplitude; |
||||
|
||||
var prev = agent.go.transform.localPosition; |
||||
var next = new Vector3(lateral, 0f, agent.progress); |
||||
agent.go.transform.localPosition = next; |
||||
|
||||
// Face direction of travel, ignoring tiny sub-frame deltas. |
||||
var delta = next - prev; |
||||
if (delta.sqrMagnitude > 1e-6f) |
||||
{ |
||||
agent.go.transform.localRotation = Quaternion.LookRotation(delta, Vector3.up); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void TickSpawn() |
||||
{ |
||||
spawnTimer += Time.deltaTime; |
||||
if (spawnTimer < nextSpawnDelay) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
spawnTimer = 0f; |
||||
ScheduleNextSpawn(); |
||||
|
||||
// Block spawn if another vehicle is still near the entry point. |
||||
foreach (var agent in pool) |
||||
{ |
||||
if (agent.active && agent.progress < minSpawnGap) |
||||
{ |
||||
return; |
||||
} |
||||
} |
||||
|
||||
SpawnNext(0f); |
||||
} |
||||
|
||||
// ── Helpers ─────────────────────────────────────────────────────────────── |
||||
|
||||
private void Activate(Agent agent, float startProgress) |
||||
{ |
||||
agent.progress = startProgress; |
||||
agent.speed = baseSpeed * (1f + Random.Range(-speedVariance, speedVariance)); |
||||
agent.noiseRow = Random.Range(0f, 100f); |
||||
agent.go.SetActive(true); |
||||
agent.active = true; |
||||
|
||||
// Teleport silently to start position before enabling. |
||||
var noise = Mathf.PerlinNoise(startProgress * driftFrequency, agent.noiseRow); |
||||
var lateral = laneCenter + (noise * 2f - 1f) * driftAmplitude; |
||||
agent.go.transform.localPosition = new Vector3(lateral, 0f, startProgress); |
||||
} |
||||
|
||||
private void SpawnNext(float startProgress) |
||||
{ |
||||
foreach (var agent in pool) |
||||
{ |
||||
if (!agent.active) |
||||
{ |
||||
Activate(agent, startProgress); |
||||
return; |
||||
} |
||||
} |
||||
// Pool exhausted — skip this cycle. |
||||
} |
||||
|
||||
private static void Deactivate(Agent agent) |
||||
{ |
||||
agent.go.SetActive(false); |
||||
agent.active = false; |
||||
} |
||||
|
||||
private void ScheduleNextSpawn() |
||||
{ |
||||
var variance = spawnInterval * spawnIntervalVariance; |
||||
nextSpawnDelay = Mathf.Max(0.1f, spawnInterval + Random.Range(-variance, variance)); |
||||
} |
||||
|
||||
// ── Editor visualisation ────────────────────────────────────────────────── |
||||
|
||||
#if UNITY_EDITOR |
||||
private void OnDrawGizmosSelected() |
||||
{ |
||||
var start = transform.TransformPoint(new Vector3(laneCenter, 0f, 0f)); |
||||
var end = transform.TransformPoint(new Vector3(laneCenter, 0f, routeLength)); |
||||
|
||||
Gizmos.color = Color.yellow; |
||||
Gizmos.DrawLine(start, end); |
||||
|
||||
// Drift envelope. |
||||
Gizmos.color = new Color(1f, 1f, 0f, 0.25f); |
||||
var left = transform.TransformPoint(new Vector3(laneCenter - driftAmplitude, 0f, 0f)); |
||||
var right = transform.TransformPoint(new Vector3(laneCenter + driftAmplitude, 0f, 0f)); |
||||
var leftEnd = transform.TransformPoint(new Vector3(laneCenter - driftAmplitude, 0f, routeLength)); |
||||
var rightEnd = transform.TransformPoint(new Vector3(laneCenter + driftAmplitude, 0f, routeLength)); |
||||
Gizmos.DrawLine(left, leftEnd); |
||||
Gizmos.DrawLine(right, rightEnd); |
||||
Gizmos.DrawLine(left, right); |
||||
Gizmos.DrawLine(leftEnd, rightEnd); |
||||
|
||||
// Entry / exit markers. |
||||
Gizmos.color = Color.green; |
||||
Gizmos.DrawSphere(start, 0.3f); |
||||
Gizmos.color = Color.red; |
||||
Gizmos.DrawSphere(end, 0.3f); |
||||
} |
||||
#endif |
||||
} |
||||
@ -0,0 +1,2 @@ |
||||
fileFormatVersion: 2 |
||||
guid: b9bb25da9b61d4849b3c17eff30adbf8 |
||||
@ -0,0 +1,146 @@ |
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!1 &1557020077158108179 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 8678393413767825165} |
||||
m_Layer: 0 |
||||
m_Name: Skoda Kamiq |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &8678393413767825165 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 1557020077158108179} |
||||
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: 5897071126227124009} |
||||
m_Father: {fileID: 0} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
--- !u!1 &2325977463038497186 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 5897071126227124009} |
||||
- component: {fileID: 7052644008610836356} |
||||
- component: {fileID: 1832160163738719301} |
||||
- component: {fileID: 5942392679462043245} |
||||
m_Layer: 0 |
||||
m_Name: Dummy |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &5897071126227124009 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2325977463038497186} |
||||
serializedVersion: 2 |
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
||||
m_LocalPosition: {x: 0, y: 0.077, z: 0} |
||||
m_LocalScale: {x: 0.1793, y: 0.154, z: 0.4241} |
||||
m_ConstrainProportionsScale: 0 |
||||
m_Children: [] |
||||
m_Father: {fileID: 8678393413767825165} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
--- !u!33 &7052644008610836356 |
||||
MeshFilter: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2325977463038497186} |
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} |
||||
--- !u!23 &1832160163738719301 |
||||
MeshRenderer: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2325977463038497186} |
||||
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_RayTracingAccelStructBuildFlagsOverride: 0 |
||||
m_RayTracingAccelStructBuildFlags: 1 |
||||
m_SmallMeshCulling: 1 |
||||
m_ForceMeshLod: -1 |
||||
m_MeshLodSelectionBias: 0 |
||||
m_RenderingLayerMask: 1 |
||||
m_RendererPriority: 0 |
||||
m_Materials: |
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} |
||||
m_StaticBatchInfo: |
||||
firstSubMesh: 0 |
||||
subMeshCount: 0 |
||||
m_StaticBatchRoot: {fileID: 0} |
||||
m_ProbeAnchor: {fileID: 0} |
||||
m_LightProbeVolumeOverride: {fileID: 0} |
||||
m_ScaleInLightmap: 1 |
||||
m_ReceiveGI: 1 |
||||
m_PreserveUVs: 0 |
||||
m_IgnoreNormalsForChartDetection: 0 |
||||
m_ImportantGI: 0 |
||||
m_StitchLightmapSeams: 1 |
||||
m_SelectedEditorRenderState: 3 |
||||
m_MinimumChartSize: 4 |
||||
m_AutoUVMaxDistance: 0.5 |
||||
m_AutoUVMaxAngle: 89 |
||||
m_LightmapParameters: {fileID: 0} |
||||
m_GlobalIlluminationMeshLod: 0 |
||||
m_SortingLayerID: 0 |
||||
m_SortingLayer: 0 |
||||
m_SortingOrder: 0 |
||||
m_MaskInteraction: 0 |
||||
m_AdditionalVertexStreams: {fileID: 0} |
||||
--- !u!65 &5942392679462043245 |
||||
BoxCollider: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2325977463038497186} |
||||
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} |
||||
@ -0,0 +1,7 @@ |
||||
fileFormatVersion: 2 |
||||
guid: 7893264379c7b27449c0d5cd800de112 |
||||
PrefabImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
||||
@ -0,0 +1,146 @@ |
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!1 &2909664378286430652 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 8179583403278623410} |
||||
- component: {fileID: 4213176841392790473} |
||||
- component: {fileID: 2544296818586992976} |
||||
- component: {fileID: 1169592420900285185} |
||||
m_Layer: 0 |
||||
m_Name: Dummy |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &8179583403278623410 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2909664378286430652} |
||||
serializedVersion: 2 |
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
||||
m_LocalPosition: {x: 0, y: 0.0812, z: 0} |
||||
m_LocalScale: {x: 0.192, y: 0.1624, z: 0.479} |
||||
m_ConstrainProportionsScale: 0 |
||||
m_Children: [] |
||||
m_Father: {fileID: 8656289922454706414} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
--- !u!33 &4213176841392790473 |
||||
MeshFilter: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2909664378286430652} |
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} |
||||
--- !u!23 &2544296818586992976 |
||||
MeshRenderer: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2909664378286430652} |
||||
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_RayTracingAccelStructBuildFlagsOverride: 0 |
||||
m_RayTracingAccelStructBuildFlags: 1 |
||||
m_SmallMeshCulling: 1 |
||||
m_ForceMeshLod: -1 |
||||
m_MeshLodSelectionBias: 0 |
||||
m_RenderingLayerMask: 1 |
||||
m_RendererPriority: 0 |
||||
m_Materials: |
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} |
||||
m_StaticBatchInfo: |
||||
firstSubMesh: 0 |
||||
subMeshCount: 0 |
||||
m_StaticBatchRoot: {fileID: 0} |
||||
m_ProbeAnchor: {fileID: 0} |
||||
m_LightProbeVolumeOverride: {fileID: 0} |
||||
m_ScaleInLightmap: 1 |
||||
m_ReceiveGI: 1 |
||||
m_PreserveUVs: 0 |
||||
m_IgnoreNormalsForChartDetection: 0 |
||||
m_ImportantGI: 0 |
||||
m_StitchLightmapSeams: 1 |
||||
m_SelectedEditorRenderState: 3 |
||||
m_MinimumChartSize: 4 |
||||
m_AutoUVMaxDistance: 0.5 |
||||
m_AutoUVMaxAngle: 89 |
||||
m_LightmapParameters: {fileID: 0} |
||||
m_GlobalIlluminationMeshLod: 0 |
||||
m_SortingLayerID: 0 |
||||
m_SortingLayer: 0 |
||||
m_SortingOrder: 0 |
||||
m_MaskInteraction: 0 |
||||
m_AdditionalVertexStreams: {fileID: 0} |
||||
--- !u!65 &1169592420900285185 |
||||
BoxCollider: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 2909664378286430652} |
||||
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!1 &6059035821173914762 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 8656289922454706414} |
||||
m_Layer: 0 |
||||
m_Name: Tesla Model Y |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &8656289922454706414 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 6059035821173914762} |
||||
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: 8179583403278623410} |
||||
m_Father: {fileID: 0} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
@ -0,0 +1,7 @@ |
||||
fileFormatVersion: 2 |
||||
guid: bf52a0f6f1d4ca94abedb85fa135a7cd |
||||
PrefabImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
||||
@ -0,0 +1,146 @@ |
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!1 &369911992068276538 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 3817041185149164022} |
||||
- component: {fileID: 7596283371511926204} |
||||
- component: {fileID: 3959783925517860865} |
||||
- component: {fileID: 2975129725945164033} |
||||
m_Layer: 0 |
||||
m_Name: Dummy |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &3817041185149164022 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 369911992068276538} |
||||
serializedVersion: 2 |
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
||||
m_LocalPosition: {x: 0, y: 0.07175, z: 0} |
||||
m_LocalScale: {x: 0.178, y: 0.1435, z: 0.463} |
||||
m_ConstrainProportionsScale: 0 |
||||
m_Children: [] |
||||
m_Father: {fileID: 657832765405581052} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
--- !u!33 &7596283371511926204 |
||||
MeshFilter: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 369911992068276538} |
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} |
||||
--- !u!23 &3959783925517860865 |
||||
MeshRenderer: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 369911992068276538} |
||||
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_RayTracingAccelStructBuildFlagsOverride: 0 |
||||
m_RayTracingAccelStructBuildFlags: 1 |
||||
m_SmallMeshCulling: 1 |
||||
m_ForceMeshLod: -1 |
||||
m_MeshLodSelectionBias: 0 |
||||
m_RenderingLayerMask: 1 |
||||
m_RendererPriority: 0 |
||||
m_Materials: |
||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} |
||||
m_StaticBatchInfo: |
||||
firstSubMesh: 0 |
||||
subMeshCount: 0 |
||||
m_StaticBatchRoot: {fileID: 0} |
||||
m_ProbeAnchor: {fileID: 0} |
||||
m_LightProbeVolumeOverride: {fileID: 0} |
||||
m_ScaleInLightmap: 1 |
||||
m_ReceiveGI: 1 |
||||
m_PreserveUVs: 0 |
||||
m_IgnoreNormalsForChartDetection: 0 |
||||
m_ImportantGI: 0 |
||||
m_StitchLightmapSeams: 1 |
||||
m_SelectedEditorRenderState: 3 |
||||
m_MinimumChartSize: 4 |
||||
m_AutoUVMaxDistance: 0.5 |
||||
m_AutoUVMaxAngle: 89 |
||||
m_LightmapParameters: {fileID: 0} |
||||
m_GlobalIlluminationMeshLod: 0 |
||||
m_SortingLayerID: 0 |
||||
m_SortingLayer: 0 |
||||
m_SortingOrder: 0 |
||||
m_MaskInteraction: 0 |
||||
m_AdditionalVertexStreams: {fileID: 0} |
||||
--- !u!65 &2975129725945164033 |
||||
BoxCollider: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 369911992068276538} |
||||
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!1 &7937761055385602081 |
||||
GameObject: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
serializedVersion: 6 |
||||
m_Component: |
||||
- component: {fileID: 657832765405581052} |
||||
m_Layer: 0 |
||||
m_Name: Toyota Altis |
||||
m_TagString: Untagged |
||||
m_Icon: {fileID: 0} |
||||
m_NavMeshLayer: 0 |
||||
m_StaticEditorFlags: 0 |
||||
m_IsActive: 1 |
||||
--- !u!4 &657832765405581052 |
||||
Transform: |
||||
m_ObjectHideFlags: 0 |
||||
m_CorrespondingSourceObject: {fileID: 0} |
||||
m_PrefabInstance: {fileID: 0} |
||||
m_PrefabAsset: {fileID: 0} |
||||
m_GameObject: {fileID: 7937761055385602081} |
||||
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: 3817041185149164022} |
||||
m_Father: {fileID: 0} |
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
||||
@ -0,0 +1,7 @@ |
||||
fileFormatVersion: 2 |
||||
guid: 692d27357d450044883464a7dc84418a |
||||
PrefabImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
||||
Loading…
Reference in new issue