diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Road.cs b/Assets/Scripts/Road.cs new file mode 100644 index 0000000..334c74b --- /dev/null +++ b/Assets/Scripts/Road.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Road { + public Node start, end; + FlatBezierRenderer bezierRenderer; + Material material; + + public Road(Node start, Node end, Material material) { + this.start = start; + this.end = end; + this.material = material; + bezierRenderer = new FlatBezierRenderer(new Bezier(), 50, 0.2f); + } + + + public void initialize(Transform parent) { + GameObject child = new GameObject(); + child.transform.position = Vector3.zero; + child.AddComponent().material = material; + child.AddComponent().mesh = bezierRenderer.mesh; + child.transform.parent = parent; + update(); + } + + public void update() { + bezierRenderer.bezier.A = start.position; + bezierRenderer.bezier.B = 0.5f * (start.position + end.position); + bezierRenderer.bezier.C = 0.5f * (end.position + start.position); + bezierRenderer.bezier.D = end.position; + bezierRenderer.update(); + } + + override public bool Equals(object other) { + if (other == null || !(other is Road)) { + return false; + } + if (other == this) { + return true; + } + Road otherRoad = (Road) other; + return + (otherRoad.start.Equals(start)) && (otherRoad.end.Equals(end)) || + (otherRoad.start.Equals(end)) && (otherRoad.end.Equals(start)); + } + + public override int GetHashCode() { + return start.GetHashCode() << 16 | end.GetHashCode(); + } +} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Road.cs b/Assets/Scripts/Road.cs new file mode 100644 index 0000000..334c74b --- /dev/null +++ b/Assets/Scripts/Road.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Road { + public Node start, end; + FlatBezierRenderer bezierRenderer; + Material material; + + public Road(Node start, Node end, Material material) { + this.start = start; + this.end = end; + this.material = material; + bezierRenderer = new FlatBezierRenderer(new Bezier(), 50, 0.2f); + } + + + public void initialize(Transform parent) { + GameObject child = new GameObject(); + child.transform.position = Vector3.zero; + child.AddComponent().material = material; + child.AddComponent().mesh = bezierRenderer.mesh; + child.transform.parent = parent; + update(); + } + + public void update() { + bezierRenderer.bezier.A = start.position; + bezierRenderer.bezier.B = 0.5f * (start.position + end.position); + bezierRenderer.bezier.C = 0.5f * (end.position + start.position); + bezierRenderer.bezier.D = end.position; + bezierRenderer.update(); + } + + override public bool Equals(object other) { + if (other == null || !(other is Road)) { + return false; + } + if (other == this) { + return true; + } + Road otherRoad = (Road) other; + return + (otherRoad.start.Equals(start)) && (otherRoad.end.Equals(end)) || + (otherRoad.start.Equals(end)) && (otherRoad.end.Equals(start)); + } + + public override int GetHashCode() { + return start.GetHashCode() << 16 | end.GetHashCode(); + } +} diff --git a/Assets/Scripts/Road.cs.meta b/Assets/Scripts/Road.cs.meta new file mode 100644 index 0000000..24dc94b --- /dev/null +++ b/Assets/Scripts/Road.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ab512a631c0cc4468e77b6a2dfeb31f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Road.cs b/Assets/Scripts/Road.cs new file mode 100644 index 0000000..334c74b --- /dev/null +++ b/Assets/Scripts/Road.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Road { + public Node start, end; + FlatBezierRenderer bezierRenderer; + Material material; + + public Road(Node start, Node end, Material material) { + this.start = start; + this.end = end; + this.material = material; + bezierRenderer = new FlatBezierRenderer(new Bezier(), 50, 0.2f); + } + + + public void initialize(Transform parent) { + GameObject child = new GameObject(); + child.transform.position = Vector3.zero; + child.AddComponent().material = material; + child.AddComponent().mesh = bezierRenderer.mesh; + child.transform.parent = parent; + update(); + } + + public void update() { + bezierRenderer.bezier.A = start.position; + bezierRenderer.bezier.B = 0.5f * (start.position + end.position); + bezierRenderer.bezier.C = 0.5f * (end.position + start.position); + bezierRenderer.bezier.D = end.position; + bezierRenderer.update(); + } + + override public bool Equals(object other) { + if (other == null || !(other is Road)) { + return false; + } + if (other == this) { + return true; + } + Road otherRoad = (Road) other; + return + (otherRoad.start.Equals(start)) && (otherRoad.end.Equals(end)) || + (otherRoad.start.Equals(end)) && (otherRoad.end.Equals(start)); + } + + public override int GetHashCode() { + return start.GetHashCode() << 16 | end.GetHashCode(); + } +} diff --git a/Assets/Scripts/Road.cs.meta b/Assets/Scripts/Road.cs.meta new file mode 100644 index 0000000..24dc94b --- /dev/null +++ b/Assets/Scripts/Road.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ab512a631c0cc4468e77b6a2dfeb31f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/RoadEdit.cs b/Assets/Scripts/RoadEdit.cs index ed74cf1..a6cc73e 100644 --- a/Assets/Scripts/RoadEdit.cs +++ b/Assets/Scripts/RoadEdit.cs @@ -12,34 +12,12 @@ private GameObject currentlyPulling = null; public Bezier bezier; private FlatBezierRenderer pathRenderer; - - public CameraControl cameraControl; - - private FlatBezierRenderer roadRenderer; - public Material highlight, noHighlight; void Start() { - roadRenderer = new FlatBezierRenderer(cameraControl.road, 100, 0.1f); - gameObject.AddComponent().mesh = roadRenderer.mesh; } void updateRoad(Vector3 position) { - if (currentlyPulling == start) { - cameraControl.road.A.x = position.x; - cameraControl.road.A.z = position.z; - } else if (currentlyPulling == startDirection) { - cameraControl.road.B.x = position.x; - cameraControl.road.B.z = position.z; - } else if (currentlyPulling == endDirection) { - cameraControl.road.C.x = position.x; - cameraControl.road.C.z = position.z; - } else { - cameraControl.road.D.x = position.x; - cameraControl.road.D.z = position.z; - } - cameraControl.roadRenderer.update(); - roadRenderer.update(); } void Update() { diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Road.cs b/Assets/Scripts/Road.cs new file mode 100644 index 0000000..334c74b --- /dev/null +++ b/Assets/Scripts/Road.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Road { + public Node start, end; + FlatBezierRenderer bezierRenderer; + Material material; + + public Road(Node start, Node end, Material material) { + this.start = start; + this.end = end; + this.material = material; + bezierRenderer = new FlatBezierRenderer(new Bezier(), 50, 0.2f); + } + + + public void initialize(Transform parent) { + GameObject child = new GameObject(); + child.transform.position = Vector3.zero; + child.AddComponent().material = material; + child.AddComponent().mesh = bezierRenderer.mesh; + child.transform.parent = parent; + update(); + } + + public void update() { + bezierRenderer.bezier.A = start.position; + bezierRenderer.bezier.B = 0.5f * (start.position + end.position); + bezierRenderer.bezier.C = 0.5f * (end.position + start.position); + bezierRenderer.bezier.D = end.position; + bezierRenderer.update(); + } + + override public bool Equals(object other) { + if (other == null || !(other is Road)) { + return false; + } + if (other == this) { + return true; + } + Road otherRoad = (Road) other; + return + (otherRoad.start.Equals(start)) && (otherRoad.end.Equals(end)) || + (otherRoad.start.Equals(end)) && (otherRoad.end.Equals(start)); + } + + public override int GetHashCode() { + return start.GetHashCode() << 16 | end.GetHashCode(); + } +} diff --git a/Assets/Scripts/Road.cs.meta b/Assets/Scripts/Road.cs.meta new file mode 100644 index 0000000..24dc94b --- /dev/null +++ b/Assets/Scripts/Road.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ab512a631c0cc4468e77b6a2dfeb31f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/RoadEdit.cs b/Assets/Scripts/RoadEdit.cs index ed74cf1..a6cc73e 100644 --- a/Assets/Scripts/RoadEdit.cs +++ b/Assets/Scripts/RoadEdit.cs @@ -12,34 +12,12 @@ private GameObject currentlyPulling = null; public Bezier bezier; private FlatBezierRenderer pathRenderer; - - public CameraControl cameraControl; - - private FlatBezierRenderer roadRenderer; - public Material highlight, noHighlight; void Start() { - roadRenderer = new FlatBezierRenderer(cameraControl.road, 100, 0.1f); - gameObject.AddComponent().mesh = roadRenderer.mesh; } void updateRoad(Vector3 position) { - if (currentlyPulling == start) { - cameraControl.road.A.x = position.x; - cameraControl.road.A.z = position.z; - } else if (currentlyPulling == startDirection) { - cameraControl.road.B.x = position.x; - cameraControl.road.B.z = position.z; - } else if (currentlyPulling == endDirection) { - cameraControl.road.C.x = position.x; - cameraControl.road.C.z = position.z; - } else { - cameraControl.road.D.x = position.x; - cameraControl.road.D.z = position.z; - } - cameraControl.roadRenderer.update(); - roadRenderer.update(); } void Update() { diff --git a/Assets/Scripts/Roads.cs b/Assets/Scripts/Roads.cs new file mode 100644 index 0000000..6480c47 --- /dev/null +++ b/Assets/Scripts/Roads.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Roads : MonoBehaviour { + public List nodes = new List(); + public List roads = new List(); + public FlatBezierRenderer roadRenderer; + public Camera mainCamera; + private bool down = false; + public Material material; + + void Start() { + } + + private Node startNode; + + private void startRoad() { + Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, Mathf.Infinity, 1 << 6); + foreach (Node node in nodes) { + if ((hit.point - node.position).magnitude < 1.0f) { + startNode = node; + down = true; + return; + } + } + Vector3 position = new Vector3(hit.point.x, 0.0f, hit.point.z); + startNode = new Node(position, transform, material); + nodes.Add(startNode); + down = true; + } + + private void endRoad() { + Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, Mathf.Infinity, 1 << 6); + Node endNode = null; + foreach (Node node in nodes) { + if ((hit.point - node.position).magnitude < 1.0f) { + endNode = node; + break; + } + } + if (endNode == null) { + Vector3 position = new Vector3(hit.point.x, 0.0f, hit.point.z); + endNode = new Node(position, transform, material); + nodes.Add(endNode); + } + + Road road = new Road(startNode, endNode, material); + if (!roads.Contains(road)) { + road.initialize(transform); + roads.Add(road); + startNode.roads.Add(road); + endNode.roads.Add(road); + } + startNode = null; + down = false; + } + + void Update() { + if (Input.GetAxis("Fire1") != 0.0f) { + if (!down) { + startRoad(); + } + } else { + if (down) { + endRoad(); + } + } + } +} diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 72dd940..344ff24 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -123,291 +123,6 @@ debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &37644793 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 37644794} - - component: {fileID: 37644797} - - component: {fileID: 37644796} - - component: {fileID: 37644795} - m_Layer: 7 - m_Name: start - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &37644794 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!135 &37644795 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &37644796 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &37644797 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 37644793} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &93681403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 93681404} - - component: {fileID: 93681406} - - component: {fileID: 93681405} - - component: {fileID: 93681407} - m_Layer: 7 - m_Name: startDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &93681404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 0} - m_LocalScale: {x: 0.2, y: 0.001, z: 0.2} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &93681405 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &93681406 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &93681407 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 93681403} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &658194174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 658194175} - - component: {fileID: 658194177} - - component: {fileID: 658194176} - - component: {fileID: 658194178} - m_Layer: 7 - m_Name: end - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &658194175 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &658194176 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &658194177 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &658194178 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 658194174} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &683864801 GameObject: m_ObjectHideFlags: 0 @@ -922,103 +637,6 @@ m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1447756709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447756710} - - component: {fileID: 1447756711} - - component: {fileID: 1447756712} - m_Layer: 0 - m_Name: roadEdit - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447756710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - 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_Children: - - {fileID: 37644794} - - {fileID: 93681404} - - {fileID: 658194175} - - {fileID: 1870774084} - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1447756711 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!114 &1447756712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447756709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68e9412fa432f2e468d5d7447e99fd89, type: 3} - m_Name: - m_EditorClassIdentifier: - start: {fileID: 37644793} - startDirection: {fileID: 93681403} - end: {fileID: 658194174} - endDirection: {fileID: 1870774083} - mainCamera: {fileID: 963194227} - cameraControl: {fileID: 1256630291} - highlight: {fileID: 2100000, guid: bb482d1941dca4649842d0da3f1120ab, type: 2} - noHighlight: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} --- !u!1 &1714391591 GameObject: m_ObjectHideFlags: 0 @@ -1029,6 +647,7 @@ m_Component: - component: {fileID: 1714391592} - component: {fileID: 1714391593} + - component: {fileID: 1714391594} m_Layer: 0 m_Name: roads m_TagString: Untagged @@ -1044,7 +663,7 @@ m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1714391591} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.001, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1091,98 +710,17 @@ m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!1 &1870774083 -GameObject: +--- !u!114 &1714391594 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1870774084} - - component: {fileID: 1870774086} - - component: {fileID: 1870774085} - - component: {fileID: 1870774087} - m_Layer: 7 - m_Name: endDirection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1870774084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 5} - m_LocalScale: {x: 0.19999999, y: 0.0009999999, z: 0.19999999} - m_Children: [] - m_Father: {fileID: 1447756710} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1870774085 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} + m_GameObject: {fileID: 1714391591} m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - 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: e2c5b6e79b6cdb545863f245ced42125, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1870774086 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!135 &1870774087 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1870774083} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7635c530aa8ef31498f100f4e7465bea, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 963194227} + material: {fileID: 2100000, guid: e2c5b6e79b6cdb545863f245ced42125, type: 2} diff --git a/Assets/Scripts/Bezier.cs b/Assets/Scripts/Bezier.cs index c838cdd..ea19006 100644 --- a/Assets/Scripts/Bezier.cs +++ b/Assets/Scripts/Bezier.cs @@ -11,6 +11,13 @@ this.C = C; this.D = D; } + + public Bezier() { + this.A = Vector3.zero; + this.B = Vector3.zero; + this.C = Vector3.zero; + this.D = Vector3.zero; + } public Vector3 getPosition(float t) { float T = 1.0f - t; diff --git a/Assets/Scripts/CameraControl.cs b/Assets/Scripts/CameraControl.cs index 0b6ca04..81186f8 100644 --- a/Assets/Scripts/CameraControl.cs +++ b/Assets/Scripts/CameraControl.cs @@ -20,17 +20,8 @@ public GameObject cursor; public GameObject roads; public Vector3 cursorPosition = new Vector3(); - public Bezier road; - public FlatBezierRenderer roadRenderer; void Start() { - road = new Bezier( - new Vector3(0.0f, 0.0f, 0.0f), - new Vector3(5.0f, 0.0f, 0.0f), - new Vector3(0.0f, 0.0f, 5.0f), - new Vector3(5.0f, 0.0f, 5.0f)); - roadRenderer = new FlatBezierRenderer(road, 100, 2.0f); - roads.AddComponent().mesh = roadRenderer.mesh; } void Update() { diff --git a/Assets/Scripts/FlatCircleRenderer.cs b/Assets/Scripts/FlatCircleRenderer.cs new file mode 100644 index 0000000..363b663 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FlatCircleRenderer { + public Mesh mesh = new Mesh(); + public float radius, width; + private int segments; + + public FlatCircleRenderer(float radius, float width, int segments) { + this.radius = radius; + this.width = width; + this.segments = segments; + update(); + } + + public void update() { + Vector3[] vertices = new Vector3[2*segments+6]; + int[] indices = new int[6*segments]; + for (int i = 0; i < segments; i++) { + float alpha = (float) i / segments * 2 * Mathf.PI; + indices[6*i ] = 2*i ; + indices[6*i+3] = 2*i ; + indices[6*i+5] = 2*i+1; + if (i == 0) { + indices[6*i+1] = 2*segments-2; + indices[6*i+2] = 2*segments-1; + indices[6*i+4] = 2*segments-1; + } else { + indices[6*i+1] = 2*i-2; + indices[6*i+2] = 2*i-1; + indices[6*i+4] = 2*i-1; + } + Vector3 direction = new Vector3(Mathf.Sin(alpha), 0.0f, Mathf.Cos(alpha)); + vertices[2*i ] = direction * radius; + vertices[2*i+1] = direction * (radius + width); + } + mesh.Clear(); + mesh.vertices = vertices; + mesh.triangles = indices; + } +} diff --git a/Assets/Scripts/FlatCircleRenderer.cs.meta b/Assets/Scripts/FlatCircleRenderer.cs.meta new file mode 100644 index 0000000..d10c238 --- /dev/null +++ b/Assets/Scripts/FlatCircleRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fe81c7924a85b142a4a86201b08c241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Node.cs b/Assets/Scripts/Node.cs new file mode 100644 index 0000000..02f6a76 --- /dev/null +++ b/Assets/Scripts/Node.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Node { + public FlatCircleRenderer circle = new FlatCircleRenderer(0.4f, 0.1f, 50); + public Vector3 position; + public List roads = new List(); + + public Node(Vector3 position, Transform parent, Material material) { + GameObject child = new GameObject(); + child.transform.position = position; + child.AddComponent().material = material; + child.AddComponent().mesh = circle.mesh; + child.transform.parent = parent; + this.position = position; + } + + override public int GetHashCode() { + return position.GetHashCode(); + } + + override public bool Equals(object other) { + if ((other == null) || ! this.GetType().Equals(other.GetType())) { + return false; + } + if (other == this) { + return true; + } + return ((Node)other).position.Equals(position); + } +} diff --git a/Assets/Scripts/Node.cs.meta b/Assets/Scripts/Node.cs.meta new file mode 100644 index 0000000..8bbedf1 --- /dev/null +++ b/Assets/Scripts/Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbed1dad7ec67d4dbe8602aea1e2979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Road.cs b/Assets/Scripts/Road.cs new file mode 100644 index 0000000..334c74b --- /dev/null +++ b/Assets/Scripts/Road.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Road { + public Node start, end; + FlatBezierRenderer bezierRenderer; + Material material; + + public Road(Node start, Node end, Material material) { + this.start = start; + this.end = end; + this.material = material; + bezierRenderer = new FlatBezierRenderer(new Bezier(), 50, 0.2f); + } + + + public void initialize(Transform parent) { + GameObject child = new GameObject(); + child.transform.position = Vector3.zero; + child.AddComponent().material = material; + child.AddComponent().mesh = bezierRenderer.mesh; + child.transform.parent = parent; + update(); + } + + public void update() { + bezierRenderer.bezier.A = start.position; + bezierRenderer.bezier.B = 0.5f * (start.position + end.position); + bezierRenderer.bezier.C = 0.5f * (end.position + start.position); + bezierRenderer.bezier.D = end.position; + bezierRenderer.update(); + } + + override public bool Equals(object other) { + if (other == null || !(other is Road)) { + return false; + } + if (other == this) { + return true; + } + Road otherRoad = (Road) other; + return + (otherRoad.start.Equals(start)) && (otherRoad.end.Equals(end)) || + (otherRoad.start.Equals(end)) && (otherRoad.end.Equals(start)); + } + + public override int GetHashCode() { + return start.GetHashCode() << 16 | end.GetHashCode(); + } +} diff --git a/Assets/Scripts/Road.cs.meta b/Assets/Scripts/Road.cs.meta new file mode 100644 index 0000000..24dc94b --- /dev/null +++ b/Assets/Scripts/Road.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ab512a631c0cc4468e77b6a2dfeb31f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/RoadEdit.cs b/Assets/Scripts/RoadEdit.cs index ed74cf1..a6cc73e 100644 --- a/Assets/Scripts/RoadEdit.cs +++ b/Assets/Scripts/RoadEdit.cs @@ -12,34 +12,12 @@ private GameObject currentlyPulling = null; public Bezier bezier; private FlatBezierRenderer pathRenderer; - - public CameraControl cameraControl; - - private FlatBezierRenderer roadRenderer; - public Material highlight, noHighlight; void Start() { - roadRenderer = new FlatBezierRenderer(cameraControl.road, 100, 0.1f); - gameObject.AddComponent().mesh = roadRenderer.mesh; } void updateRoad(Vector3 position) { - if (currentlyPulling == start) { - cameraControl.road.A.x = position.x; - cameraControl.road.A.z = position.z; - } else if (currentlyPulling == startDirection) { - cameraControl.road.B.x = position.x; - cameraControl.road.B.z = position.z; - } else if (currentlyPulling == endDirection) { - cameraControl.road.C.x = position.x; - cameraControl.road.C.z = position.z; - } else { - cameraControl.road.D.x = position.x; - cameraControl.road.D.z = position.z; - } - cameraControl.roadRenderer.update(); - roadRenderer.update(); } void Update() { diff --git a/Assets/Scripts/Roads.cs b/Assets/Scripts/Roads.cs new file mode 100644 index 0000000..6480c47 --- /dev/null +++ b/Assets/Scripts/Roads.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Roads : MonoBehaviour { + public List nodes = new List(); + public List roads = new List(); + public FlatBezierRenderer roadRenderer; + public Camera mainCamera; + private bool down = false; + public Material material; + + void Start() { + } + + private Node startNode; + + private void startRoad() { + Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, Mathf.Infinity, 1 << 6); + foreach (Node node in nodes) { + if ((hit.point - node.position).magnitude < 1.0f) { + startNode = node; + down = true; + return; + } + } + Vector3 position = new Vector3(hit.point.x, 0.0f, hit.point.z); + startNode = new Node(position, transform, material); + nodes.Add(startNode); + down = true; + } + + private void endRoad() { + Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit, Mathf.Infinity, 1 << 6); + Node endNode = null; + foreach (Node node in nodes) { + if ((hit.point - node.position).magnitude < 1.0f) { + endNode = node; + break; + } + } + if (endNode == null) { + Vector3 position = new Vector3(hit.point.x, 0.0f, hit.point.z); + endNode = new Node(position, transform, material); + nodes.Add(endNode); + } + + Road road = new Road(startNode, endNode, material); + if (!roads.Contains(road)) { + road.initialize(transform); + roads.Add(road); + startNode.roads.Add(road); + endNode.roads.Add(road); + } + startNode = null; + down = false; + } + + void Update() { + if (Input.GetAxis("Fire1") != 0.0f) { + if (!down) { + startRoad(); + } + } else { + if (down) { + endRoad(); + } + } + } +} diff --git a/Assets/Scripts/Roads.cs.meta b/Assets/Scripts/Roads.cs.meta new file mode 100644 index 0000000..f26a401 --- /dev/null +++ b/Assets/Scripts/Roads.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7635c530aa8ef31498f100f4e7465bea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: