From 7eea56f92ea4dd9867aa5d07a3d9f7984182d984 Mon Sep 17 00:00:00 2001 From: Pano Date: Mon, 16 Jan 2023 02:05:21 +0100 Subject: [PATCH 1/8] new scene --- .../packerhand/Prefabs/BinGen20.prefab | 90 +- .../packerhand/Scenes/BoxPacking001.meta | 8 + .../packerhand/Scenes/BoxPacking001.unity | 1126 ++++------------- .../BoxPacking001/NavMesh-BinGen20 1.asset | Bin 0 -> 7800 bytes .../NavMesh-BinGen20 1.asset.meta | 8 + .../BoxPacking001/NavMesh-BinGen20.asset | Bin 0 -> 8220 bytes .../BoxPacking001/NavMesh-BinGen20.asset.meta | 8 + .../NavMesh-NavMesh Surface (1).asset | Bin 0 -> 6320 bytes .../NavMesh-NavMesh Surface (1).asset.meta | 8 + .../NavMesh-NavMesh Surface 1.asset | Bin 0 -> 8616 bytes .../NavMesh-NavMesh Surface 1.asset.meta | 8 + .../NavMesh-NavMesh Surface 2.asset | Bin 0 -> 10004 bytes .../NavMesh-NavMesh Surface 2.asset.meta | 8 + .../NavMesh-NavMesh Surface 3.asset | Bin 0 -> 9392 bytes .../NavMesh-NavMesh Surface 3.asset.meta | 8 + .../NavMesh-NavMesh Surface 4.asset | Bin 0 -> 10592 bytes .../NavMesh-NavMesh Surface 4.asset.meta | 8 + .../NavMesh-NavMesh Surface XX.asset | Bin 0 -> 11172 bytes .../NavMesh-NavMesh Surface XX.asset.meta | 8 + .../NavMesh-NavMesh Surface.asset | Bin 0 -> 13684 bytes .../NavMesh-NavMesh Surface.asset.meta | 8 + .../packerhand/Scenes/NavMeshExperiment.unity | 907 +++++++++++++ .../Scenes/NavMeshExperiment.unity.meta | 7 + .../packerhand/Scripts/NavMeshTest.cs | 71 ++ .../packerhand/Scripts/NavMeshTest.cs.meta | 11 + .../packerhand/Scripts/PackerHand.cs | 24 + Assets/NavMeshComponents.meta | 8 + Assets/NavMeshComponents/Editor.meta | 9 + .../Editor/NavMeshAssetManager.cs | 334 +++++ .../Editor/NavMeshAssetManager.cs.meta | 11 + .../Editor/NavMeshComponentsEditor.asmdef | 16 + .../NavMeshComponentsEditor.asmdef.meta | 7 + .../Editor/NavMeshComponentsGUIUtility.cs | 258 ++++ .../NavMeshComponentsGUIUtility.cs.meta | 12 + .../Editor/NavMeshLinkEditor.cs | 279 ++++ .../Editor/NavMeshLinkEditor.cs.meta | 12 + .../Editor/NavMeshModifierEditor.cs | 49 + .../Editor/NavMeshModifierEditor.cs.meta | 12 + .../Editor/NavMeshModifierVolumeEditor.cs | 146 +++ .../NavMeshModifierVolumeEditor.cs.meta | 12 + .../Editor/NavMeshSurfaceEditor.cs | 400 ++++++ .../Editor/NavMeshSurfaceEditor.cs.meta | 12 + Assets/NavMeshComponents/Scripts.meta | 9 + .../Scripts/NavMeshComponents.asmdef | 12 + .../Scripts/NavMeshComponents.asmdef.meta | 7 + .../NavMeshComponents/Scripts/NavMeshLink.cs | 172 +++ .../Scripts/NavMeshLink.cs.meta | 12 + .../Scripts/NavMeshModifier.cs | 54 + .../Scripts/NavMeshModifier.cs.meta | 12 + .../Scripts/NavMeshModifierVolume.cs | 54 + .../Scripts/NavMeshModifierVolume.cs.meta | 12 + .../Scripts/NavMeshSurface.cs | 492 +++++++ .../Scripts/NavMeshSurface.cs.meta | 12 + Packages/manifest.json | 1 + Packages/packages-lock.json | 27 +- ProjectSettings/ProjectVersion.txt | 4 +- 56 files changed, 3805 insertions(+), 968 deletions(-) create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 1.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 1.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 2.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 2.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 4.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 4.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface XX.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface XX.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface.asset.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity create mode 100644 Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity.meta create mode 100644 Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs create mode 100644 Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs.meta create mode 100644 Assets/NavMeshComponents.meta create mode 100644 Assets/NavMeshComponents/Editor.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef create mode 100644 Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs.meta create mode 100644 Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs create mode 100644 Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs.meta create mode 100644 Assets/NavMeshComponents/Scripts.meta create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef.meta create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshLink.cs create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshLink.cs.meta create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshModifier.cs create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshModifier.cs.meta create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs.meta create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshSurface.cs create mode 100644 Assets/NavMeshComponents/Scripts/NavMeshSurface.cs.meta diff --git a/Assets/ML-Agents/packerhand/Prefabs/BinGen20.prefab b/Assets/ML-Agents/packerhand/Prefabs/BinGen20.prefab index d95c36a6..718cb3d1 100644 --- a/Assets/ML-Agents/packerhand/Prefabs/BinGen20.prefab +++ b/Assets/ML-Agents/packerhand/Prefabs/BinGen20.prefab @@ -11,6 +11,7 @@ GameObject: - component: {fileID: 7511180491535345431} - component: {fileID: 4609237670239678329} - component: {fileID: 276802224177794842} + - component: {fileID: 8806586284240334188} - component: {fileID: 17156946454480063} - component: {fileID: 6523280348957316031} m_Layer: 0 @@ -85,6 +86,27 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &8806586284240334188 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65816493713298024} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 0.99999994, z: 1} + m_Center: {x: 0, y: 0, z: 0} --- !u!65 &17156946454480063 BoxCollider: m_ObjectHideFlags: 0 @@ -144,7 +166,6 @@ GameObject: - component: {fileID: 5254446884636596179} - component: {fileID: 9010143478637944015} - component: {fileID: 2244940505263927238} - - component: {fileID: 6930670110535705936} - component: {fileID: 7740422511591721399} m_Layer: 0 m_Name: binright @@ -218,27 +239,6 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &6930670110535705936 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 439459821755549281} - m_Material: {fileID: 13400000, guid: 54ed79b9254e1456587c8cf3849f6dc1, type: 2} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} --- !u!54 &7740422511591721399 Rigidbody: m_ObjectHideFlags: 0 @@ -409,7 +409,6 @@ GameObject: m_Component: - component: {fileID: 7115458822026379422} - component: {fileID: 5838332295030588932} - - component: {fileID: 493568957233953711} m_Layer: 0 m_Name: BinGen20 m_TagString: goal @@ -435,7 +434,7 @@ Transform: - {fileID: 4820500487014347645} - {fileID: 2545198344545347332} m_Father: {fileID: 0} - m_RootOrder: -1 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &5838332295030588932 Rigidbody: @@ -464,27 +463,6 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 126 m_CollisionDetection: 3 ---- !u!65 &493568957233953711 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3859897800474219754} - m_Material: {fileID: 13400000, guid: 54ed79b9254e1456587c8cf3849f6dc1, type: 2} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} --- !u!1 &6055518303293011885 GameObject: m_ObjectHideFlags: 0 @@ -629,7 +607,6 @@ GameObject: - component: {fileID: 4878538411570912396} - component: {fileID: 8341273123931684850} - component: {fileID: 3874392373179878750} - - component: {fileID: 7044726047894412449} - component: {fileID: 702327118242833118} m_Layer: 0 m_Name: binbottom @@ -703,27 +680,6 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &7044726047894412449 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9119543345825551592} - m_Material: {fileID: 13400000, guid: 54ed79b9254e1456587c8cf3849f6dc1, type: 2} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} --- !u!54 &702327118242833118 Rigidbody: m_ObjectHideFlags: 0 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.meta new file mode 100644 index 00000000..d928de32 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32a0e59ff1f2d78648c59c3931c44fee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.unity b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.unity index 1986f91b..129b1f3d 100644 --- a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.unity +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001.unity @@ -123,12 +123,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &74425587 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 8077635188412443815, guid: 429cedfac06b592c3b630d41dc4a5300, - type: 3} - m_PrefabInstance: {fileID: 367256794143723777} - m_PrefabAsset: {fileID: 0} --- !u!1 &108598591 GameObject: m_ObjectHideFlags: 0 @@ -139,7 +133,6 @@ GameObject: m_Component: - component: {fileID: 108598594} - component: {fileID: 108598593} - - component: {fileID: 108598592} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -147,14 +140,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &108598592 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 108598591} - m_Enabled: 1 --- !u!20 &108598593 Camera: m_ObjectHideFlags: 0 @@ -221,7 +206,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &397705044 +--- !u!1 &431902168 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -229,112 +214,107 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 397705048} - - component: {fileID: 397705047} - - component: {fileID: 397705046} - - component: {fileID: 397705045} + - component: {fileID: 431902170} + - component: {fileID: 431902171} + - component: {fileID: 431902172} m_Layer: 0 - m_Name: Capsule (2) + m_Name: NavMesh Surface XX m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!136 &397705045 -CapsuleCollider: +--- !u!4 &431902170 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397705044} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 + m_GameObject: {fileID: 431902168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &431902171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431902168} m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Height: 2 - m_Direction: 1 - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &397705046 -MeshRenderer: + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} + m_Name: + m_EditorClassIdentifier: + nv1: {fileID: 0} +--- !u!114 &431902172 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397705044} + m_GameObject: {fileID: 431902168} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - 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 &397705047 -MeshFilter: + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f940a30f473c699b5a14a2a5922faa34, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AgentTypeID: 0 + m_CollectObjects: 0 + m_Size: {x: 10, y: 10, z: 10} + m_Center: {x: 0, y: 2, z: 0} + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_UseGeometry: 0 + m_DefaultArea: 0 + m_IgnoreNavMeshAgent: 1 + m_IgnoreNavMeshObstacle: 1 + m_OverrideTileSize: 0 + m_TileSize: 256 + m_OverrideVoxelSize: 0 + m_VoxelSize: 0.16666667 + m_NavMeshData: {fileID: 0} +--- !u!1 &1023523650 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397705044} - m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &397705048 + serializedVersion: 6 + m_Component: + - component: {fileID: 1023523651} + m_Layer: 0 + m_Name: EnvBinpack + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1023523651 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397705044} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 33.286247, y: 1.09, z: -0.7726135} + m_GameObject: {fileID: 1023523650} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1149920266690001739} + - {fileID: 2991230922353894447} + - {fileID: 1374293670} m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &460665757 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - m_PrefabInstance: {fileID: 931861565118854110} - m_PrefabAsset: {fileID: 0} ---- !u!1 &522062027 +--- !u!1 &1161835933 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -342,25 +322,25 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 522062031} - - component: {fileID: 522062030} - - component: {fileID: 522062029} - - component: {fileID: 522062028} - - component: {fileID: 522062032} + - component: {fileID: 1161835937} + - component: {fileID: 1161835936} + - component: {fileID: 1161835935} + - component: {fileID: 1161835934} + - component: {fileID: 1161835938} m_Layer: 0 - m_Name: Capsule (1) + m_Name: CubeObstacle m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!136 &522062028 -CapsuleCollider: +--- !u!65 &1161835934 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522062027} + m_GameObject: {fileID: 1161835933} m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 @@ -372,18 +352,16 @@ CapsuleCollider: m_IsTrigger: 0 m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Height: 2 - m_Direction: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &522062029 +--- !u!23 &1161835935 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522062027} + m_GameObject: {fileID: 1161835933} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -419,36 +397,36 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &522062030 +--- !u!33 &1161835936 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522062027} - m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &522062031 + m_GameObject: {fileID: 1161835933} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1161835937 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522062027} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 34.55, y: 1, z: -6.0059915} + m_GameObject: {fileID: 1161835933} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!54 &522062032 +--- !u!54 &1161835938 Rigidbody: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 522062027} + m_GameObject: {fileID: 1161835933} serializedVersion: 4 m_Mass: 1 m_Drag: 0 @@ -469,57 +447,7 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 ---- !u!1 &868628914 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 4175253719567128662, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - m_PrefabInstance: {fileID: 3839146289069967071} - m_PrefabAsset: {fileID: 0} ---- !u!1 &1023523650 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1023523651} - m_Layer: 0 - m_Name: EnvBinpack - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1023523651 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1023523650} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 684828981271533017} - - {fileID: 4405564776043660146} - - {fileID: 3839146289069967072} - - {fileID: 931861565118854111} - - {fileID: 367256794143723778} - - {fileID: 1149920266690001739} - - {fileID: 2991230922353894447} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1062051028 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3887830302607068171, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - m_PrefabInstance: {fileID: 684828981271533016} - m_PrefabAsset: {fileID: 0} ---- !u!1 &1569512142 +--- !u!1 &1374293666 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -527,26 +455,26 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1569512146} - - component: {fileID: 1569512145} - - component: {fileID: 1569512144} - - component: {fileID: 1569512143} - - component: {fileID: 1569512147} - - component: {fileID: 1569512148} + - component: {fileID: 1374293670} + - component: {fileID: 1374293669} + - component: {fileID: 1374293668} + - component: {fileID: 1374293667} + - component: {fileID: 1374293671} + - component: {fileID: 1374293672} m_Layer: 0 - m_Name: Capsule + m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!136 &1569512143 -CapsuleCollider: +--- !u!65 &1374293667 +BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} + m_GameObject: {fileID: 1374293666} m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 @@ -558,18 +486,16 @@ CapsuleCollider: m_IsTrigger: 0 m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Height: 2 - m_Direction: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1569512144 +--- !u!23 &1374293668 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} + m_GameObject: {fileID: 1374293666} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -605,49 +531,49 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1569512145 +--- !u!33 &1374293669 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} - m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1569512146 + m_GameObject: {fileID: 1374293666} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1374293670 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 32.037838, y: 1, z: -6.0059915} + m_GameObject: {fileID: 1374293666} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 + m_Father: {fileID: 1023523651} + m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1569512147 +--- !u!114 &1374293671 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} + m_GameObject: {fileID: 1374293666} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2c839968700a58dd7a600e66038ed207, type: 3} + m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} m_Name: m_EditorClassIdentifier: - c: {fileID: 0} ---- !u!54 &1569512148 + nv1: {fileID: 0} +--- !u!54 &1374293672 Rigidbody: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569512142} + m_GameObject: {fileID: 1374293666} serializedVersion: 4 m_Mass: 1 m_Drag: 0 @@ -668,12 +594,6 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 ---- !u!1 &1777371525 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2135513796032347411, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - m_PrefabInstance: {fileID: 4405564776043660145} - m_PrefabAsset: {fileID: 0} --- !u!1 &2144983755 GameObject: m_ObjectHideFlags: 0 @@ -768,7 +688,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1001 &367256794143723777 +--- !u!1001 &1149920266690001738 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -776,78 +696,134 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1023523651} m_Modifications: - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 462584989957904867, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + propertyPath: m_StaticEditorFlags + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4614877614629800144, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + propertyPath: m_StaticEditorFlags + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5008008941637850009, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + propertyPath: m_Name + value: Walls + objectReference: {fileID: 0} + - target: {fileID: 5008008941637850009, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + propertyPath: m_StaticEditorFlags + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5642163274320223620, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + propertyPath: m_StaticEditorFlags + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_RootOrder value: -1 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalPosition.x - value: 10 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalPosition.y - value: 0 + value: 2 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalPosition.z - value: 30 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8077635188412443815, guid: 429cedfac06b592c3b630d41dc4a5300, + - target: {fileID: 8572185106369171635, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} - propertyPath: m_Name - value: BinMini + propertyPath: m_StaticEditorFlags + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 429cedfac06b592c3b630d41dc4a5300, type: 3} ---- !u!4 &367256794143723778 stripped + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 5008008941637850009, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + insertIndex: -1 + addedObject: {fileID: 1149920266690001741} + m_SourcePrefab: {fileID: 100100000, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} +--- !u!4 &1149920266690001739 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1436268681984758090, guid: 429cedfac06b592c3b630d41dc4a5300, + m_CorrespondingSourceObject: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, + type: 3} + m_PrefabInstance: {fileID: 1149920266690001738} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1149920266690001740 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 5008008941637850009, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} - m_PrefabInstance: {fileID: 367256794143723777} + m_PrefabInstance: {fileID: 1149920266690001738} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1149920266690001741 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!1001 &684828981271533016 + m_GameObject: {fileID: 1149920266690001740} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1001 &2991230922353894446 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -855,538 +831,70 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1023523651} m_Modifications: - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_RootOrder value: -1 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalPosition.x - value: 8.64 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalPosition.y - value: 1.1 + value: -5 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalPosition.z - value: 1.29 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2674329426616174709, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: m_BehaviorName - value: UnitBox - objectReference: {fileID: 0} - - target: {fileID: 2674329426616174709, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: m_BrainParameters.VectorObservationSize - value: 231 - objectReference: {fileID: 0} - - target: {fileID: 2674329426616174709, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: m_BrainParameters.m_ActionSpec.BranchSizes.Array.data[0] - value: 20 - objectReference: {fileID: 0} - - target: {fileID: 3887830302607068171, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 6577048926011673485, guid: dd473843713614c80a0a782f08d547c8, type: 3} propertyPath: m_Name - value: Hand + value: Ground objectReference: {fileID: 0} - - target: {fileID: 7213985576122438206, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, + - target: {fileID: 6577048926011673485, guid: dd473843713614c80a0a782f08d547c8, type: 3} - propertyPath: MaxStep - value: 20000 - objectReference: {fileID: 0} - - target: {fileID: 7213985576122438206, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: binArea - value: - objectReference: {fileID: 460665757} - - target: {fileID: 7213985576122438206, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: binMini - value: - objectReference: {fileID: 74425587} - - target: {fileID: 7213985576122438206, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - propertyPath: boxSpawner - value: - objectReference: {fileID: 4405564776043660150} - m_RemovedComponents: - - {fileID: 2674329426616174709, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, type: 3} - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 3887830302607068171, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - insertIndex: -1 - addedObject: {fileID: 684828981271533025} - - targetCorrespondingSourceObject: {fileID: 3887830302607068171, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - insertIndex: -1 - addedObject: {fileID: 684828981271533026} - m_SourcePrefab: {fileID: 100100000, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, type: 3} ---- !u!4 &684828981271533017 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 1762547801083227235, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - m_PrefabInstance: {fileID: 684828981271533016} - m_PrefabAsset: {fileID: 0} ---- !u!114 &684828981271533025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1062051028} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} - m_Name: - m_EditorClassIdentifier: - m_BrainParameters: - VectorObservationSize: 286 - NumStackedVectorObservations: 1 - m_ActionSpec: - m_NumContinuousActions: 3 - BranchSizes: 1900000008000000 - VectorActionSize: - VectorActionDescriptions: [] - VectorActionSpaceType: 1 - hasUpgradedBrainParametersWithActionSpec: 1 - m_Model: {fileID: 0} - m_InferenceDevice: 0 - m_BehaviorType: 0 - m_BehaviorName: RegularBox - TeamId: 0 - m_UseChildSensors: 1 - m_UseChildActuators: 1 - m_DeterministicInference: 0 - m_ObservableAttributeHandling: 0 ---- !u!114 &684828981271533026 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1062051028} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3a6da8f78a394c6ab027688eab81e04d, type: 3} - m_Name: - m_EditorClassIdentifier: - debugCommandLineOverride: ---- !u!114 &684828981271533028 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7213985576122438206, guid: 2f2c1469c0f2c8453ab01d6d68f6526f, - type: 3} - m_PrefabInstance: {fileID: 684828981271533016} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1062051028} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6280f8969a359ef99f5ea05467a83f4, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &931861565118854110 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1023523651} - m_Modifications: - - target: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_Name - value: BinGen20 - objectReference: {fileID: 0} - - target: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_TagString - value: bin - objectReference: {fileID: 0} - - target: {fileID: 5838332295030588932, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_Constraints - value: 126 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_RootOrder - value: -1 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalPosition.x - value: 20 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalPosition.z - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7511180491535345431, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 493568957233953711, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 7044726047894412449, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 17156946454480063, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 6930670110535705936, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 3369138085834978376, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 586698296352753214, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 702327118242833118, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 6523280348957316031, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 7740422511591721399, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 7209750478366940760, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - - {fileID: 4333524019856516355, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - insertIndex: -1 - addedObject: {fileID: 931861565118854118} - - targetCorrespondingSourceObject: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - insertIndex: -1 - addedObject: {fileID: 931861565118854121} - - targetCorrespondingSourceObject: {fileID: 3859897800474219754, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - insertIndex: -1 - addedObject: {fileID: 931861565118854122} - m_SourcePrefab: {fileID: 100100000, guid: 0a2b7417f99f40533918dfb91b5e1c3b, type: 3} ---- !u!4 &931861565118854111 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 7115458822026379422, guid: 0a2b7417f99f40533918dfb91b5e1c3b, - type: 3} - m_PrefabInstance: {fileID: 931861565118854110} - m_PrefabAsset: {fileID: 0} ---- !u!23 &931861565118854118 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 460665757} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 0} - 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 &931861565118854121 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 460665757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 79134707a614722658f8cb7f1771048b, type: 3} - m_Name: - m_EditorClassIdentifier: - c: {fileID: 0} - agent: {fileID: 0} ---- !u!114 &931861565118854122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 460665757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 56c488833747faf61bfc525445db2df0, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &1149920266690001738 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1023523651} - m_Modifications: - - target: {fileID: 5008008941637850009, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_Name - value: Walls - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_RootOrder - value: -1 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalPosition.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, type: 3} ---- !u!4 &1149920266690001739 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 6635554544944149464, guid: f0b18d36bc8f722f8a03dfa9e03b47b8, - type: 3} - m_PrefabInstance: {fileID: 1149920266690001738} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &2991230922353894446 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1023523651} - m_Modifications: - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_RootOrder - value: -1 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalPosition.y - value: -5 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3730219908838786440, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6577048926011673485, guid: dd473843713614c80a0a782f08d547c8, - type: 3} - propertyPath: m_Name - value: Ground + propertyPath: m_StaticEditorFlags + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] @@ -1399,181 +907,3 @@ Transform: type: 3} m_PrefabInstance: {fileID: 2991230922353894446} m_PrefabAsset: {fileID: 0} ---- !u!1001 &3839146289069967071 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1023523651} - m_Modifications: - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_RootOrder - value: -1 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalPosition.x - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalPosition.y - value: 0.1 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalPosition.z - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4175253719567128662, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - propertyPath: m_Name - value: BoxArea - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 332f682ec92ced9f386b7c7cdd804402, type: 3} ---- !u!4 &3839146289069967072 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 813876212283908212, guid: 332f682ec92ced9f386b7c7cdd804402, - type: 3} - m_PrefabInstance: {fileID: 3839146289069967071} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &4405564776043660145 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1023523651} - m_Modifications: - - target: {fileID: 2135513796032347411, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_Name - value: BoxSpawner - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_RootOrder - value: -1 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalPosition.x - value: 15 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalPosition.y - value: 9 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalPosition.z - value: 10 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 2135513796032347411, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - insertIndex: -1 - addedObject: {fileID: 4405564776043660150} - m_SourcePrefab: {fileID: 100100000, guid: 5de904490f163855a821c436ec3b801c, type: 3} ---- !u!4 &4405564776043660146 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 3828964579184836022, guid: 5de904490f163855a821c436ec3b801c, - type: 3} - m_PrefabInstance: {fileID: 4405564776043660145} - m_PrefabAsset: {fileID: 0} ---- !u!114 &4405564776043660150 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1777371525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 67ef11db21792bd83834e42b9469f425, type: 3} - m_Name: - m_EditorClassIdentifier: - boxArea: {fileID: 868628914} - binArea: {fileID: 460665757} - binMini: {fileID: 74425587} - hand: {fileID: 684828981271533028} diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset new file mode 100644 index 0000000000000000000000000000000000000000..f92d34816df7cc50d0184e61b92c0f8bf724673b GIT binary patch literal 7800 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 TpYrVW)Z2sor`d<{wtW8=2=?~# literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset.meta new file mode 100644 index 00000000..d74461de --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1368859bf59691ed69d527eea0675f5c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset new file mode 100644 index 0000000000000000000000000000000000000000..1c7dcc5350c9aa12d5e9d8292e32f86668bb5e4c GIT binary patch literal 8220 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 literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset.meta new file mode 100644 index 00000000..ab40d860 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-BinGen20.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a7be6038c9d5e4cca27ecb2ce09ce70 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset new file mode 100644 index 0000000000000000000000000000000000000000..22bb1a2f5cc72f23174cccf5f10e5efff2a12846 GIT binary patch literal 6320 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 E0k8ElT>t<8 literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset.meta new file mode 100644 index 00000000..746c0582 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface (1).asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 12dd1891b7aa71ed39021bb4ee8cb6a9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 1.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 1.asset new file mode 100644 index 0000000000000000000000000000000000000000..dca38147342e7050c166336edbccf3c81e6eeeba GIT binary patch literal 8616 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 L>c#tiK~4V$Pe#Mp literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 2.asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 2.asset.meta new file mode 100644 index 00000000..58615733 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ea9b550bfd8828fa8ef8f95b7709f1b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset new file mode 100644 index 0000000000000000000000000000000000000000..e43dbb3acff465a066d2ae526b2f88fb50ef06c8 GIT binary patch literal 9392 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 literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset.meta new file mode 100644 index 00000000..cf8bfe45 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b833eb6d715efe613b98601713f0b922 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 4.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface 4.asset new file mode 100644 index 0000000000000000000000000000000000000000..fcefc478a2773d8269be4b8e82f43c725afb0c4d GIT binary patch literal 10592 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 literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface XX.asset.meta b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface XX.asset.meta new file mode 100644 index 00000000..3686d85b --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface XX.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 851a6ac9c4fa871d08962d64238ba621 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface.asset b/Assets/ML-Agents/packerhand/Scenes/BoxPacking001/NavMesh-NavMesh Surface.asset new file mode 100644 index 0000000000000000000000000000000000000000..becd27a8a10161b45b0f5e5d81cffb0d7731da2c GIT binary patch literal 13684 zcmbVRYj9oFb>3GmKe1(F5HR>pW0uUrSf=ttDOc-Yc+q zloO!PgfyfiA)#SvJef(LbsMH_#^Fa>%WXnK)O2`wlA)cHAEiT_47APg=nMDz_FC&a z?$I&R?3r`UTI*YTt-aUYd!2RebuMh@hLmf0R_Lp%@@#qCu&$1-t_@uqI!8O*2d7V; z&gB5SMey|LKl!(p-a9_~?ojg!TmE7ARMV=bAbp|UxjMpV*E$!V%W2O9{_bx%mvi5& zcfp_KT+jdsP4covd@-2*1{d&2dr7>`{S>y>LeBnh2|U1ES`Ixn!2T6r=i?F|fq=Nv z{zg3WYQNFTLKtY$ev`+8P@&fTycC{u57)V%toAvEGmU>is(*6)3sZQ`4PbtMj7c-T zi--sGA`Roqbs|2zh%<({o;Y6b<99x6Fg9lq_mQ&x_3k$G{Y_jP_mUKzb0^XFCdg@j zDW1y$+_csDZ-#u?aYN}V>3>!F4^bHeAgCZrUurYzEHrcNs43 zBWuKuVDAqoemQ`-@Lh^C&&`GJRlGd|KcM)P8Tg%wZ^*zOR{W|A{3*pd=D?Z1|48x9 zIq)OEpI5wV4xIf@DBhiczoa;GeQkW$|24(0o&)Fm>6GHv%z?B2`-@F5yiJ<;EyUkkbys@INzhm_)C1hr1;Gl_*WJGwG900if_-r z4=c_+Fqi*tD83_wH@HKnZ@vYbwZ*L|yfIOq4FX^00^FtLTw|g>yA9$b-rz9i;Ll;7 z=jV1@$??hg_)FkCA3KQ$xM{1cKXyUheB4mlOrDQlCmz8bpM`Cn58B^NJctym{`g1r z|M3)_tUp-GB+qBE{`e&E$UOWvxi_@_V0=I2@zziy=jQqI_pk8J^LIxE{-)wX8Tcv1 zKb^v*zWRmE?>C4CxM{=s<&d+(`f?BCXPVz$;@X!FtG^gujz5npiBsx=cj2G4)4mkm z=;L!5IO8+y@mAcW(f$$ixA=@e-0WHv75~I7K7|b2;xn4U#sBeP z12_MOQ%!$apJnjR{ds_RfSb13^%;l!OzSg2+&bgQ_^pI(u1_oYNnA;Mo{#_KI{%W# zsVR-$67l#?L7bew;1>Vi%D`>@-ELCBNwll*lJaIW7W;(>O?qc(r>J0iJ$$^3N>@u)lc*Smh$ zw)ML=g*W*1`y_ODe(v*lEAG;mpX2NI+Yl$?C%CQO{TaB$FG%6yKd=5jlfsk!AIQMX z|AQI0`F|*dH~9ID!9UmUcRY@pHs<$7k$Hq~Q@DH|S$_Xg25$bpoPnGFuVmmy;h+2Ci4>0UVSWA- zIM2^lQ+RTGU(3L4d{1WJHoiYd;W?jQp4ahx-Q&@1NB+)R3YGnR`D)$`4pz&X`$vk^ zQn~+NwJ=#JmL_j-6MH^Z9539|2VyW^-4DX+4VDX|`F%G{R;u~Q;R4mv)GlaOT#WIy zC-#JHCiV>EEBoEPL)Aj%j*d?&(P>1N5#2^?G~#L_t})_TBQ_avoe`ap>Ckp(XuLDD z-Wi(jgnb?Nmg(a7$j(BwTAUoKL~~1u^J9g{>aIgm434L7&yN(RD?$$xievk$Lhl?e zO%;UPI$oUE=f(>oV}-tQX-c&w@&|98o|x(#E|)5mzM{m`O%x|@FN|Rkddr2po5)X2 z=f}4e#>aOS?=HAuBSg-qdwJD}eVl^WXXw%Y;LW9dA1{>;6v`DhRW4KtA?9rpLlKjF97o7|;8ti1ms5RK8mG@Lk}$z;}c12Hy?7yW3U8jyGPc++M2YtA!Da zB$^-gT*T;>+g&JEi^D(;x;`xa^I@gIkTd{_PGBCg8s~~oiMiR!h?52dP z!5F$CYMhBZw~mf7s@sc`2P&?2x>||})cekAzD#@llN_n;jfp+%!c7C2tgDyw70ZR; zD%Kj}ou%pWu&oAqa<)Y70ybEx6jiM^w*7dZ{fojKZ{trjQTy@*5&f%DE$FBR<4S$D z?vy1)`RClLxOVsM=wkxr5C3c+{fL+pZ9sfM@^bF66KkJ*VFu;m3B21*41MqDUwg3& zdYpUoL|@kgFt%V0dK7(3hcsV-$ZlwLfeSo=8-3Du)I_V!|2)V(jVL|aa9!xyd&bNpz|^rZcI-Ov0XSx!P@svo_^_dS1R#u#$k_iy{N8u9q{}5_Q=1i`rJpa#&GV%+V;(I&%5uge=j(+WYwz1lh3~S5EjYKJ#}Hy=QrlX z3vuzu){1Kb3A8A`{h~K{?%R6hd_OdUb04DzWAxq_{nI(<(G&C$<%xBwGX$Hfl^%)F z_k!+GIq8v@zS(ErDU~0L(fdJfj_GfY(PoprOlKo#(;;p4N!xsVPEtF}e;rDnA5uWTcyb%HHPL zS&+(C^{`?&jCsXq+GPKFNSf4woKpzV%>PQa!mV=Wi_rgVdUgUo59i-T@7%fJSj~P5 z-Z0VLZH6^zhS#BoeFWaM{DSJog^gBrU%KK7i zS%0BrUkJU#+ZQ|X!-vRa&4rf8i;m1w-|})SIcMhtCfFPzbrgUZuYrmbG_F;te?EsOa49mihoD(y(|3BYk0nQMSmmo zk2-sA&&L~#ysQNK3(m2{?eo363GY#{f7Iu^I3C%f|D!%92)^ErPxgWJKjz*E$3y++ z9PNw#<>0^VPuB+cJL>22oFA|79N)Jw4*q!>;mk%?h5RvZkNkIBH}sGBe0E(7=XlBg zg|~mq*N2;9xSR#{mw5h6$7j5a-*_AUci@e6mgJf?_oDW<_`K-j{g$3@)-__E(dPV* z`S`!($A6jUuY$e5)!ZN9v=`wsn$KvD@p;SV63+jaw?FIS9q}_^e2)3}%=nDi9qP~c zc*l93d*QEx{TZKs$ri4{s*eh9C2+7xA!TdVC|NJ_dfCc1#jc>iwda=Kova+&-Qh?rMz!pI?K5{gyW!%dced_qd+H|*o3NQ} zo|tAhPv*=ka9RC%F=(kj?YmQqO8sf`9GH=Ley%tAUL?IPCOKPJb8jc9q9z z>ew7<)8<9GIcCRb`l9{*8Rxzhqs=Deahf_dckUI7Pn`Y$Iu=9HHirKKP5rSM=T61w zpO8jOD38;o(-PAsZ928|sor?)%5z*thiExmvR7HXTH{{`(hTR$H+(T@sWGDdqztD; zsV^dYJ@)@)?s732sBt`KpSGHOZ57Ic+Ww1Ul_#~B``K)KtZbKr)vvE~0>fpjtj(pD z_=~C!@)x^x?hjp-QR3{Yh0_l$i%>FYd6;3%Qd4jc2-AQf7Ycd!itWDqUwtN zS$j(jBy*CwDw^L)ybbNl^OvSt9JOYwdgTgBb!-0l-LV>9NVU!IwXn{*R@&0APA1Oz ztOaWIGV^xr{4avWQnyCBqxZS~`yg813o+tlx-00Xwl-da-p&5YT5QK_U&e>EC97*` zsImjmu<~)dLz80Ex?IcLuEpn-og_a#77UXM3Xjwg>8Ex|@F%r4d!$L=2 zdKNpepRR{RUus~{k#8oU<8#%*)S{fRI8*Ihi+>oOWw*AU z>DjXuujNh8p0)V@muHQ|5cJ?(Y&A3ajo__jCeL@Z)y&3Q4aZ-kh+9pYSAAJevES~t zg*C18-{#NQkJNv=>-RNQoacTce}(%Q?DzXM5?;o~nv=h62|ncQM|{6ubMpP}$LK%g z?MM7Je=1)Az74;g5$8Up{p~t`)^M-54)7;YMGpBqLws20$N3A-@!jXY$KyEn`H!KG z=Httn+4y!h=4;T1@Au>Xx$3v$4Z(K^ahpH=#d)5B*J3ywk?-*18}s)5-SfZ1_{Mw< z9N`5Y55c*<1z%GW@AvWE=JU4jGJeK8!te9;|0&cT_BoMw-uJ)H+mHBR{|g5BVa1sf zINx!N599s5+pPSwe-|3g{l)peulnt7+GjxG_v?B{PGS_IRzC3D7ys(2;Ts?R#?!;a z2P*aaquy%CNK1ZeVD7Tt9B51On*EkZZTl_LYDueWSoiJikvfrdpfu}5qgmIO4(lE3 z8>d+x*>8Apn%bsswAGTY-zfFtENmLhx{~@*SMrxSn-|`$0dogi4j00Ks{y$EnntNq zFQoWh;G2dtTSFi+kYWD?pz5@qpgnklmf-BqF97~pB#qwXZDaQN-v?`&s5Jzn4JR#4 zMj>~Z1^wCR((f?Q5zo;(fPLo5^|kU3<0W_Ud-ZVm{qFqt++lw<1YZLDGWcU-E)e}F zcap!tuS0VTm$~pPi@tqNcOa7OZd6yO4Ou5?&v=Ou&j$S;_TFo6n_I7b#JTtTQ$!#(); + Vector3 targetPosition = objectToMove.transform.position; + Debug.Log($"old box position =========== {objectToMove.transform.position}"); + targetPosition = targetPosition + new Vector3(10,0,0); + Debug.Log($"target position =========== {targetPosition}"); + rb.MovePosition(targetPosition); + Debug.Log($"new box position =========== {objectToMove.transform.position}"); + Debug.Log(".......................................................................... REMOVED all NavMesh data"); + + Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Box}"); + Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Capsule}"); + + // NavMeshSurface nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + // nv1.BuildNavMesh(); + // // Sample next random point & cast ray to display it + // float range = 2.0f; + // Vector3 point; + // if (RandomPoint(objectToMove.transform.position, range, out point)) + // { + // Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); + // } + } + + bool RandomPoint(Vector3 center, float range, out Vector3 result) + { + for (int i = 0; i < 3; i++) + { + Vector3 randomPoint = center + Random.insideUnitSphere * range; + NavMeshHit hit; + if (NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas)) + { + result = hit.position; + return true; + } + } + result = Vector3.zero; + return false; + } + + void Update(){ + // Remove & Rebuild the NavMesh + NavMesh.RemoveAllNavMeshData(); + nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + nv1.BuildNavMesh(); + // Sample next random point & cast ray to display it + float range = 2.0f; + Vector3 point; + GameObject objectToMove = GameObject.Find("Cube"); + if (RandomPoint(objectToMove.transform.position, range, out point)) + { + Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); + } + } + +} diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs.meta b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs.meta new file mode 100644 index 00000000..d7eaea37 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ebc7e7035ab1f459a40e39bfeb5beed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scripts/PackerHand.cs b/Assets/ML-Agents/packerhand/Scripts/PackerHand.cs index d8adb4bd..f450554b 100644 --- a/Assets/ML-Agents/packerhand/Scripts/PackerHand.cs +++ b/Assets/ML-Agents/packerhand/Scripts/PackerHand.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using UnityEngine; +using UnityEngine.AI; using Unity.MLAgents; using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; @@ -103,6 +104,29 @@ public override void Initialize() public override void OnEpisodeBegin() { + GameObject abc = GameObject.Find("BinGen20"); + NavMeshSurface nv1 = abc.GetComponent(); + // NavMesh nv2 = abc.GetComponent(); + Debug.Log($"%%%%%%%%%%%%%%%%% bin name ===== {abc.name}"); + Debug.Log($"%%%%%%%%%%%%%%%%% agenttype ===== {nv1.agentTypeID}"); + + // void FixedUpdateMesh(){ + GameObject objectToMove = GameObject.Find("MovingCube"); + Rigidbody rb = objectToMove.GetComponent(); + Vector3 targetPosition = objectToMove.transform.position; + // targetPosition = Vector3.Add(objectToMove.transform.position, new Vector3(1, 2, 3)); + Debug.Log($"old box position =========== {objectToMove.transform.position}"); + targetPosition = targetPosition + new Vector3(1,0,6); + Debug.Log($"target position =========== {targetPosition}"); + // rb.MovePosition(Vector3.Lerp(objectToMove.transform.position, targetPosition, 1.0f)); + rb.MovePosition(targetPosition); + Debug.Log($"new box position =========== {objectToMove.transform.position}"); + nv1.BuildNavMesh(); + NavMesh.CalculateTriangulation(); + // } + // FixedUpdateMesh(); + + Debug.Log("-----------------------NEW EPISODE STARTS------------------------------"); // Picks which curriculum to train diff --git a/Assets/NavMeshComponents.meta b/Assets/NavMeshComponents.meta new file mode 100644 index 00000000..3ad736b6 --- /dev/null +++ b/Assets/NavMeshComponents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3814936a5af61c649fbf3460c230107 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor.meta b/Assets/NavMeshComponents/Editor.meta new file mode 100644 index 00000000..b4e718de --- /dev/null +++ b/Assets/NavMeshComponents/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 155aa7c906ea4deccb5273e3648866fe +folderAsset: yes +timeCreated: 1477656493 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs b/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs new file mode 100644 index 00000000..f372c61b --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs @@ -0,0 +1,334 @@ +using System.Collections.Generic; +using System.IO; +using UnityEditor.Experimental.SceneManagement; +using UnityEditor.SceneManagement; +using UnityEngine.AI; +using UnityEngine; + +namespace UnityEditor.AI +{ + public class NavMeshAssetManager : ScriptableSingleton + { + internal struct AsyncBakeOperation + { + public NavMeshSurface surface; + public NavMeshData bakeData; + public AsyncOperation bakeOperation; + } + + List m_BakeOperations = new List(); + internal List GetBakeOperations() { return m_BakeOperations; } + + struct SavedPrefabNavMeshData + { + public NavMeshSurface surface; + public NavMeshData navMeshData; + } + + List m_PrefabNavMeshDataAssets = new List(); + + static string GetAndEnsureTargetPath(NavMeshSurface surface) + { + // Create directory for the asset if it does not exist yet. + var activeScenePath = surface.gameObject.scene.path; + + var targetPath = "Assets"; + if (!string.IsNullOrEmpty(activeScenePath)) + { + targetPath = Path.Combine(Path.GetDirectoryName(activeScenePath), Path.GetFileNameWithoutExtension(activeScenePath)); + } + else + { + var prefabStage = PrefabStageUtility.GetPrefabStage(surface.gameObject); + var isPartOfPrefab = prefabStage != null && prefabStage.IsPartOfPrefabContents(surface.gameObject); + + if (isPartOfPrefab) + { +#if UNITY_2020_1_OR_NEWER + var assetPath = prefabStage.assetPath; +#else + var assetPath = prefabStage.prefabAssetPath; +#endif + if (!string.IsNullOrEmpty(assetPath)) + { + var prefabDirectoryName = Path.GetDirectoryName(assetPath); + if (!string.IsNullOrEmpty(prefabDirectoryName)) + targetPath = prefabDirectoryName; + } + } + } + if (!Directory.Exists(targetPath)) + Directory.CreateDirectory(targetPath); + return targetPath; + } + + static void CreateNavMeshAsset(NavMeshSurface surface) + { + var targetPath = GetAndEnsureTargetPath(surface); + + var combinedAssetPath = Path.Combine(targetPath, "NavMesh-" + surface.name + ".asset"); + combinedAssetPath = AssetDatabase.GenerateUniqueAssetPath(combinedAssetPath); + AssetDatabase.CreateAsset(surface.navMeshData, combinedAssetPath); + } + + NavMeshData GetNavMeshAssetToDelete(NavMeshSurface navSurface) + { + if (PrefabUtility.IsPartOfPrefabInstance(navSurface) && !PrefabUtility.IsPartOfModelPrefab(navSurface)) + { + // Don't allow deleting the asset belonging to the prefab parent + var parentSurface = PrefabUtility.GetCorrespondingObjectFromSource(navSurface) as NavMeshSurface; + if (parentSurface && navSurface.navMeshData == parentSurface.navMeshData) + return null; + } + + // Do not delete the NavMeshData asset referenced from a prefab until the prefab is saved + var prefabStage = PrefabStageUtility.GetPrefabStage(navSurface.gameObject); + var isPartOfPrefab = prefabStage != null && prefabStage.IsPartOfPrefabContents(navSurface.gameObject); + if (isPartOfPrefab && IsCurrentPrefabNavMeshDataStored(navSurface)) + return null; + + return navSurface.navMeshData; + } + + void ClearSurface(NavMeshSurface navSurface) + { + var hasNavMeshData = navSurface.navMeshData != null; + StoreNavMeshDataIfInPrefab(navSurface); + + var assetToDelete = GetNavMeshAssetToDelete(navSurface); + navSurface.RemoveData(); + + if (hasNavMeshData) + { + SetNavMeshData(navSurface, null); + EditorSceneManager.MarkSceneDirty(navSurface.gameObject.scene); + } + + if (assetToDelete) + AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(assetToDelete)); + } + + public void StartBakingSurfaces(UnityEngine.Object[] surfaces) + { + // Remove first to avoid double registration of the callback + EditorApplication.update -= UpdateAsyncBuildOperations; + EditorApplication.update += UpdateAsyncBuildOperations; + + foreach (NavMeshSurface surf in surfaces) + { + StoreNavMeshDataIfInPrefab(surf); + + var oper = new AsyncBakeOperation(); + + oper.bakeData = InitializeBakeData(surf); + oper.bakeOperation = surf.UpdateNavMesh(oper.bakeData); + oper.surface = surf; + + m_BakeOperations.Add(oper); + } + } + + static NavMeshData InitializeBakeData(NavMeshSurface surface) + { + var emptySources = new List(); + var emptyBounds = new Bounds(); + return UnityEngine.AI.NavMeshBuilder.BuildNavMeshData(surface.GetBuildSettings(), emptySources, emptyBounds + , surface.transform.position, surface.transform.rotation); + } + + void UpdateAsyncBuildOperations() + { + foreach (var oper in m_BakeOperations) + { + if (oper.surface == null || oper.bakeOperation == null) + continue; + + if (oper.bakeOperation.isDone) + { + var surface = oper.surface; + var delete = GetNavMeshAssetToDelete(surface); + if (delete != null) + AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(delete)); + + surface.RemoveData(); + SetNavMeshData(surface, oper.bakeData); + + if (surface.isActiveAndEnabled) + surface.AddData(); + CreateNavMeshAsset(surface); + EditorSceneManager.MarkSceneDirty(surface.gameObject.scene); + } + } + m_BakeOperations.RemoveAll(o => o.bakeOperation == null || o.bakeOperation.isDone); + if (m_BakeOperations.Count == 0) + EditorApplication.update -= UpdateAsyncBuildOperations; + } + + public bool IsSurfaceBaking(NavMeshSurface surface) + { + if (surface == null) + return false; + + foreach (var oper in m_BakeOperations) + { + if (oper.surface == null || oper.bakeOperation == null) + continue; + + if (oper.surface == surface) + return true; + } + + return false; + } + + public void ClearSurfaces(UnityEngine.Object[] surfaces) + { + foreach (NavMeshSurface s in surfaces) + ClearSurface(s); + } + + static void SetNavMeshData(NavMeshSurface navSurface, NavMeshData navMeshData) + { + var so = new SerializedObject(navSurface); + var navMeshDataProperty = so.FindProperty("m_NavMeshData"); + navMeshDataProperty.objectReferenceValue = navMeshData; + so.ApplyModifiedPropertiesWithoutUndo(); + } + + void StoreNavMeshDataIfInPrefab(NavMeshSurface surfaceToStore) + { + var prefabStage = PrefabStageUtility.GetPrefabStage(surfaceToStore.gameObject); + var isPartOfPrefab = prefabStage != null && prefabStage.IsPartOfPrefabContents(surfaceToStore.gameObject); + if (!isPartOfPrefab) + return; + + // check if data has already been stored for this surface + foreach (var storedAssetInfo in m_PrefabNavMeshDataAssets) + if (storedAssetInfo.surface == surfaceToStore) + return; + + if (m_PrefabNavMeshDataAssets.Count == 0) + { + PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces; + PrefabStage.prefabSaving += DeleteStoredNavMeshDataAssetsForOwnedSurfaces; + + PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges; + PrefabStage.prefabStageClosing += ForgetUnsavedNavMeshDataChanges; + } + + var isDataOwner = true; + if (PrefabUtility.IsPartOfPrefabInstance(surfaceToStore) && !PrefabUtility.IsPartOfModelPrefab(surfaceToStore)) + { + var basePrefabSurface = PrefabUtility.GetCorrespondingObjectFromSource(surfaceToStore) as NavMeshSurface; + isDataOwner = basePrefabSurface == null || surfaceToStore.navMeshData != basePrefabSurface.navMeshData; + } + m_PrefabNavMeshDataAssets.Add(new SavedPrefabNavMeshData { surface = surfaceToStore, navMeshData = isDataOwner ? surfaceToStore.navMeshData : null }); + } + + bool IsCurrentPrefabNavMeshDataStored(NavMeshSurface surface) + { + if (surface == null) + return false; + + foreach (var storedAssetInfo in m_PrefabNavMeshDataAssets) + { + if (storedAssetInfo.surface == surface) + return storedAssetInfo.navMeshData == surface.navMeshData; + } + + return false; + } + + void DeleteStoredNavMeshDataAssetsForOwnedSurfaces(GameObject gameObjectInPrefab) + { + // Debug.LogFormat("DeleteStoredNavMeshDataAsset() when saving prefab {0}", gameObjectInPrefab.name); + + var surfaces = gameObjectInPrefab.GetComponentsInChildren(true); + foreach (var surface in surfaces) + DeleteStoredPrefabNavMeshDataAsset(surface); + } + + void DeleteStoredPrefabNavMeshDataAsset(NavMeshSurface surface) + { + for (var i = m_PrefabNavMeshDataAssets.Count - 1; i >= 0; i--) + { + var storedAssetInfo = m_PrefabNavMeshDataAssets[i]; + if (storedAssetInfo.surface == surface) + { + var storedNavMeshData = storedAssetInfo.navMeshData; + if (storedNavMeshData != null && storedNavMeshData != surface.navMeshData) + { + var assetPath = AssetDatabase.GetAssetPath(storedNavMeshData); + AssetDatabase.DeleteAsset(assetPath); + } + + m_PrefabNavMeshDataAssets.RemoveAt(i); + break; + } + } + + if (m_PrefabNavMeshDataAssets.Count == 0) + { + PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces; + PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges; + } + } + + void ForgetUnsavedNavMeshDataChanges(PrefabStage prefabStage) + { + // Debug.Log("On prefab closing - forget about this object's surfaces and stop caring about prefab saving"); + + if (prefabStage == null) + return; + + var allSurfacesInPrefab = prefabStage.prefabContentsRoot.GetComponentsInChildren(true); + NavMeshSurface surfaceInPrefab = null; + var index = 0; + do + { + if (allSurfacesInPrefab.Length > 0) + surfaceInPrefab = allSurfacesInPrefab[index]; + + for (var i = m_PrefabNavMeshDataAssets.Count - 1; i >= 0; i--) + { + var storedPrefabInfo = m_PrefabNavMeshDataAssets[i]; + if (storedPrefabInfo.surface == null) + { + // Debug.LogFormat("A surface from the prefab got deleted after it has baked a new NavMesh but it hasn't saved it. Now the unsaved asset gets deleted. ({0})", storedPrefabInfo.navMeshData); + + // surface got deleted, thus delete its initial NavMeshData asset + if (storedPrefabInfo.navMeshData != null) + { + var assetPath = AssetDatabase.GetAssetPath(storedPrefabInfo.navMeshData); + AssetDatabase.DeleteAsset(assetPath); + } + + m_PrefabNavMeshDataAssets.RemoveAt(i); + } + else if (surfaceInPrefab != null && storedPrefabInfo.surface == surfaceInPrefab) + { + //Debug.LogFormat("The surface {0} from the prefab was storing the original navmesh data and now will be forgotten", surfaceInPrefab); + + var baseSurface = PrefabUtility.GetCorrespondingObjectFromSource(surfaceInPrefab) as NavMeshSurface; + if (baseSurface == null || surfaceInPrefab.navMeshData != baseSurface.navMeshData) + { + var assetPath = AssetDatabase.GetAssetPath(surfaceInPrefab.navMeshData); + AssetDatabase.DeleteAsset(assetPath); + + //Debug.LogFormat("The surface {0} from the prefab has baked new NavMeshData but did not save this change so the asset has been now deleted. ({1})", + // surfaceInPrefab, assetPath); + } + + m_PrefabNavMeshDataAssets.RemoveAt(i); + } + } + } while (++index < allSurfacesInPrefab.Length); + + if (m_PrefabNavMeshDataAssets.Count == 0) + { + PrefabStage.prefabSaving -= DeleteStoredNavMeshDataAssetsForOwnedSurfaces; + PrefabStage.prefabStageClosing -= ForgetUnsavedNavMeshDataChanges; + } + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs.meta new file mode 100644 index 00000000..939046dc --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshAssetManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d8ef76a7d5f3bdc8973a2a4322a5d19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef b/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef new file mode 100644 index 00000000..3c9827e7 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "NavMeshComponentsEditor", + "references": [ + "NavMeshComponents" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef.meta b/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef.meta new file mode 100644 index 00000000..d78b0a62 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshComponentsEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 791d5b8cb189afa9baae7718c948f8db +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs b/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs new file mode 100644 index 00000000..0d3a676b --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs @@ -0,0 +1,258 @@ +using UnityEngine; +using UnityEngine.AI; + +namespace UnityEditor.AI +{ + public static class NavMeshComponentsGUIUtility + { + public static void AreaPopup(string labelName, SerializedProperty areaProperty) + { + var areaIndex = -1; + var areaNames = GameObjectUtility.GetNavMeshAreaNames(); + for (var i = 0; i < areaNames.Length; i++) + { + var areaValue = GameObjectUtility.GetNavMeshAreaFromName(areaNames[i]); + if (areaValue == areaProperty.intValue) + areaIndex = i; + } + ArrayUtility.Add(ref areaNames, ""); + ArrayUtility.Add(ref areaNames, "Open Area Settings..."); + + var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + EditorGUI.BeginProperty(rect, GUIContent.none, areaProperty); + + EditorGUI.BeginChangeCheck(); + areaIndex = EditorGUI.Popup(rect, labelName, areaIndex, areaNames); + + if (EditorGUI.EndChangeCheck()) + { + if (areaIndex >= 0 && areaIndex < areaNames.Length - 2) + areaProperty.intValue = GameObjectUtility.GetNavMeshAreaFromName(areaNames[areaIndex]); + else if (areaIndex == areaNames.Length - 1) + NavMeshEditorHelpers.OpenAreaSettings(); + } + + EditorGUI.EndProperty(); + } + + public static void AgentTypePopup(string labelName, SerializedProperty agentTypeID) + { + var index = -1; + var count = NavMesh.GetSettingsCount(); + var agentTypeNames = new string[count + 2]; + for (var i = 0; i < count; i++) + { + var id = NavMesh.GetSettingsByIndex(i).agentTypeID; + var name = NavMesh.GetSettingsNameFromID(id); + agentTypeNames[i] = name; + if (id == agentTypeID.intValue) + index = i; + } + agentTypeNames[count] = ""; + agentTypeNames[count + 1] = "Open Agent Settings..."; + + bool validAgentType = index != -1; + if (!validAgentType) + { + EditorGUILayout.HelpBox("Agent Type invalid.", MessageType.Warning); + } + + var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + EditorGUI.BeginProperty(rect, GUIContent.none, agentTypeID); + + EditorGUI.BeginChangeCheck(); + index = EditorGUI.Popup(rect, labelName, index, agentTypeNames); + if (EditorGUI.EndChangeCheck()) + { + if (index >= 0 && index < count) + { + var id = NavMesh.GetSettingsByIndex(index).agentTypeID; + agentTypeID.intValue = id; + } + else if (index == count + 1) + { + NavMeshEditorHelpers.OpenAgentSettings(-1); + } + } + + EditorGUI.EndProperty(); + } + + // Agent mask is a set (internally array/list) of agentTypeIDs. + // It is used to describe which agents modifiers apply to. + // There is a special case of "None" which is an empty array. + // There is a special case of "All" which is an array of length 1, and value of -1. + public static void AgentMaskPopup(string labelName, SerializedProperty agentMask) + { + // Contents of the dropdown box. + string popupContent = ""; + + if (agentMask.hasMultipleDifferentValues) + popupContent = "\u2014"; + else + popupContent = GetAgentMaskLabelName(agentMask); + + var content = new GUIContent(popupContent); + var popupRect = GUILayoutUtility.GetRect(content, EditorStyles.popup); + + EditorGUI.BeginProperty(popupRect, GUIContent.none, agentMask); + popupRect = EditorGUI.PrefixLabel(popupRect, 0, new GUIContent(labelName)); + bool pressed = GUI.Button(popupRect, content, EditorStyles.popup); + + if (pressed) + { + var show = !agentMask.hasMultipleDifferentValues; + var showNone = show && agentMask.arraySize == 0; + var showAll = show && IsAll(agentMask); + + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("None"), showNone, SetAgentMaskNone, agentMask); + menu.AddItem(new GUIContent("All"), showAll, SetAgentMaskAll, agentMask); + menu.AddSeparator(""); + + var count = NavMesh.GetSettingsCount(); + for (var i = 0; i < count; i++) + { + var id = NavMesh.GetSettingsByIndex(i).agentTypeID; + var sname = NavMesh.GetSettingsNameFromID(id); + + var showSelected = show && AgentMaskHasSelectedAgentTypeID(agentMask, id); + var userData = new object[] { agentMask, id, !showSelected }; + menu.AddItem(new GUIContent(sname), showSelected, ToggleAgentMaskItem, userData); + } + + menu.DropDown(popupRect); + } + + EditorGUI.EndProperty(); + } + + public static GameObject CreateAndSelectGameObject(string suggestedName, GameObject parent) + { + var parentTransform = parent != null ? parent.transform : null; + var uniqueName = GameObjectUtility.GetUniqueNameForSibling(parentTransform, suggestedName); + var child = new GameObject(uniqueName); + + Undo.RegisterCreatedObjectUndo(child, "Create " + uniqueName); + if (parentTransform != null) + Undo.SetTransformParent(child.transform, parentTransform, "Parent " + uniqueName); + + Selection.activeGameObject = child; + + return child; + } + + static bool IsAll(SerializedProperty agentMask) + { + return agentMask.arraySize == 1 && agentMask.GetArrayElementAtIndex(0).intValue == -1; + } + + static void ToggleAgentMaskItem(object userData) + { + var args = (object[])userData; + var agentMask = (SerializedProperty)args[0]; + var agentTypeID = (int)args[1]; + var value = (bool)args[2]; + + ToggleAgentMaskItem(agentMask, agentTypeID, value); + } + + static void ToggleAgentMaskItem(SerializedProperty agentMask, int agentTypeID, bool value) + { + if (agentMask.hasMultipleDifferentValues) + { + agentMask.ClearArray(); + agentMask.serializedObject.ApplyModifiedProperties(); + } + + // Find which index this agent type is in the agentMask array. + int idx = -1; + for (var j = 0; j < agentMask.arraySize; j++) + { + var elem = agentMask.GetArrayElementAtIndex(j); + if (elem.intValue == agentTypeID) + idx = j; + } + + // Handle "All" special case. + if (IsAll(agentMask)) + { + agentMask.DeleteArrayElementAtIndex(0); + } + + // Toggle value. + if (value) + { + if (idx == -1) + { + agentMask.InsertArrayElementAtIndex(agentMask.arraySize); + agentMask.GetArrayElementAtIndex(agentMask.arraySize - 1).intValue = agentTypeID; + } + } + else + { + if (idx != -1) + { + agentMask.DeleteArrayElementAtIndex(idx); + } + } + + agentMask.serializedObject.ApplyModifiedProperties(); + } + + static void SetAgentMaskNone(object data) + { + var agentMask = (SerializedProperty)data; + agentMask.ClearArray(); + agentMask.serializedObject.ApplyModifiedProperties(); + } + + static void SetAgentMaskAll(object data) + { + var agentMask = (SerializedProperty)data; + agentMask.ClearArray(); + agentMask.InsertArrayElementAtIndex(0); + agentMask.GetArrayElementAtIndex(0).intValue = -1; + agentMask.serializedObject.ApplyModifiedProperties(); + } + + static string GetAgentMaskLabelName(SerializedProperty agentMask) + { + if (agentMask.arraySize == 0) + return "None"; + + if (IsAll(agentMask)) + return "All"; + + if (agentMask.arraySize <= 3) + { + var labelName = ""; + for (var j = 0; j < agentMask.arraySize; j++) + { + var elem = agentMask.GetArrayElementAtIndex(j); + var settingsName = NavMesh.GetSettingsNameFromID(elem.intValue); + if (string.IsNullOrEmpty(settingsName)) + continue; + + if (labelName.Length > 0) + labelName += ", "; + labelName += settingsName; + } + return labelName; + } + + return "Mixed..."; + } + + static bool AgentMaskHasSelectedAgentTypeID(SerializedProperty agentMask, int agentTypeID) + { + for (var j = 0; j < agentMask.arraySize; j++) + { + var elem = agentMask.GetArrayElementAtIndex(j); + if (elem.intValue == agentTypeID) + return true; + } + return false; + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs.meta new file mode 100644 index 00000000..51599b85 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshComponentsGUIUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3d3c0dbd2f2a4a59f942cbba05ef6da6 +timeCreated: 1480524815 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs b/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs new file mode 100644 index 00000000..cc4941b5 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs @@ -0,0 +1,279 @@ +using UnityEngine; +using UnityEngine.AI; + +namespace UnityEditor.AI +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(NavMeshLink))] + class NavMeshLinkEditor : Editor + { + SerializedProperty m_AgentTypeID; + SerializedProperty m_Area; + SerializedProperty m_CostModifier; + SerializedProperty m_AutoUpdatePosition; + SerializedProperty m_Bidirectional; + SerializedProperty m_EndPoint; + SerializedProperty m_StartPoint; + SerializedProperty m_Width; + + static int s_SelectedID; + static int s_SelectedPoint = -1; + + static Color s_HandleColor = new Color(255f, 167f, 39f, 210f) / 255; + static Color s_HandleColorDisabled = new Color(255f * 0.75f, 167f * 0.75f, 39f * 0.75f, 100f) / 255; + + void OnEnable() + { + m_AgentTypeID = serializedObject.FindProperty("m_AgentTypeID"); + m_Area = serializedObject.FindProperty("m_Area"); + m_CostModifier = serializedObject.FindProperty("m_CostModifier"); + m_AutoUpdatePosition = serializedObject.FindProperty("m_AutoUpdatePosition"); + m_Bidirectional = serializedObject.FindProperty("m_Bidirectional"); + m_EndPoint = serializedObject.FindProperty("m_EndPoint"); + m_StartPoint = serializedObject.FindProperty("m_StartPoint"); + m_Width = serializedObject.FindProperty("m_Width"); + + s_SelectedID = 0; + s_SelectedPoint = -1; + + NavMeshVisualizationSettings.showNavigation++; + } + + void OnDisable() + { + NavMeshVisualizationSettings.showNavigation--; + } + + static Matrix4x4 UnscaledLocalToWorldMatrix(Transform t) + { + return Matrix4x4.TRS(t.position, t.rotation, Vector3.one); + } + + void AlignTransformToEndPoints(NavMeshLink navLink) + { + var mat = UnscaledLocalToWorldMatrix(navLink.transform); + + var worldStartPt = mat.MultiplyPoint(navLink.startPoint); + var worldEndPt = mat.MultiplyPoint(navLink.endPoint); + + var forward = worldEndPt - worldStartPt; + var up = navLink.transform.up; + + // Flatten + forward -= Vector3.Dot(up, forward) * up; + + var transform = navLink.transform; + transform.rotation = Quaternion.LookRotation(forward, up); + transform.position = (worldEndPt + worldStartPt) * 0.5f; + transform.localScale = Vector3.one; + + navLink.startPoint = transform.InverseTransformPoint(worldStartPt); + navLink.endPoint = transform.InverseTransformPoint(worldEndPt); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + NavMeshComponentsGUIUtility.AgentTypePopup("Agent Type", m_AgentTypeID); + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_StartPoint); + EditorGUILayout.PropertyField(m_EndPoint); + + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIUtility.labelWidth); + if (GUILayout.Button("Swap")) + { + foreach (NavMeshLink navLink in targets) + { + var tmp = navLink.startPoint; + navLink.startPoint = navLink.endPoint; + navLink.endPoint = tmp; + } + SceneView.RepaintAll(); + } + if (GUILayout.Button("Align Transform")) + { + foreach (NavMeshLink navLink in targets) + { + Undo.RecordObject(navLink.transform, "Align Transform to End Points"); + Undo.RecordObject(navLink, "Align Transform to End Points"); + AlignTransformToEndPoints(navLink); + } + SceneView.RepaintAll(); + } + GUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_Width); + EditorGUILayout.PropertyField(m_CostModifier); + EditorGUILayout.PropertyField(m_AutoUpdatePosition); + EditorGUILayout.PropertyField(m_Bidirectional); + + NavMeshComponentsGUIUtility.AreaPopup("Area Type", m_Area); + + serializedObject.ApplyModifiedProperties(); + + EditorGUILayout.Space(); + } + + static Vector3 CalcLinkRight(NavMeshLink navLink) + { + var dir = navLink.endPoint - navLink.startPoint; + return (new Vector3(-dir.z, 0.0f, dir.x)).normalized; + } + + static void DrawLink(NavMeshLink navLink) + { + var right = CalcLinkRight(navLink); + var rad = navLink.width * 0.5f; + + Gizmos.DrawLine(navLink.startPoint - right * rad, navLink.startPoint + right * rad); + Gizmos.DrawLine(navLink.endPoint - right * rad, navLink.endPoint + right * rad); + Gizmos.DrawLine(navLink.startPoint - right * rad, navLink.endPoint - right * rad); + Gizmos.DrawLine(navLink.startPoint + right * rad, navLink.endPoint + right * rad); + } + + [DrawGizmo(GizmoType.Selected | GizmoType.Active | GizmoType.Pickable)] + static void RenderBoxGizmo(NavMeshLink navLink, GizmoType gizmoType) + { + if (!EditorApplication.isPlaying) + navLink.UpdateLink(); + + var color = s_HandleColor; + if (!navLink.enabled) + color = s_HandleColorDisabled; + + var oldColor = Gizmos.color; + var oldMatrix = Gizmos.matrix; + + Gizmos.matrix = UnscaledLocalToWorldMatrix(navLink.transform); + + Gizmos.color = color; + DrawLink(navLink); + + Gizmos.matrix = oldMatrix; + Gizmos.color = oldColor; + + Gizmos.DrawIcon(navLink.transform.position, "NavMeshLink Icon", true); + } + + [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.Pickable)] + static void RenderBoxGizmoNotSelected(NavMeshLink navLink, GizmoType gizmoType) + { + if (NavMeshVisualizationSettings.showNavigation > 0) + { + var color = s_HandleColor; + if (!navLink.enabled) + color = s_HandleColorDisabled; + + var oldColor = Gizmos.color; + var oldMatrix = Gizmos.matrix; + + Gizmos.matrix = UnscaledLocalToWorldMatrix(navLink.transform); + + Gizmos.color = color; + DrawLink(navLink); + + Gizmos.matrix = oldMatrix; + Gizmos.color = oldColor; + } + + Gizmos.DrawIcon(navLink.transform.position, "NavMeshLink Icon", true); + } + + public void OnSceneGUI() + { + var navLink = (NavMeshLink)target; + if (!navLink.enabled) + return; + + var mat = UnscaledLocalToWorldMatrix(navLink.transform); + + var startPt = mat.MultiplyPoint(navLink.startPoint); + var endPt = mat.MultiplyPoint(navLink.endPoint); + var midPt = Vector3.Lerp(startPt, endPt, 0.35f); + var startSize = HandleUtility.GetHandleSize(startPt); + var endSize = HandleUtility.GetHandleSize(endPt); + var midSize = HandleUtility.GetHandleSize(midPt); + + var zup = Quaternion.FromToRotation(Vector3.forward, Vector3.up); + var right = mat.MultiplyVector(CalcLinkRight(navLink)); + + var oldColor = Handles.color; + Handles.color = s_HandleColor; + + Vector3 pos; + + if (navLink.GetInstanceID() == s_SelectedID && s_SelectedPoint == 0) + { + EditorGUI.BeginChangeCheck(); + Handles.CubeHandleCap(0, startPt, zup, 0.1f * startSize, Event.current.type); + pos = Handles.PositionHandle(startPt, navLink.transform.rotation); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(navLink, "Move link point"); + navLink.startPoint = mat.inverse.MultiplyPoint(pos); + } + } + else + { + if (Handles.Button(startPt, zup, 0.1f * startSize, 0.1f * startSize, Handles.CubeHandleCap)) + { + s_SelectedPoint = 0; + s_SelectedID = navLink.GetInstanceID(); + } + } + + if (navLink.GetInstanceID() == s_SelectedID && s_SelectedPoint == 1) + { + EditorGUI.BeginChangeCheck(); + Handles.CubeHandleCap(0, endPt, zup, 0.1f * startSize, Event.current.type); + pos = Handles.PositionHandle(endPt, navLink.transform.rotation); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(navLink, "Move link point"); + navLink.endPoint = mat.inverse.MultiplyPoint(pos); + } + } + else + { + if (Handles.Button(endPt, zup, 0.1f * endSize, 0.1f * endSize, Handles.CubeHandleCap)) + { + s_SelectedPoint = 1; + s_SelectedID = navLink.GetInstanceID(); + } + } + + EditorGUI.BeginChangeCheck(); + pos = Handles.Slider(midPt + right * navLink.width * 0.5f, right, midSize * 0.03f, Handles.DotHandleCap, 0); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(navLink, "Adjust link width"); + navLink.width = Mathf.Max(0.0f, 2.0f * Vector3.Dot(right, (pos - midPt))); + } + + EditorGUI.BeginChangeCheck(); + pos = Handles.Slider(midPt - right * navLink.width * 0.5f, -right, midSize * 0.03f, Handles.DotHandleCap, 0); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(navLink, "Adjust link width"); + navLink.width = Mathf.Max(0.0f, 2.0f * Vector3.Dot(-right, (pos - midPt))); + } + + Handles.color = oldColor; + } + + [MenuItem("GameObject/AI/NavMesh Link", false, 2002)] + static public void CreateNavMeshLink(MenuCommand menuCommand) + { + var parent = menuCommand.context as GameObject; + GameObject go = NavMeshComponentsGUIUtility.CreateAndSelectGameObject("NavMesh Link", parent); + go.AddComponent(); + var view = SceneView.lastActiveSceneView; + if (view != null) + view.MoveToView(go.transform); + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs.meta new file mode 100644 index 00000000..ca7fe860 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 28665473aa1e6478187b69dcdd4ff601 +timeCreated: 1477036743 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs b/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs new file mode 100644 index 00000000..a2c636ca --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs @@ -0,0 +1,49 @@ +using UnityEngine.AI; + +namespace UnityEditor.AI +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(NavMeshModifier))] + class NavMeshModifierEditor : Editor + { + SerializedProperty m_AffectedAgents; + SerializedProperty m_Area; + SerializedProperty m_IgnoreFromBuild; + SerializedProperty m_OverrideArea; + + void OnEnable() + { + m_AffectedAgents = serializedObject.FindProperty("m_AffectedAgents"); + m_Area = serializedObject.FindProperty("m_Area"); + m_IgnoreFromBuild = serializedObject.FindProperty("m_IgnoreFromBuild"); + m_OverrideArea = serializedObject.FindProperty("m_OverrideArea"); + + NavMeshVisualizationSettings.showNavigation++; + } + + void OnDisable() + { + NavMeshVisualizationSettings.showNavigation--; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.PropertyField(m_IgnoreFromBuild); + + EditorGUILayout.PropertyField(m_OverrideArea); + if (m_OverrideArea.boolValue) + { + EditorGUI.indentLevel++; + NavMeshComponentsGUIUtility.AreaPopup("Area Type", m_Area); + EditorGUI.indentLevel--; + } + + NavMeshComponentsGUIUtility.AgentMaskPopup("Affected Agents", m_AffectedAgents); + EditorGUILayout.Space(); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs.meta new file mode 100644 index 00000000..e45332e0 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 421f20c0fba09fcbe9e8da4ca834b0ba +timeCreated: 1477036742 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs b/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs new file mode 100644 index 00000000..c8f1778f --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs @@ -0,0 +1,146 @@ +using UnityEditor.IMGUI.Controls; +using UnityEditorInternal; +using UnityEngine.AI; +using UnityEngine; + +namespace UnityEditor.AI +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(NavMeshModifierVolume))] + class NavMeshModifierVolumeEditor : Editor + { + SerializedProperty m_AffectedAgents; + SerializedProperty m_Area; + SerializedProperty m_Center; + SerializedProperty m_Size; + + static Color s_HandleColor = new Color(187f, 138f, 240f, 210f) / 255; + static Color s_HandleColorDisabled = new Color(187f * 0.75f, 138f * 0.75f, 240f * 0.75f, 100f) / 255; + + BoxBoundsHandle m_BoundsHandle = new BoxBoundsHandle(); + + bool editingCollider + { + get { return EditMode.editMode == EditMode.SceneViewEditMode.Collider && EditMode.IsOwner(this); } + } + + void OnEnable() + { + m_AffectedAgents = serializedObject.FindProperty("m_AffectedAgents"); + m_Area = serializedObject.FindProperty("m_Area"); + m_Center = serializedObject.FindProperty("m_Center"); + m_Size = serializedObject.FindProperty("m_Size"); + + NavMeshVisualizationSettings.showNavigation++; + } + + void OnDisable() + { + NavMeshVisualizationSettings.showNavigation--; + } + + Bounds GetBounds() + { + var navModifier = (NavMeshModifierVolume)target; + return new Bounds(navModifier.transform.position, navModifier.size); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditMode.DoEditModeInspectorModeButton(EditMode.SceneViewEditMode.Collider, "Edit Volume", + EditorGUIUtility.IconContent("EditCollider"), GetBounds, this); + + EditorGUILayout.PropertyField(m_Size); + EditorGUILayout.PropertyField(m_Center); + + NavMeshComponentsGUIUtility.AreaPopup("Area Type", m_Area); + NavMeshComponentsGUIUtility.AgentMaskPopup("Affected Agents", m_AffectedAgents); + EditorGUILayout.Space(); + + serializedObject.ApplyModifiedProperties(); + } + + [DrawGizmo(GizmoType.Selected | GizmoType.Active)] + static void RenderBoxGizmo(NavMeshModifierVolume navModifier, GizmoType gizmoType) + { + var color = navModifier.enabled ? s_HandleColor : s_HandleColorDisabled; + var colorTrans = new Color(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, color.a * 0.15f); + + var oldColor = Gizmos.color; + var oldMatrix = Gizmos.matrix; + + Gizmos.matrix = navModifier.transform.localToWorldMatrix; + + Gizmos.color = colorTrans; + Gizmos.DrawCube(navModifier.center, navModifier.size); + + Gizmos.color = color; + Gizmos.DrawWireCube(navModifier.center, navModifier.size); + + Gizmos.matrix = oldMatrix; + Gizmos.color = oldColor; + + Gizmos.DrawIcon(navModifier.transform.position, "NavMeshModifierVolume Icon", true); + } + + [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.Pickable)] + static void RenderBoxGizmoNotSelected(NavMeshModifierVolume navModifier, GizmoType gizmoType) + { + if (NavMeshVisualizationSettings.showNavigation > 0) + { + var color = navModifier.enabled ? s_HandleColor : s_HandleColorDisabled; + var oldColor = Gizmos.color; + var oldMatrix = Gizmos.matrix; + + Gizmos.matrix = navModifier.transform.localToWorldMatrix; + + Gizmos.color = color; + Gizmos.DrawWireCube(navModifier.center, navModifier.size); + + Gizmos.matrix = oldMatrix; + Gizmos.color = oldColor; + } + + Gizmos.DrawIcon(navModifier.transform.position, "NavMeshModifierVolume Icon", true); + } + + void OnSceneGUI() + { + if (!editingCollider) + return; + + var vol = (NavMeshModifierVolume)target; + var color = vol.enabled ? s_HandleColor : s_HandleColorDisabled; + using (new Handles.DrawingScope(color, vol.transform.localToWorldMatrix)) + { + m_BoundsHandle.center = vol.center; + m_BoundsHandle.size = vol.size; + + EditorGUI.BeginChangeCheck(); + m_BoundsHandle.DrawHandle(); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(vol, "Modified NavMesh Modifier Volume"); + Vector3 center = m_BoundsHandle.center; + Vector3 size = m_BoundsHandle.size; + vol.center = center; + vol.size = size; + EditorUtility.SetDirty(target); + } + } + } + + [MenuItem("GameObject/AI/NavMesh Modifier Volume", false, 2001)] + static public void CreateNavMeshModifierVolume(MenuCommand menuCommand) + { + var parent = menuCommand.context as GameObject; + var go = NavMeshComponentsGUIUtility.CreateAndSelectGameObject("NavMesh Modifier Volume", parent); + go.AddComponent(); + var view = SceneView.lastActiveSceneView; + if (view != null) + view.MoveToView(go.transform); + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs.meta new file mode 100644 index 00000000..3f5a8c5d --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e1c0b90b0444344c8a9f03c6770f6dd9 +timeCreated: 1477036743 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs b/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs new file mode 100644 index 00000000..c9f00689 --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs @@ -0,0 +1,400 @@ +#define NAVMESHCOMPONENTS_SHOW_NAVMESHDATA_REF + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor.Experimental.SceneManagement; +using UnityEditor.IMGUI.Controls; +using UnityEditor.SceneManagement; +using UnityEditorInternal; +using UnityEngine.AI; +using UnityEngine; + +namespace UnityEditor.AI +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(NavMeshSurface))] + class NavMeshSurfaceEditor : Editor + { + SerializedProperty m_AgentTypeID; + SerializedProperty m_BuildHeightMesh; + SerializedProperty m_Center; + SerializedProperty m_CollectObjects; + SerializedProperty m_DefaultArea; + SerializedProperty m_LayerMask; + SerializedProperty m_OverrideTileSize; + SerializedProperty m_OverrideVoxelSize; + SerializedProperty m_Size; + SerializedProperty m_TileSize; + SerializedProperty m_UseGeometry; + SerializedProperty m_VoxelSize; + +#if NAVMESHCOMPONENTS_SHOW_NAVMESHDATA_REF + SerializedProperty m_NavMeshData; +#endif + class Styles + { + public readonly GUIContent m_LayerMask = new GUIContent("Include Layers"); + + public readonly GUIContent m_ShowInputGeom = new GUIContent("Show Input Geom"); + public readonly GUIContent m_ShowVoxels = new GUIContent("Show Voxels"); + public readonly GUIContent m_ShowRegions = new GUIContent("Show Regions"); + public readonly GUIContent m_ShowRawContours = new GUIContent("Show Raw Contours"); + public readonly GUIContent m_ShowContours = new GUIContent("Show Contours"); + public readonly GUIContent m_ShowPolyMesh = new GUIContent("Show Poly Mesh"); + public readonly GUIContent m_ShowPolyMeshDetail = new GUIContent("Show Poly Mesh Detail"); + } + + static Styles s_Styles; + + static bool s_ShowDebugOptions; + + static Color s_HandleColor = new Color(127f, 214f, 244f, 100f) / 255; + static Color s_HandleColorSelected = new Color(127f, 214f, 244f, 210f) / 255; + static Color s_HandleColorDisabled = new Color(127f * 0.75f, 214f * 0.75f, 244f * 0.75f, 100f) / 255; + + BoxBoundsHandle m_BoundsHandle = new BoxBoundsHandle(); + + bool editingCollider + { + get { return EditMode.editMode == EditMode.SceneViewEditMode.Collider && EditMode.IsOwner(this); } + } + + void OnEnable() + { + m_AgentTypeID = serializedObject.FindProperty("m_AgentTypeID"); + m_BuildHeightMesh = serializedObject.FindProperty("m_BuildHeightMesh"); + m_Center = serializedObject.FindProperty("m_Center"); + m_CollectObjects = serializedObject.FindProperty("m_CollectObjects"); + m_DefaultArea = serializedObject.FindProperty("m_DefaultArea"); + m_LayerMask = serializedObject.FindProperty("m_LayerMask"); + m_OverrideTileSize = serializedObject.FindProperty("m_OverrideTileSize"); + m_OverrideVoxelSize = serializedObject.FindProperty("m_OverrideVoxelSize"); + m_Size = serializedObject.FindProperty("m_Size"); + m_TileSize = serializedObject.FindProperty("m_TileSize"); + m_UseGeometry = serializedObject.FindProperty("m_UseGeometry"); + m_VoxelSize = serializedObject.FindProperty("m_VoxelSize"); + +#if NAVMESHCOMPONENTS_SHOW_NAVMESHDATA_REF + m_NavMeshData = serializedObject.FindProperty("m_NavMeshData"); +#endif + NavMeshVisualizationSettings.showNavigation++; + } + + void OnDisable() + { + NavMeshVisualizationSettings.showNavigation--; + } + + Bounds GetBounds() + { + var navSurface = (NavMeshSurface)target; + return new Bounds(navSurface.transform.position, navSurface.size); + } + + public override void OnInspectorGUI() + { + if (s_Styles == null) + s_Styles = new Styles(); + + serializedObject.Update(); + + var bs = NavMesh.GetSettingsByID(m_AgentTypeID.intValue); + + if (bs.agentTypeID != -1) + { + // Draw image + const float diagramHeight = 80.0f; + Rect agentDiagramRect = EditorGUILayout.GetControlRect(false, diagramHeight); + NavMeshEditorHelpers.DrawAgentDiagram(agentDiagramRect, bs.agentRadius, bs.agentHeight, bs.agentClimb, bs.agentSlope); + } + NavMeshComponentsGUIUtility.AgentTypePopup("Agent Type", m_AgentTypeID); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_CollectObjects); + if ((CollectObjects)m_CollectObjects.enumValueIndex == CollectObjects.Volume) + { + EditorGUI.indentLevel++; + + EditMode.DoEditModeInspectorModeButton(EditMode.SceneViewEditMode.Collider, "Edit Volume", + EditorGUIUtility.IconContent("EditCollider"), GetBounds, this); + EditorGUILayout.PropertyField(m_Size); + EditorGUILayout.PropertyField(m_Center); + + EditorGUI.indentLevel--; + } + else + { + if (editingCollider) + EditMode.QuitEditMode(); + } + + EditorGUILayout.PropertyField(m_LayerMask, s_Styles.m_LayerMask); + EditorGUILayout.PropertyField(m_UseGeometry); + + EditorGUILayout.Space(); + + m_OverrideVoxelSize.isExpanded = EditorGUILayout.Foldout(m_OverrideVoxelSize.isExpanded, "Advanced"); + if (m_OverrideVoxelSize.isExpanded) + { + EditorGUI.indentLevel++; + + NavMeshComponentsGUIUtility.AreaPopup("Default Area", m_DefaultArea); + + // Override voxel size. + EditorGUILayout.PropertyField(m_OverrideVoxelSize); + + using (new EditorGUI.DisabledScope(!m_OverrideVoxelSize.boolValue || m_OverrideVoxelSize.hasMultipleDifferentValues)) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(m_VoxelSize); + + if (!m_OverrideVoxelSize.hasMultipleDifferentValues) + { + if (!m_AgentTypeID.hasMultipleDifferentValues) + { + float voxelsPerRadius = m_VoxelSize.floatValue > 0.0f ? (bs.agentRadius / m_VoxelSize.floatValue) : 0.0f; + EditorGUILayout.LabelField(" ", voxelsPerRadius.ToString("0.00") + " voxels per agent radius", EditorStyles.miniLabel); + } + if (m_OverrideVoxelSize.boolValue) + EditorGUILayout.HelpBox("Voxel size controls how accurately the navigation mesh is generated from the level geometry. A good voxel size is 2-4 voxels per agent radius. Making voxel size smaller will increase build time.", MessageType.None); + } + EditorGUI.indentLevel--; + } + + // Override tile size + EditorGUILayout.PropertyField(m_OverrideTileSize); + + using (new EditorGUI.DisabledScope(!m_OverrideTileSize.boolValue || m_OverrideTileSize.hasMultipleDifferentValues)) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(m_TileSize); + + if (!m_TileSize.hasMultipleDifferentValues && !m_VoxelSize.hasMultipleDifferentValues) + { + float tileWorldSize = m_TileSize.intValue * m_VoxelSize.floatValue; + EditorGUILayout.LabelField(" ", tileWorldSize.ToString("0.00") + " world units", EditorStyles.miniLabel); + } + + if (!m_OverrideTileSize.hasMultipleDifferentValues) + { + if (m_OverrideTileSize.boolValue) + EditorGUILayout.HelpBox("Tile size controls the how local the changes to the world are (rebuild or carve). Small tile size allows more local changes, while potentially generating more data overall.", MessageType.None); + } + EditorGUI.indentLevel--; + } + + + // Height mesh + using (new EditorGUI.DisabledScope(true)) + { + EditorGUILayout.PropertyField(m_BuildHeightMesh); + } + + EditorGUILayout.Space(); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + + serializedObject.ApplyModifiedProperties(); + + var hadError = false; + var multipleTargets = targets.Length > 1; + foreach (NavMeshSurface navSurface in targets) + { + var settings = navSurface.GetBuildSettings(); + // Calculating bounds is potentially expensive when unbounded - so here we just use the center/size. + // It means the validation is not checking vertical voxel limit correctly when the surface is set to something else than "in volume". + var bounds = new Bounds(Vector3.zero, Vector3.zero); + if (navSurface.collectObjects == CollectObjects.Volume) + { + bounds = new Bounds(navSurface.center, navSurface.size); + } + + var errors = settings.ValidationReport(bounds); + if (errors.Length > 0) + { + if (multipleTargets) + EditorGUILayout.LabelField(navSurface.name); + foreach (var err in errors) + { + EditorGUILayout.HelpBox(err, MessageType.Warning); + } + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIUtility.labelWidth); + if (GUILayout.Button("Open Agent Settings...", EditorStyles.miniButton)) + NavMeshEditorHelpers.OpenAgentSettings(navSurface.agentTypeID); + GUILayout.EndHorizontal(); + hadError = true; + } + } + + if (hadError) + EditorGUILayout.Space(); + +#if NAVMESHCOMPONENTS_SHOW_NAVMESHDATA_REF + var nmdRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.BeginProperty(nmdRect, GUIContent.none, m_NavMeshData); + var rectLabel = EditorGUI.PrefixLabel(nmdRect, GUIUtility.GetControlID(FocusType.Passive), new GUIContent(m_NavMeshData.displayName)); + EditorGUI.EndProperty(); + + using (new EditorGUI.DisabledScope(true)) + { + EditorGUI.BeginProperty(nmdRect, GUIContent.none, m_NavMeshData); + EditorGUI.ObjectField(rectLabel, m_NavMeshData, GUIContent.none); + EditorGUI.EndProperty(); + } +#endif + using (new EditorGUI.DisabledScope(Application.isPlaying || m_AgentTypeID.intValue == -1)) + { + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIUtility.labelWidth); + if (GUILayout.Button("Clear")) + { + NavMeshAssetManager.instance.ClearSurfaces(targets); + SceneView.RepaintAll(); + } + + if (GUILayout.Button("Bake")) + { + NavMeshAssetManager.instance.StartBakingSurfaces(targets); + } + + GUILayout.EndHorizontal(); + } + + // Show progress for the selected targets + var bakeOperations = NavMeshAssetManager.instance.GetBakeOperations(); + for (int i = bakeOperations.Count - 1; i >= 0; --i) + { + if (!targets.Contains(bakeOperations[i].surface)) + continue; + + var oper = bakeOperations[i].bakeOperation; + if (oper == null) + continue; + + var p = oper.progress; + if (oper.isDone) + { + SceneView.RepaintAll(); + continue; + } + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Cancel", EditorStyles.miniButton)) + { + var bakeData = bakeOperations[i].bakeData; + UnityEngine.AI.NavMeshBuilder.Cancel(bakeData); + bakeOperations.RemoveAt(i); + } + + EditorGUI.ProgressBar(EditorGUILayout.GetControlRect(), p, "Baking: " + (int)(100 * p) + "%"); + if (p <= 1) + Repaint(); + + GUILayout.EndHorizontal(); + } + } + + [DrawGizmo(GizmoType.Selected | GizmoType.Active | GizmoType.Pickable)] + static void RenderBoxGizmoSelected(NavMeshSurface navSurface, GizmoType gizmoType) + { + RenderBoxGizmo(navSurface, gizmoType, true); + } + + [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.Pickable)] + static void RenderBoxGizmoNotSelected(NavMeshSurface navSurface, GizmoType gizmoType) + { + if (NavMeshVisualizationSettings.showNavigation > 0) + RenderBoxGizmo(navSurface, gizmoType, false); + else + Gizmos.DrawIcon(navSurface.transform.position, "NavMeshSurface Icon", true); + } + + static void RenderBoxGizmo(NavMeshSurface navSurface, GizmoType gizmoType, bool selected) + { + var color = selected ? s_HandleColorSelected : s_HandleColor; + if (!navSurface.enabled) + color = s_HandleColorDisabled; + + var oldColor = Gizmos.color; + var oldMatrix = Gizmos.matrix; + + // Use the unscaled matrix for the NavMeshSurface + var localToWorld = Matrix4x4.TRS(navSurface.transform.position, navSurface.transform.rotation, Vector3.one); + Gizmos.matrix = localToWorld; + + if (navSurface.collectObjects == CollectObjects.Volume) + { + Gizmos.color = color; + Gizmos.DrawWireCube(navSurface.center, navSurface.size); + + if (selected && navSurface.enabled) + { + var colorTrans = new Color(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, color.a * 0.15f); + Gizmos.color = colorTrans; + Gizmos.DrawCube(navSurface.center, navSurface.size); + } + } + else + { + if (navSurface.navMeshData != null) + { + var bounds = navSurface.navMeshData.sourceBounds; + Gizmos.color = Color.grey; + Gizmos.DrawWireCube(bounds.center, bounds.size); + } + } + + Gizmos.matrix = oldMatrix; + Gizmos.color = oldColor; + + Gizmos.DrawIcon(navSurface.transform.position, "NavMeshSurface Icon", true); + } + + void OnSceneGUI() + { + if (!editingCollider) + return; + + var navSurface = (NavMeshSurface)target; + var color = navSurface.enabled ? s_HandleColor : s_HandleColorDisabled; + var localToWorld = Matrix4x4.TRS(navSurface.transform.position, navSurface.transform.rotation, Vector3.one); + using (new Handles.DrawingScope(color, localToWorld)) + { + m_BoundsHandle.center = navSurface.center; + m_BoundsHandle.size = navSurface.size; + + EditorGUI.BeginChangeCheck(); + m_BoundsHandle.DrawHandle(); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(navSurface, "Modified NavMesh Surface"); + Vector3 center = m_BoundsHandle.center; + Vector3 size = m_BoundsHandle.size; + navSurface.center = center; + navSurface.size = size; + EditorUtility.SetDirty(target); + } + } + } + + [MenuItem("GameObject/AI/NavMesh Surface", false, 2000)] + public static void CreateNavMeshSurface(MenuCommand menuCommand) + { + var parent = menuCommand.context as GameObject; + var go = NavMeshComponentsGUIUtility.CreateAndSelectGameObject("NavMesh Surface", parent); + go.AddComponent(); + var view = SceneView.lastActiveSceneView; + if (view != null) + view.MoveToView(go.transform); + } + } +} diff --git a/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs.meta b/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs.meta new file mode 100644 index 00000000..b1936d9c --- /dev/null +++ b/Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f24e545f38fdafb2da89ae0cf0d959ae +timeCreated: 1476968447 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts.meta b/Assets/NavMeshComponents/Scripts.meta new file mode 100644 index 00000000..82610859 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ee87b203fafb0ddc88d7f695f0ee45f1 +folderAsset: yes +timeCreated: 1477656493 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef b/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef new file mode 100644 index 00000000..a54b5c28 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef @@ -0,0 +1,12 @@ +{ + "name": "NavMeshComponents", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef.meta b/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef.meta new file mode 100644 index 00000000..329fd45b --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshComponents.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 30903d471fde6bc3296551e19c7e986a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts/NavMeshLink.cs b/Assets/NavMeshComponents/Scripts/NavMeshLink.cs new file mode 100644 index 00000000..6a921033 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshLink.cs @@ -0,0 +1,172 @@ +using System.Collections.Generic; + +namespace UnityEngine.AI +{ + [ExecuteInEditMode] + [DefaultExecutionOrder(-101)] + [AddComponentMenu("Navigation/NavMeshLink", 33)] + [HelpURL("https://github.com/Unity-Technologies/NavMeshComponents#documentation-draft")] + public class NavMeshLink : MonoBehaviour + { + [SerializeField] + int m_AgentTypeID; + public int agentTypeID { get { return m_AgentTypeID; } set { m_AgentTypeID = value; UpdateLink(); } } + + [SerializeField] + Vector3 m_StartPoint = new Vector3(0.0f, 0.0f, -2.5f); + public Vector3 startPoint { get { return m_StartPoint; } set { m_StartPoint = value; UpdateLink(); } } + + [SerializeField] + Vector3 m_EndPoint = new Vector3(0.0f, 0.0f, 2.5f); + public Vector3 endPoint { get { return m_EndPoint; } set { m_EndPoint = value; UpdateLink(); } } + + [SerializeField] + float m_Width; + public float width { get { return m_Width; } set { m_Width = value; UpdateLink(); } } + + [SerializeField] + int m_CostModifier = -1; + public int costModifier { get { return m_CostModifier; } set { m_CostModifier = value; UpdateLink(); } } + + [SerializeField] + bool m_Bidirectional = true; + public bool bidirectional { get { return m_Bidirectional; } set { m_Bidirectional = value; UpdateLink(); } } + + [SerializeField] + bool m_AutoUpdatePosition; + public bool autoUpdate { get { return m_AutoUpdatePosition; } set { SetAutoUpdate(value); } } + + [SerializeField] + int m_Area; + public int area { get { return m_Area; } set { m_Area = value; UpdateLink(); } } + + NavMeshLinkInstance m_LinkInstance = new NavMeshLinkInstance(); + + Vector3 m_LastPosition = Vector3.zero; + Quaternion m_LastRotation = Quaternion.identity; + + static readonly List s_Tracked = new List(); + + void OnEnable() + { + AddLink(); + if (m_AutoUpdatePosition && m_LinkInstance.valid) + AddTracking(this); + } + + void OnDisable() + { + RemoveTracking(this); + m_LinkInstance.Remove(); + } + + public void UpdateLink() + { + m_LinkInstance.Remove(); + AddLink(); + } + + static void AddTracking(NavMeshLink link) + { +#if UNITY_EDITOR + if (s_Tracked.Contains(link)) + { + Debug.LogError("Link is already tracked: " + link); + return; + } +#endif + + if (s_Tracked.Count == 0) + NavMesh.onPreUpdate += UpdateTrackedInstances; + + s_Tracked.Add(link); + } + + static void RemoveTracking(NavMeshLink link) + { + s_Tracked.Remove(link); + + if (s_Tracked.Count == 0) + NavMesh.onPreUpdate -= UpdateTrackedInstances; + } + + void SetAutoUpdate(bool value) + { + if (m_AutoUpdatePosition == value) + return; + m_AutoUpdatePosition = value; + if (value) + AddTracking(this); + else + RemoveTracking(this); + } + + void AddLink() + { +#if UNITY_EDITOR + if (m_LinkInstance.valid) + { + Debug.LogError("Link is already added: " + this); + return; + } +#endif + + var link = new NavMeshLinkData(); + link.startPosition = m_StartPoint; + link.endPosition = m_EndPoint; + link.width = m_Width; + link.costModifier = m_CostModifier; + link.bidirectional = m_Bidirectional; + link.area = m_Area; + link.agentTypeID = m_AgentTypeID; + m_LinkInstance = NavMesh.AddLink(link, transform.position, transform.rotation); + if (m_LinkInstance.valid) + m_LinkInstance.owner = this; + + m_LastPosition = transform.position; + m_LastRotation = transform.rotation; + } + + bool HasTransformChanged() + { + if (m_LastPosition != transform.position) return true; + if (m_LastRotation != transform.rotation) return true; + return false; + } + + void OnDidApplyAnimationProperties() + { + UpdateLink(); + } + + static void UpdateTrackedInstances() + { + foreach (var instance in s_Tracked) + { + if (instance.HasTransformChanged()) + instance.UpdateLink(); + } + } + +#if UNITY_EDITOR + void OnValidate() + { + m_Width = Mathf.Max(0.0f, m_Width); + + if (!m_LinkInstance.valid) + return; + + UpdateLink(); + + if (!m_AutoUpdatePosition) + { + RemoveTracking(this); + } + else if (!s_Tracked.Contains(this)) + { + AddTracking(this); + } + } +#endif + } +} diff --git a/Assets/NavMeshComponents/Scripts/NavMeshLink.cs.meta b/Assets/NavMeshComponents/Scripts/NavMeshLink.cs.meta new file mode 100644 index 00000000..895c83fd --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshLink.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a097efa41cccca1c0a3b9b57175a7ec9 +timeCreated: 1477924439 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 92f4afa3e25264f5b964937ccea49ff2, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs b/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs new file mode 100644 index 00000000..f32e80c7 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; + +namespace UnityEngine.AI +{ + [ExecuteInEditMode] + [AddComponentMenu("Navigation/NavMeshModifier", 32)] + [HelpURL("https://github.com/Unity-Technologies/NavMeshComponents#documentation-draft")] + public class NavMeshModifier : MonoBehaviour + { + [SerializeField] + bool m_OverrideArea; + public bool overrideArea { get { return m_OverrideArea; } set { m_OverrideArea = value; } } + + [SerializeField] + int m_Area; + public int area { get { return m_Area; } set { m_Area = value; } } + + [SerializeField] + bool m_IgnoreFromBuild; + public bool ignoreFromBuild { get { return m_IgnoreFromBuild; } set { m_IgnoreFromBuild = value; } } + + // List of agent types the modifier is applied for. + // Special values: empty == None, m_AffectedAgents[0] =-1 == All. + [SerializeField] + List m_AffectedAgents = new List(new int[] { -1 }); // Default value is All + + static readonly List s_NavMeshModifiers = new List(); + + public static List activeModifiers + { + get { return s_NavMeshModifiers; } + } + + void OnEnable() + { + if (!s_NavMeshModifiers.Contains(this)) + s_NavMeshModifiers.Add(this); + } + + void OnDisable() + { + s_NavMeshModifiers.Remove(this); + } + + public bool AffectsAgentType(int agentTypeID) + { + if (m_AffectedAgents.Count == 0) + return false; + if (m_AffectedAgents[0] == -1) + return true; + return m_AffectedAgents.IndexOf(agentTypeID) != -1; + } + } +} diff --git a/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs.meta b/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs.meta new file mode 100644 index 00000000..a3fba705 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ec9a8652663a50285b4299a3a32c4fb9 +timeCreated: 1477924411 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: cc7b9475dbddf4f9088d327d6e10ab77, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs b/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs new file mode 100644 index 00000000..faa7e630 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; + +namespace UnityEngine.AI +{ + [ExecuteInEditMode] + [AddComponentMenu("Navigation/NavMeshModifierVolume", 31)] + [HelpURL("https://github.com/Unity-Technologies/NavMeshComponents#documentation-draft")] + public class NavMeshModifierVolume : MonoBehaviour + { + [SerializeField] + Vector3 m_Size = new Vector3(4.0f, 3.0f, 4.0f); + public Vector3 size { get { return m_Size; } set { m_Size = value; } } + + [SerializeField] + Vector3 m_Center = new Vector3(0, 1.0f, 0); + public Vector3 center { get { return m_Center; } set { m_Center = value; } } + + [SerializeField] + int m_Area; + public int area { get { return m_Area; } set { m_Area = value; } } + + // List of agent types the modifier is applied for. + // Special values: empty == None, m_AffectedAgents[0] =-1 == All. + [SerializeField] + List m_AffectedAgents = new List(new int[] { -1 }); // Default value is All + + static readonly List s_NavMeshModifiers = new List(); + + public static List activeModifiers + { + get { return s_NavMeshModifiers; } + } + + void OnEnable() + { + if (!s_NavMeshModifiers.Contains(this)) + s_NavMeshModifiers.Add(this); + } + + void OnDisable() + { + s_NavMeshModifiers.Remove(this); + } + + public bool AffectsAgentType(int agentTypeID) + { + if (m_AffectedAgents.Count == 0) + return false; + if (m_AffectedAgents[0] == -1) + return true; + return m_AffectedAgents.IndexOf(agentTypeID) != -1; + } + } +} diff --git a/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs.meta b/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs.meta new file mode 100644 index 00000000..87ce2d59 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshModifierVolume.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 35e22bbf0dcb30459a28847a821609a9 +timeCreated: 1477924430 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: cc7b9475dbddf4f9088d327d6e10ab77, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs new file mode 100644 index 00000000..700db137 --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs @@ -0,0 +1,492 @@ +using System.Collections.Generic; +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine.AI; + +#endif + +namespace UnityEngine.AI +{ + public enum CollectObjects + { + All = 0, + Volume = 1, + Children = 2, + } + + [ExecuteAlways] + [DefaultExecutionOrder(-102)] + [AddComponentMenu("Navigation/NavMeshSurface", 30)] + [HelpURL("https://github.com/Unity-Technologies/NavMeshComponents#documentation-draft")] + public class NavMeshSurface : MonoBehaviour + { + [SerializeField] + int m_AgentTypeID; + public int agentTypeID { get { return m_AgentTypeID; } set { m_AgentTypeID = value; } } + + [SerializeField] + CollectObjects m_CollectObjects = CollectObjects.All; + public CollectObjects collectObjects { get { return m_CollectObjects; } set { m_CollectObjects = value; } } + + [SerializeField] + Vector3 m_Size = new Vector3(10.0f, 10.0f, 10.0f); + public Vector3 size { get { return m_Size; } set { m_Size = value; } } + + [SerializeField] + Vector3 m_Center = new Vector3(0, 2.0f, 0); + public Vector3 center { get { return m_Center; } set { m_Center = value; } } + + [SerializeField] + LayerMask m_LayerMask = ~0; + public LayerMask layerMask { get { return m_LayerMask; } set { m_LayerMask = value; } } + + [SerializeField] + NavMeshCollectGeometry m_UseGeometry = NavMeshCollectGeometry.RenderMeshes; + public NavMeshCollectGeometry useGeometry { get { return m_UseGeometry; } set { m_UseGeometry = value; } } + + [SerializeField] + int m_DefaultArea; + public int defaultArea { get { return m_DefaultArea; } set { m_DefaultArea = value; } } + + [SerializeField] + bool m_IgnoreNavMeshAgent = true; + public bool ignoreNavMeshAgent { get { return m_IgnoreNavMeshAgent; } set { m_IgnoreNavMeshAgent = value; } } + + [SerializeField] + bool m_IgnoreNavMeshObstacle = true; + public bool ignoreNavMeshObstacle { get { return m_IgnoreNavMeshObstacle; } set { m_IgnoreNavMeshObstacle = value; } } + + [SerializeField] + bool m_OverrideTileSize; + public bool overrideTileSize { get { return m_OverrideTileSize; } set { m_OverrideTileSize = value; } } + [SerializeField] + int m_TileSize = 256; + public int tileSize { get { return m_TileSize; } set { m_TileSize = value; } } + [SerializeField] + bool m_OverrideVoxelSize; + public bool overrideVoxelSize { get { return m_OverrideVoxelSize; } set { m_OverrideVoxelSize = value; } } + [SerializeField] + float m_VoxelSize; + public float voxelSize { get { return m_VoxelSize; } set { m_VoxelSize = value; } } + + // Currently not supported advanced options + // [SerializeField] + // bool m_BuildHeightMesh; + // public bool buildHeightMesh { get { return m_BuildHeightMesh; } set { m_BuildHeightMesh = value; } } + + // Reference to whole scene navmesh data asset. + [UnityEngine.Serialization.FormerlySerializedAs("m_BakedNavMeshData")] + [SerializeField] + NavMeshData m_NavMeshData; + public NavMeshData navMeshData { get { return m_NavMeshData; } set { m_NavMeshData = value; } } + + // Do not serialize - runtime only state. + NavMeshDataInstance m_NavMeshDataInstance; + Vector3 m_LastPosition = Vector3.zero; + Quaternion m_LastRotation = Quaternion.identity; + + static readonly List s_NavMeshSurfaces = new List(); + + public static List activeSurfaces + { + get { return s_NavMeshSurfaces; } + } + + void OnEnable() + { + Register(this); + AddData(); + } + + void OnDisable() + { + RemoveData(); + Unregister(this); + } + + public void AddData() + { +#if UNITY_EDITOR + Debug.Log("UNITY EDITOR preview"); + var isInPreviewScene = EditorSceneManager.IsPreviewSceneObject(this); + var isPrefab = isInPreviewScene || EditorUtility.IsPersistent(this); + if (isPrefab) + { + //Debug.LogFormat("NavMeshData from {0}.{1} will not be added to the NavMesh world because the gameObject is a prefab.", + // gameObject.name, name); + return; + } +#endif + Debug.Log($"NavMeshDataInstance.valid =============== {m_NavMeshDataInstance.valid}"); + if (m_NavMeshDataInstance.valid) + return; + + Debug.Log($"m_NavMeshData =============== {m_NavMeshData}"); + if (m_NavMeshData != null) + { + Debug.Log("Adding NavMeshData"); + m_NavMeshDataInstance = NavMesh.AddNavMeshData(m_NavMeshData, transform.position, transform.rotation); + m_NavMeshDataInstance.owner = this; + } + + m_LastPosition = transform.position; + m_LastRotation = transform.rotation; + } + + public void RemoveData() + { + m_NavMeshDataInstance.Remove(); + m_NavMeshDataInstance = new NavMeshDataInstance(); + } + + public NavMeshBuildSettings GetBuildSettings() + { + var buildSettings = NavMesh.GetSettingsByID(m_AgentTypeID); + if (buildSettings.agentTypeID == -1) + { + Debug.LogWarning("No build settings for agent type ID " + agentTypeID, this); + buildSettings.agentTypeID = m_AgentTypeID; + } + + if (overrideTileSize) + { + buildSettings.overrideTileSize = true; + buildSettings.tileSize = tileSize; + } + if (overrideVoxelSize) + { + buildSettings.overrideVoxelSize = true; + buildSettings.voxelSize = voxelSize; + } + return buildSettings; + } + + public void BuildNavMesh() + { + var sources = CollectSources(); + + // Use unscaled bounds - this differs in behaviour from e.g. collider components. + // But is similar to reflection probe - and since navmesh data has no scaling support - it is the right choice here. + var sourcesBounds = new Bounds(m_Center, Abs(m_Size)); + if (m_CollectObjects == CollectObjects.All || m_CollectObjects == CollectObjects.Children) + { + sourcesBounds = CalculateWorldBounds(sources); + } + + var data = NavMeshBuilder.BuildNavMeshData(GetBuildSettings(), + sources, sourcesBounds, transform.position, transform.rotation); + if (data == null){Debug.Log("NULL 0000000000000000000000000000000000000000000000000");} + if (data != null) + { + data.name = gameObject.name; + RemoveData(); + m_NavMeshData = data; + if (isActiveAndEnabled) + AddData(); + } + } + + public AsyncOperation UpdateNavMesh(NavMeshData data) + { + var sources = CollectSources(); + + // Use unscaled bounds - this differs in behaviour from e.g. collider components. + // But is similar to reflection probe - and since navmesh data has no scaling support - it is the right choice here. + var sourcesBounds = new Bounds(m_Center, Abs(m_Size)); + if (m_CollectObjects == CollectObjects.All || m_CollectObjects == CollectObjects.Children) + sourcesBounds = CalculateWorldBounds(sources); + + return NavMeshBuilder.UpdateNavMeshDataAsync(data, GetBuildSettings(), sources, sourcesBounds); + } + + static void Register(NavMeshSurface surface) + { +#if UNITY_EDITOR + var isInPreviewScene = EditorSceneManager.IsPreviewSceneObject(surface); + var isPrefab = isInPreviewScene || EditorUtility.IsPersistent(surface); + if (isPrefab) + { + //Debug.LogFormat("NavMeshData from {0}.{1} will not be added to the NavMesh world because the gameObject is a prefab.", + // surface.gameObject.name, surface.name); + return; + } +#endif + if (s_NavMeshSurfaces.Count == 0) + NavMesh.onPreUpdate += UpdateActive; + + if (!s_NavMeshSurfaces.Contains(surface)) + s_NavMeshSurfaces.Add(surface); + } + + static void Unregister(NavMeshSurface surface) + { + s_NavMeshSurfaces.Remove(surface); + + if (s_NavMeshSurfaces.Count == 0) + NavMesh.onPreUpdate -= UpdateActive; + } + + static void UpdateActive() + { + for (var i = 0; i < s_NavMeshSurfaces.Count; ++i) + s_NavMeshSurfaces[i].UpdateDataIfTransformChanged(); + } + + void AppendModifierVolumes(ref List sources) + { +#if UNITY_EDITOR + var myStage = StageUtility.GetStageHandle(gameObject); + if (!myStage.IsValid()) + return; +#endif + // Modifiers + List modifiers; + if (m_CollectObjects == CollectObjects.Children) + { + modifiers = new List(GetComponentsInChildren()); + modifiers.RemoveAll(x => !x.isActiveAndEnabled); + } + else + { + modifiers = NavMeshModifierVolume.activeModifiers; + } + + foreach (var m in modifiers) + { + if ((m_LayerMask & (1 << m.gameObject.layer)) == 0) + continue; + if (!m.AffectsAgentType(m_AgentTypeID)) + continue; +#if UNITY_EDITOR + if (!myStage.Contains(m.gameObject)) + continue; +#endif + var mcenter = m.transform.TransformPoint(m.center); + var scale = m.transform.lossyScale; + var msize = new Vector3(m.size.x * Mathf.Abs(scale.x), m.size.y * Mathf.Abs(scale.y), m.size.z * Mathf.Abs(scale.z)); + + var src = new NavMeshBuildSource(); + src.shape = NavMeshBuildSourceShape.ModifierBox; + src.transform = Matrix4x4.TRS(mcenter, m.transform.rotation, Vector3.one); + src.size = msize; + src.area = m.area; + sources.Add(src); + } + } + + List CollectSources() + { + var sources = new List(); + var markups = new List(); + + List modifiers; + if (m_CollectObjects == CollectObjects.Children) + { + modifiers = new List(GetComponentsInChildren()); + modifiers.RemoveAll(x => !x.isActiveAndEnabled); + } + else + { + modifiers = NavMeshModifier.activeModifiers; + } + + foreach (var m in modifiers) + { + if ((m_LayerMask & (1 << m.gameObject.layer)) == 0) + continue; + if (!m.AffectsAgentType(m_AgentTypeID)) + continue; + var markup = new NavMeshBuildMarkup(); + markup.root = m.transform; + markup.overrideArea = m.overrideArea; + markup.area = m.area; + markup.ignoreFromBuild = m.ignoreFromBuild; + markups.Add(markup); + } + +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) + { + if (m_CollectObjects == CollectObjects.All) + { + UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage( + null, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources); + } + else if (m_CollectObjects == CollectObjects.Children) + { + UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage( + transform, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources); + } + else if (m_CollectObjects == CollectObjects.Volume) + { + Matrix4x4 localToWorld = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one); + var worldBounds = GetWorldBounds(localToWorld, new Bounds(m_Center, m_Size)); + + UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage( + worldBounds, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources); + } + } + else +#endif + { + if (m_CollectObjects == CollectObjects.All) + { + NavMeshBuilder.CollectSources(null, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources); + } + else if (m_CollectObjects == CollectObjects.Children) + { + NavMeshBuilder.CollectSources(transform, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources); + } + else if (m_CollectObjects == CollectObjects.Volume) + { + Matrix4x4 localToWorld = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one); + var worldBounds = GetWorldBounds(localToWorld, new Bounds(m_Center, m_Size)); + NavMeshBuilder.CollectSources(worldBounds, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources); + } + } + + if (m_IgnoreNavMeshAgent) + sources.RemoveAll((x) => (x.component != null && x.component.gameObject.GetComponent() != null)); + + if (m_IgnoreNavMeshObstacle) + sources.RemoveAll((x) => (x.component != null && x.component.gameObject.GetComponent() != null)); + + AppendModifierVolumes(ref sources); + + return sources; + } + + static Vector3 Abs(Vector3 v) + { + return new Vector3(Mathf.Abs(v.x), Mathf.Abs(v.y), Mathf.Abs(v.z)); + } + + static Bounds GetWorldBounds(Matrix4x4 mat, Bounds bounds) + { + var absAxisX = Abs(mat.MultiplyVector(Vector3.right)); + var absAxisY = Abs(mat.MultiplyVector(Vector3.up)); + var absAxisZ = Abs(mat.MultiplyVector(Vector3.forward)); + var worldPosition = mat.MultiplyPoint(bounds.center); + var worldSize = absAxisX * bounds.size.x + absAxisY * bounds.size.y + absAxisZ * bounds.size.z; + return new Bounds(worldPosition, worldSize); + } + + Bounds CalculateWorldBounds(List sources) + { + // Use the unscaled matrix for the NavMeshSurface + Matrix4x4 worldToLocal = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one); + worldToLocal = worldToLocal.inverse; + + var result = new Bounds(); + foreach (var src in sources) + { + switch (src.shape) + { + case NavMeshBuildSourceShape.Mesh: + { + var m = src.sourceObject as Mesh; + result.Encapsulate(GetWorldBounds(worldToLocal * src.transform, m.bounds)); + break; + } + case NavMeshBuildSourceShape.Terrain: + { + // Terrain pivot is lower/left corner - shift bounds accordingly + var t = src.sourceObject as TerrainData; + result.Encapsulate(GetWorldBounds(worldToLocal * src.transform, new Bounds(0.5f * t.size, t.size))); + break; + } + case NavMeshBuildSourceShape.Box: + case NavMeshBuildSourceShape.Sphere: + case NavMeshBuildSourceShape.Capsule: + case NavMeshBuildSourceShape.ModifierBox: + result.Encapsulate(GetWorldBounds(worldToLocal * src.transform, new Bounds(Vector3.zero, src.size))); + break; + } + } + // Inflate the bounds a bit to avoid clipping co-planar sources + result.Expand(0.1f); + return result; + } + + bool HasTransformChanged() + { + if (m_LastPosition != transform.position) return true; + if (m_LastRotation != transform.rotation) return true; + return false; + } + + void UpdateDataIfTransformChanged() + { + if (HasTransformChanged()) + { + RemoveData(); + AddData(); + } + } + +#if UNITY_EDITOR + bool UnshareNavMeshAsset() + { + // Nothing to unshare + if (m_NavMeshData == null) + return false; + + // Prefab parent owns the asset reference + var isInPreviewScene = EditorSceneManager.IsPreviewSceneObject(this); + var isPersistentObject = EditorUtility.IsPersistent(this); + if (isInPreviewScene || isPersistentObject) + return false; + + // An instance can share asset reference only with its prefab parent + var prefab = UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(this) as NavMeshSurface; + if (prefab != null && prefab.navMeshData == navMeshData) + return false; + + // Don't allow referencing an asset that's assigned to another surface + for (var i = 0; i < s_NavMeshSurfaces.Count; ++i) + { + var surface = s_NavMeshSurfaces[i]; + if (surface != this && surface.m_NavMeshData == m_NavMeshData) + return true; + } + + // Asset is not referenced by known surfaces + return false; + } + + void OnValidate() + { + if (UnshareNavMeshAsset()) + { + Debug.LogWarning("Duplicating NavMeshSurface does not duplicate the referenced navmesh data", this); + m_NavMeshData = null; + } + + var settings = NavMesh.GetSettingsByID(m_AgentTypeID); + if (settings.agentTypeID != -1) + { + // When unchecking the override control, revert to automatic value. + const float kMinVoxelSize = 0.01f; + if (!m_OverrideVoxelSize) + m_VoxelSize = settings.agentRadius / 3.0f; + if (m_VoxelSize < kMinVoxelSize) + m_VoxelSize = kMinVoxelSize; + + // When unchecking the override control, revert to default value. + const int kMinTileSize = 16; + const int kMaxTileSize = 1024; + const int kDefaultTileSize = 256; + + if (!m_OverrideTileSize) + m_TileSize = kDefaultTileSize; + // Make sure tilesize is in sane range. + if (m_TileSize < kMinTileSize) + m_TileSize = kMinTileSize; + if (m_TileSize > kMaxTileSize) + m_TileSize = kMaxTileSize; + } + } +#endif + } +} diff --git a/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs.meta b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs.meta new file mode 100644 index 00000000..0c0125bb --- /dev/null +++ b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f940a30f473c699b5a14a2a5922faa34 +timeCreated: 1477658803 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: e4f97225bcfb64760a1c81f460837f01, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index ad51b622..9d6bf8db 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -7,6 +7,7 @@ "com.unity.ml-agents": "file:../../com.unity.ml-agents", "com.unity.ml-agents.extensions": "file:../../com.unity.ml-agents.extensions", "com.unity.nuget.newtonsoft-json": "3.0.2", + "com.unity.terrain-tools": "5.0.2", "com.unity.test-framework": "1.1.33", "com.unity.toolchain.linux-x86_64": "2.0.4", "com.unity.toolchain.macos-x86_64-linux-x86_64": "2.0.3", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index e45ce3b2..7599e2fc 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -21,7 +21,7 @@ "url": "https://packages.unity.com" }, "com.unity.burst": { - "version": "1.7.3", + "version": "1.7.4", "depth": 2, "source": "registry", "dependencies": { @@ -110,6 +110,16 @@ }, "url": "https://packages.unity.com" }, + "com.unity.terrain-tools": { + "version": "5.0.2", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.test-framework": { "version": "1.1.33", "depth": 0, @@ -186,6 +196,21 @@ "source": "builtin", "dependencies": {} }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, "com.unity.modules.ui": { "version": "1.0.0", "depth": 1, diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index df0a3874..e984f8c4 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2022.2.0f1 -m_EditorVersionWithRevision: 2022.2.0f1 (35dcd44975df) +m_EditorVersion: 2022.2.1f1 +m_EditorVersionWithRevision: 2022.2.1f1 (4fead5835099) From e3826458851841be6c67bd6a2fdff6ecaf9c0856 Mon Sep 17 00:00:00 2001 From: Pano Date: Tue, 17 Jan 2023 15:14:26 +0100 Subject: [PATCH 2/8] working examlpe --- .../packerhand/Scenes/NavMeshExperiment.unity | 32 ++++--------- .../packerhand/Scripts/NavMeshTest.cs | 48 +++++++++++-------- .../Scripts/NavMeshSurface.cs | 5 +- 3 files changed, 38 insertions(+), 47 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity index c74457fe..bade570c 100644 --- a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity @@ -215,8 +215,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 431902170} - - component: {fileID: 431902171} - - component: {fileID: 431902172} + - component: {fileID: 431902173} + - component: {fileID: 431902174} m_Layer: 0 m_Name: NavMesh Surface XX m_TagString: Untagged @@ -237,9 +237,9 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &431902171 +--- !u!114 &431902173 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -251,7 +251,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &431902172 +--- !u!114 &431902174 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -310,8 +310,9 @@ Transform: - {fileID: 1149920266690001739} - {fileID: 2991230922353894447} - {fileID: 1374293670} + - {fileID: 1161835937} m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1161835933 GameObject: @@ -411,13 +412,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1161835933} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.5, z: 10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 + m_Father: {fileID: 1023523651} + m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1161835938 Rigidbody: @@ -458,7 +459,6 @@ GameObject: - component: {fileID: 1374293669} - component: {fileID: 1374293668} - component: {fileID: 1374293667} - - component: {fileID: 1374293671} - component: {fileID: 1374293672} m_Layer: 0 m_Name: Cube @@ -553,18 +553,6 @@ Transform: m_Father: {fileID: 1023523651} m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1374293671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374293666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!54 &1374293672 Rigidbody: m_ObjectHideFlags: 0 diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index 17ac72f4..c4588995 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -6,41 +6,30 @@ public class NavMeshTest : MonoBehaviour { - public NavMeshSurface nv1; - // Start is called before the first frame update void Start() { GameObject objectToMove = GameObject.Find("Cube"); Debug.Log($"%%%%%%%%%%%%%%%%% object to move name ===== {objectToMove.name}"); // Debug.Log($"%%%%%%%%%%%%%%%%% agenttype ===== {nv1.agentTypeID}"); - Rigidbody rb = objectToMove.GetComponent(); + Rigidbody rb = objectToMove.GetComponent(); Vector3 targetPosition = objectToMove.transform.position; - Debug.Log($"old box position =========== {objectToMove.transform.position}"); + // Debug.Log($"old box position =========== {objectToMove.transform.position}"); targetPosition = targetPosition + new Vector3(10,0,0); - Debug.Log($"target position =========== {targetPosition}"); + // Debug.Log($"target position =========== {targetPosition}"); rb.MovePosition(targetPosition); - Debug.Log($"new box position =========== {objectToMove.transform.position}"); - Debug.Log(".......................................................................... REMOVED all NavMesh data"); + // Debug.Log($"new box position =========== {objectToMove.transform.position}"); - Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Box}"); - Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Capsule}"); + // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Box}"); + // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Capsule}"); - // NavMeshSurface nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); - // nv1.BuildNavMesh(); - // // Sample next random point & cast ray to display it - // float range = 2.0f; - // Vector3 point; - // if (RandomPoint(objectToMove.transform.position, range, out point)) - // { - // Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); - // } } bool RandomPoint(Vector3 center, float range, out Vector3 result) { for (int i = 0; i < 3; i++) { + range = range + 0.5f; Vector3 randomPoint = center + Random.insideUnitSphere * range; NavMeshHit hit; if (NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas)) @@ -53,19 +42,36 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) return false; } - void Update(){ + void FixedUpdate(){ + + Debug.Log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FIXED UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); + // Remove & Rebuild the NavMesh NavMesh.RemoveAllNavMeshData(); - nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + NavMeshSurface nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); nv1.BuildNavMesh(); // Sample next random point & cast ray to display it - float range = 2.0f; Vector3 point; GameObject objectToMove = GameObject.Find("Cube"); + float range=2.0f; if (RandomPoint(objectToMove.transform.position, range, out point)) { Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); } } + // void Update(){ + // // Remove & Rebuild the NavMesh + // NavMesh.RemoveAllNavMeshData(); + // nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + // nv1.BuildNavMesh(); + // // Sample next random point & cast ray to display it + // Vector3 point; + // GameObject objectToMove = GameObject.Find("Cube"); + // if (RandomPoint(objectToMove.transform.position, range, out point)) + // { + // Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); + // } + // } + } diff --git a/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs index 700db137..633a081c 100644 --- a/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs +++ b/Assets/NavMeshComponents/Scripts/NavMeshSurface.cs @@ -108,7 +108,6 @@ void OnDisable() public void AddData() { #if UNITY_EDITOR - Debug.Log("UNITY EDITOR preview"); var isInPreviewScene = EditorSceneManager.IsPreviewSceneObject(this); var isPrefab = isInPreviewScene || EditorUtility.IsPersistent(this); if (isPrefab) @@ -118,15 +117,13 @@ public void AddData() return; } #endif - Debug.Log($"NavMeshDataInstance.valid =============== {m_NavMeshDataInstance.valid}"); if (m_NavMeshDataInstance.valid) return; - Debug.Log($"m_NavMeshData =============== {m_NavMeshData}"); if (m_NavMeshData != null) { - Debug.Log("Adding NavMeshData"); m_NavMeshDataInstance = NavMesh.AddNavMeshData(m_NavMeshData, transform.position, transform.rotation); + UpdateNavMesh(m_NavMeshData); m_NavMeshDataInstance.owner = this; } From 230a95b1c213dc528b9ddb05ff14cc32960db4b0 Mon Sep 17 00:00:00 2001 From: Pano Date: Tue, 17 Jan 2023 15:52:38 +0100 Subject: [PATCH 3/8] working example 2 --- .../packerhand/Scenes/NavMeshExperiment.unity | 63 ++++++++++++------- .../packerhand/Scripts/NavMeshTest.cs | 6 +- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity index bade570c..dca3e048 100644 --- a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity @@ -215,8 +215,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 431902170} - - component: {fileID: 431902173} - component: {fileID: 431902174} + - component: {fileID: 431902175} + - component: {fileID: 431902176} m_Layer: 0 m_Name: NavMesh Surface XX m_TagString: Untagged @@ -237,20 +238,8 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &431902173 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 431902168} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!114 &431902174 MonoBehaviour: m_ObjectHideFlags: 0 @@ -279,6 +268,40 @@ MonoBehaviour: m_OverrideVoxelSize: 0 m_VoxelSize: 0.16666667 m_NavMeshData: {fileID: 0} +--- !u!114 &431902175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431902168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!195 &431902176 +NavMeshAgent: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431902168} + m_Enabled: 1 + m_AgentTypeID: 0 + m_Radius: 0.5 + m_Speed: 3.5 + m_Acceleration: 8 + avoidancePriority: 50 + m_AngularSpeed: 120 + m_StoppingDistance: 0 + m_AutoTraverseOffMeshLink: 1 + m_AutoBraking: 1 + m_AutoRepath: 1 + m_Height: 2 + m_BaseOffset: 0 + m_WalkableMask: 4294967295 + m_ObstacleAvoidanceType: 4 --- !u!1 &1023523650 GameObject: m_ObjectHideFlags: 0 @@ -309,10 +332,8 @@ Transform: m_Children: - {fileID: 1149920266690001739} - {fileID: 2991230922353894447} - - {fileID: 1374293670} - - {fileID: 1161835937} m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1161835933 GameObject: @@ -417,8 +438,8 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1023523651} - m_RootOrder: -1 + m_Father: {fileID: 0} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1161835938 Rigidbody: @@ -550,8 +571,8 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1023523651} - m_RootOrder: -1 + m_Father: {fileID: 0} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1374293672 Rigidbody: diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index c4588995..21355407 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -7,6 +7,8 @@ public class NavMeshTest : MonoBehaviour { // Start is called before the first frame update + + float range = 2.0f; void Start() { GameObject objectToMove = GameObject.Find("Cube"); @@ -22,14 +24,13 @@ void Start() // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Box}"); // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Capsule}"); - } bool RandomPoint(Vector3 center, float range, out Vector3 result) { for (int i = 0; i < 3; i++) { - range = range + 0.5f; + range = range + 2.0f; Vector3 randomPoint = center + Random.insideUnitSphere * range; NavMeshHit hit; if (NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas)) @@ -53,7 +54,6 @@ void FixedUpdate(){ // Sample next random point & cast ray to display it Vector3 point; GameObject objectToMove = GameObject.Find("Cube"); - float range=2.0f; if (RandomPoint(objectToMove.transform.position, range, out point)) { Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); From b14a8c79f569485b3048185b83f67dc978c6c599 Mon Sep 17 00:00:00 2001 From: Pano Date: Wed, 18 Jan 2023 17:29:18 +0100 Subject: [PATCH 4/8] wrking example 3 --- .../packerhand/Scenes/NavMeshExperiment.meta | 8 ++ .../packerhand/Scenes/NavMeshExperiment.unity | 51 ++++-------- .../NavMesh-NavMesh Surface XX.asset | Bin 0 -> 11172 bytes .../NavMesh-NavMesh Surface XX.asset.meta | 8 ++ .../packerhand/Scripts/NavMeshTest.cs | 78 ++++++++---------- 5 files changed, 66 insertions(+), 79 deletions(-) create mode 100644 Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.meta create mode 100644 Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset create mode 100644 Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset.meta diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.meta b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.meta new file mode 100644 index 00000000..d854b0f1 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b50ad081902b61f199f2733600a970d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity index dca3e048..ae10bd15 100644 --- a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity @@ -215,9 +215,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 431902170} - - component: {fileID: 431902174} - component: {fileID: 431902175} - - component: {fileID: 431902176} + - component: {fileID: 431902177} m_Layer: 0 m_Name: NavMesh Surface XX m_TagString: Untagged @@ -240,7 +239,19 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &431902174 +--- !u!114 &431902175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431902168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &431902177 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -268,40 +279,6 @@ MonoBehaviour: m_OverrideVoxelSize: 0 m_VoxelSize: 0.16666667 m_NavMeshData: {fileID: 0} ---- !u!114 &431902175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 431902168} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1ebc7e7035ab1f459a40e39bfeb5beed, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!195 &431902176 -NavMeshAgent: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 431902168} - m_Enabled: 1 - m_AgentTypeID: 0 - m_Radius: 0.5 - m_Speed: 3.5 - m_Acceleration: 8 - avoidancePriority: 50 - m_AngularSpeed: 120 - m_StoppingDistance: 0 - m_AutoTraverseOffMeshLink: 1 - m_AutoBraking: 1 - m_AutoRepath: 1 - m_Height: 2 - m_BaseOffset: 0 - m_WalkableMask: 4294967295 - m_ObstacleAvoidanceType: 4 --- !u!1 &1023523650 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset new file mode 100644 index 0000000000000000000000000000000000000000..b14ba5e5955839603c9e95bc29a45267b6033004 GIT binary patch literal 11172 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 literal 0 HcmV?d00001 diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset.meta b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset.meta new file mode 100644 index 00000000..d5a32056 --- /dev/null +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment/NavMesh-NavMesh Surface XX.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32d0fb3b871e106b9b669c8695a3d464 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index 21355407..e59586cd 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -8,23 +8,13 @@ public class NavMeshTest : MonoBehaviour { // Start is called before the first frame update - float range = 2.0f; - void Start() - { - GameObject objectToMove = GameObject.Find("Cube"); - Debug.Log($"%%%%%%%%%%%%%%%%% object to move name ===== {objectToMove.name}"); - // Debug.Log($"%%%%%%%%%%%%%%%%% agenttype ===== {nv1.agentTypeID}"); - Rigidbody rb = objectToMove.GetComponent(); - Vector3 targetPosition = objectToMove.transform.position; - // Debug.Log($"old box position =========== {objectToMove.transform.position}"); - targetPosition = targetPosition + new Vector3(10,0,0); - // Debug.Log($"target position =========== {targetPosition}"); - rb.MovePosition(targetPosition); - // Debug.Log($"new box position =========== {objectToMove.transform.position}"); - - // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Box}"); - // Debug.Log($" NavMeshBuildSourceShape === {NavMeshBuildSourceShape.Capsule}"); - } + private float range=2.0f; + private Vector3 movePos; + private int cC; + private bool updateNM; + private NavMeshSurface nv1; + private Vector3 point; + private GameObject objectToMove; bool RandomPoint(Vector3 center, float range, out Vector3 result) { @@ -43,35 +33,39 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) return false; } - void FixedUpdate(){ - - Debug.Log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FIXED UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); + void Awake(){ + movePos = new Vector3(10,0.5f,0); + cC = 1; + updateNM = false; + objectToMove = GameObject.Find("Cube"); + nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + } - // Remove & Rebuild the NavMesh - NavMesh.RemoveAllNavMeshData(); - NavMeshSurface nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); - nv1.BuildNavMesh(); + void Start(){ + Rigidbody rb = objectToMove.GetComponent(); + Vector3 targetPosition = objectToMove.transform.position; + targetPosition = targetPosition + movePos; + rb.MovePosition(targetPosition); + updateNM = true; // Sample next random point & cast ray to display it - Vector3 point; - GameObject objectToMove = GameObject.Find("Cube"); if (RandomPoint(objectToMove.transform.position, range, out point)) { - Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); + Debug.DrawRay(point, Vector3.up, Color.blue, 5.0f); + Debug.Log($" random point === {point}"); } + GameObject cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube1.AddComponent(); + cube1.transform.position = movePos; + cube1.name = "cube" + cC.ToString(); } - // void Update(){ - // // Remove & Rebuild the NavMesh - // NavMesh.RemoveAllNavMeshData(); - // nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); - // nv1.BuildNavMesh(); - // // Sample next random point & cast ray to display it - // Vector3 point; - // GameObject objectToMove = GameObject.Find("Cube"); - // if (RandomPoint(objectToMove.transform.position, range, out point)) - // { - // Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); - // } - // } - -} + void FixedUpdate(){ + if ( updateNM == true ){ + Debug.Log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FIXED UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); + // Remove & Rebuild the NavMesh + NavMesh.RemoveAllNavMeshData(); + nv1.BuildNavMesh(); + updateNM = false; + } + } +} \ No newline at end of file From 9d8255b86774bee5b26af0a738e6c5e67ad1e43a Mon Sep 17 00:00:00 2001 From: Pano Date: Wed, 18 Jan 2023 21:14:14 +0100 Subject: [PATCH 5/8] spawn all --- .../packerhand/Scripts/NavMeshTest.cs | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index e59586cd..0e8eabc3 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -8,13 +8,16 @@ public class NavMeshTest : MonoBehaviour { // Start is called before the first frame update - private float range=2.0f; + private float range; private Vector3 movePos; - private int cC; - private bool updateNM; + private Vector3 spawnPos; private NavMeshSurface nv1; private Vector3 point; private GameObject objectToMove; + private int num_boxes; + private int inum; + private GameObject cube1; + private Rigidbody rb; bool RandomPoint(Vector3 center, float range, out Vector3 result) { @@ -33,39 +36,44 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) return false; } + // void Delay(){Debug.Log("delay.....");} + void Awake(){ - movePos = new Vector3(10,0.5f,0); - cC = 1; - updateNM = false; + // interval = 3.0f; + spawnPos = new Vector3(10,0.5f,0); + movePos = new Vector3(1,0,0); + num_boxes = 5; objectToMove = GameObject.Find("Cube"); nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); } void Start(){ Rigidbody rb = objectToMove.GetComponent(); - Vector3 targetPosition = objectToMove.transform.position; - targetPosition = targetPosition + movePos; - rb.MovePosition(targetPosition); - updateNM = true; - // Sample next random point & cast ray to display it - if (RandomPoint(objectToMove.transform.position, range, out point)) - { - Debug.DrawRay(point, Vector3.up, Color.blue, 5.0f); - Debug.Log($" random point === {point}"); - } - GameObject cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); - cube1.AddComponent(); - cube1.transform.position = movePos; - cube1.name = "cube" + cC.ToString(); + rb.MovePosition(objectToMove.transform.position + movePos); + // if (RandomPoint(objectToMove.transform.position, range, out point)) + // { + // Debug.DrawRay(point, Vector3.up, Color.blue, 5.0f); + // Debug.Log($" random point === {point}"); + // } } - void FixedUpdate(){ - if ( updateNM == true ){ - Debug.Log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FIXED UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); - // Remove & Rebuild the NavMesh - NavMesh.RemoveAllNavMeshData(); - nv1.BuildNavMesh(); - updateNM = false; + void spawnAndMove(){ + for (inum = 1; inum < num_boxes; inum++){ + Invoke("Delay",1f); + cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube1.transform.position = spawnPos; + cube1.name = "cube" + inum.ToString(); + cube1.AddComponent(); + rb = cube1.GetComponent(); + rb.MovePosition(spawnPos + movePos * (float)inum); } } + + void FixedUpdate(){ + spawnAndMove(); + } + + void Update(){ + nv1.BuildNavMesh(); + } } \ No newline at end of file From 0d03844b03bc31f3a2da62581c55689c055d5274 Mon Sep 17 00:00:00 2001 From: Pano Date: Thu, 19 Jan 2023 00:30:27 +0100 Subject: [PATCH 6/8] working example with Bryan --- .../packerhand/Scripts/NavMeshTest.cs | 50 ++++++++++++------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index 0e8eabc3..49e59280 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -14,10 +14,9 @@ public class NavMeshTest : MonoBehaviour private NavMeshSurface nv1; private Vector3 point; private GameObject objectToMove; - private int num_boxes; - private int inum; private GameObject cube1; private Rigidbody rb; + private bool spawnModifier; bool RandomPoint(Vector3 center, float range, out Vector3 result) { @@ -36,13 +35,15 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) return false; } - // void Delay(){Debug.Log("delay.....");} + IEnumerator Delay(){ + yield return new WaitForSeconds(3); + spawnModifier = true; + } void Awake(){ - // interval = 3.0f; + spawnModifier = true; spawnPos = new Vector3(10,0.5f,0); - movePos = new Vector3(1,0,0); - num_boxes = 5; + movePos = new Vector3(20,0,0); objectToMove = GameObject.Find("Cube"); nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); } @@ -57,23 +58,36 @@ void Start(){ // } } - void spawnAndMove(){ - for (inum = 1; inum < num_boxes; inum++){ - Invoke("Delay",1f); - cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); - cube1.transform.position = spawnPos; - cube1.name = "cube" + inum.ToString(); - cube1.AddComponent(); - rb = cube1.GetComponent(); - rb.MovePosition(spawnPos + movePos * (float)inum); - } + void Spawn(){ + cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube1.transform.position = spawnPos; + cube1.name = "cube1"; + cube1.AddComponent(); + // rb is the box is getting moved + rb = cube1.GetComponent(); + } + void Move(){ + Vector3 targetPosition = movePos + new Vector3(0,0,1); + var dx = targetPosition - cube1.transform.position; + rb.MovePosition(cube1.transform.position + dx/100); + dx = targetPosition - cube1.transform.position; + if ( dx.x < 2f ){ + spawnModifier = true; + }; + } void FixedUpdate(){ - spawnAndMove(); + if (spawnModifier == true){ + Spawn(); + spawnModifier = false; + } + if (spawnModifier == false){ + Move(); + } } - void Update(){ + void LateUpdate(){ nv1.BuildNavMesh(); } } \ No newline at end of file From 25829e4e86ceb0e1d15ba0d6ea9b22386a61dbb5 Mon Sep 17 00:00:00 2001 From: Pano Date: Thu, 19 Jan 2023 15:13:34 +0100 Subject: [PATCH 7/8] back to spawnAndMove() --- .../packerhand/Scripts/NavMeshTest.cs | 85 ++++++++++--------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index 49e59280..49082c66 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -9,14 +9,14 @@ public class NavMeshTest : MonoBehaviour // Start is called before the first frame update private float range; - private Vector3 movePos; + private Vector3 targetPosition; private Vector3 spawnPos; private NavMeshSurface nv1; private Vector3 point; - private GameObject objectToMove; - private GameObject cube1; + private GameObject cubeX; private Rigidbody rb; private bool spawnModifier; + // private NavMeshAgent agentX; bool RandomPoint(Vector3 center, float range, out Vector3 result) { @@ -35,56 +35,59 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) return false; } - IEnumerator Delay(){ - yield return new WaitForSeconds(3); - spawnModifier = true; - } - void Awake(){ - spawnModifier = true; spawnPos = new Vector3(10,0.5f,0); - movePos = new Vector3(20,0,0); - objectToMove = GameObject.Find("Cube"); nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + // agentX = GameObject.Find("NavMesh Surface XX").GetComponent(); } void Start(){ - Rigidbody rb = objectToMove.GetComponent(); - rb.MovePosition(objectToMove.transform.position + movePos); - // if (RandomPoint(objectToMove.transform.position, range, out point)) - // { - // Debug.DrawRay(point, Vector3.up, Color.blue, 5.0f); - // Debug.Log($" random point === {point}"); - // } + spawnModifier = true; + targetPosition = new Vector3(20,0,0); + // // Sample random point and draw ray + // // if (RandomPoint(cubeX.transform.position, range, out point)) + // // { + // // Debug.DrawRay(point, Vector3.up, Color.blue, 5.0f); + // // Debug.Log($" random point === {point}"); + // // } } - void Spawn(){ - cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); - cube1.transform.position = spawnPos; - cube1.name = "cube1"; - cube1.AddComponent(); - // rb is the box is getting moved - rb = cube1.GetComponent(); - } - void Move(){ - Vector3 targetPosition = movePos + new Vector3(0,0,1); - var dx = targetPosition - cube1.transform.position; - rb.MovePosition(cube1.transform.position + dx/100); - dx = targetPosition - cube1.transform.position; - if ( dx.x < 2f ){ - spawnModifier = true; - }; + void SpawnAndMove(){ + if ( spawnModifier == true ){ + spawnModifier = false; + // Spawn box + Debug.Log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 Spawn "); + cubeX = GameObject.CreatePrimitive(PrimitiveType.Cube); + cubeX.transform.position = spawnPos; + cubeX.name = "cubeX"; + cubeX.AddComponent(); + rb = cubeX.GetComponent(); + + // cubeX.AddComponent(); + // agentX.radius = 3.1f; + // nv1.agentTypeID = agentX.agentTypeID; + // NavMeshBuildSettings buildSettings = new NavMeshBuildSettings(); + + // nv1.agentRadius = 5.f; + // NavMesh.CreateSettings(); + // Debug.Log($" agent type ============ {buildSettings.agentTypeID}"); + } + if ( spawnModifier == false ){ + // Move box + var dx = targetPosition - cubeX.transform.position; + rb.MovePosition(cubeX.transform.position + dx / 100); + dx = targetPosition - cubeX.transform.position; + // Debug.Log($" %%%%%%%%%%%%%%% dx.x ======== {dx.x}"); + if ( dx.x < 2f ){ + spawnModifier = true; + targetPosition = targetPosition + new Vector3(0,0,2); + } + } } void FixedUpdate(){ - if (spawnModifier == true){ - Spawn(); - spawnModifier = false; - } - if (spawnModifier == false){ - Move(); - } + SpawnAndMove(); } void LateUpdate(){ From 124ca6a057fcfa71b77d322dbcc9260db1ce476b Mon Sep 17 00:00:00 2001 From: Pano Date: Thu, 19 Jan 2023 19:18:21 +0100 Subject: [PATCH 8/8] added NavMeshAgent but does not work --- .../packerhand/Scenes/NavMeshExperiment.unity | 23 +++++++++++++++++++ .../packerhand/Scripts/NavMeshTest.cs | 16 +++++-------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity index ae10bd15..e03219b0 100644 --- a/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity +++ b/Assets/ML-Agents/packerhand/Scenes/NavMeshExperiment.unity @@ -217,6 +217,7 @@ GameObject: - component: {fileID: 431902170} - component: {fileID: 431902175} - component: {fileID: 431902177} + - component: {fileID: 431902178} m_Layer: 0 m_Name: NavMesh Surface XX m_TagString: Untagged @@ -279,6 +280,28 @@ MonoBehaviour: m_OverrideVoxelSize: 0 m_VoxelSize: 0.16666667 m_NavMeshData: {fileID: 0} +--- !u!195 &431902178 +NavMeshAgent: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431902168} + m_Enabled: 1 + m_AgentTypeID: 0 + m_Radius: 0.5 + m_Speed: 3.5 + m_Acceleration: 8 + avoidancePriority: 50 + m_AngularSpeed: 120 + m_StoppingDistance: 0 + m_AutoTraverseOffMeshLink: 1 + m_AutoBraking: 1 + m_AutoRepath: 1 + m_Height: 2 + m_BaseOffset: 0 + m_WalkableMask: 4294967295 + m_ObstacleAvoidanceType: 4 --- !u!1 &1023523650 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs index 49082c66..bf9624e0 100644 --- a/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs +++ b/Assets/ML-Agents/packerhand/Scripts/NavMeshTest.cs @@ -12,11 +12,11 @@ public class NavMeshTest : MonoBehaviour private Vector3 targetPosition; private Vector3 spawnPos; private NavMeshSurface nv1; + private NavMeshAgent nva1; private Vector3 point; private GameObject cubeX; private Rigidbody rb; private bool spawnModifier; - // private NavMeshAgent agentX; bool RandomPoint(Vector3 center, float range, out Vector3 result) { @@ -37,7 +37,8 @@ bool RandomPoint(Vector3 center, float range, out Vector3 result) void Awake(){ spawnPos = new Vector3(10,0.5f,0); - nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + nv1 = GameObject.Find("NavMesh Surface XX").GetComponent(); + nva1 = GameObject.Find("NavMesh Surface XX").GetComponent(); // agentX = GameObject.Find("NavMesh Surface XX").GetComponent(); } @@ -63,15 +64,10 @@ void SpawnAndMove(){ cubeX.AddComponent(); rb = cubeX.GetComponent(); - // cubeX.AddComponent(); - // agentX.radius = 3.1f; - // nv1.agentTypeID = agentX.agentTypeID; - + Debug.Log($" nva1 name ============ {nva1.name}"); + Debug.Log($" nva1 height ============ {nva1.height}"); + Debug.Log($" nva1 agentTypeID ============ {nva1.agentTypeID}"); // NavMeshBuildSettings buildSettings = new NavMeshBuildSettings(); - - // nv1.agentRadius = 5.f; - // NavMesh.CreateSettings(); - // Debug.Log($" agent type ============ {buildSettings.agentTypeID}"); } if ( spawnModifier == false ){ // Move box