From 6854cca5a6beb58457a0764ec1128070da0581b4 Mon Sep 17 00:00:00 2001 From: "JSD\\13999" <1399945104@qq.com> Date: Mon, 15 Jun 2026 16:19:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(benchmark):=20=E6=8E=A5=E5=85=A5=20AstarPr?= =?UTF-8?q?o=20RVO=20=E5=8E=8B=E6=B5=8B=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FishROV/Assets/Scenes/AvoidancePerfDemo.unity | 7 + .../Benchmark/AvoidanceBenchmarkTypes.cs | 6 +- .../FrameworkAdapters/AstarProRvoAdapter.cs | 167 ++++++++++++++++++ .../AstarProRvoAdapter.cs.meta | 11 ++ .../AstarProRvoVelocityLikeAdapter.cs | 166 +++++++++++++++++ .../AstarProRvoVelocityLikeAdapter.cs.meta | 11 ++ .../AvoidanceAdapterRegistry.cs | 6 +- .../FrameworkAdapters/Rvo2Adapter.cs | 1 + FishROV/Assets/Settings.meta | 8 + FishROV/Assets/Settings/Resources.meta | 8 + .../Settings/Resources/AstarGizmos.asset | 23 +++ .../Settings/Resources/AstarGizmos.asset.meta | 8 + FishROV/Assets/test.mat | 83 +++++++++ FishROV/Assets/test.mat.meta | 8 + FishROV/Packages/manifest.json | 3 + FishROV/Packages/packages-lock.json | 34 ++++ .../BurstAotSettings_Android.json | 17 ++ .../BurstAotSettings_StandaloneWindows.json | 18 ++ .../ProjectSettings/BurstAotSettings_iOS.json | 16 ++ .../CommonBurstAotSettings.json | 6 + .../ProjectSettings/EditorBuildSettings.asset | 2 +- FishROV/ProjectSettings/QualitySettings.asset | 124 +++++++++++-- .../ProjectSettings/TimelineSettings.asset | 16 ++ .../com.arongranberg.astar/settings.asset | 15 ++ 24 files changed, 740 insertions(+), 24 deletions(-) create mode 100644 FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs create mode 100644 FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs.meta create mode 100644 FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs create mode 100644 FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs.meta create mode 100644 FishROV/Assets/Settings.meta create mode 100644 FishROV/Assets/Settings/Resources.meta create mode 100644 FishROV/Assets/Settings/Resources/AstarGizmos.asset create mode 100644 FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta create mode 100644 FishROV/Assets/test.mat create mode 100644 FishROV/Assets/test.mat.meta create mode 100644 FishROV/ProjectSettings/BurstAotSettings_Android.json create mode 100644 FishROV/ProjectSettings/BurstAotSettings_StandaloneWindows.json create mode 100644 FishROV/ProjectSettings/BurstAotSettings_iOS.json create mode 100644 FishROV/ProjectSettings/CommonBurstAotSettings.json create mode 100644 FishROV/ProjectSettings/TimelineSettings.asset create mode 100644 FishROV/ProjectSettings/com.arongranberg.astar/settings.asset diff --git a/FishROV/Assets/Scenes/AvoidancePerfDemo.unity b/FishROV/Assets/Scenes/AvoidancePerfDemo.unity index 0f1aee0..e582ecd 100644 --- a/FishROV/Assets/Scenes/AvoidancePerfDemo.unity +++ b/FishROV/Assets/Scenes/AvoidancePerfDemo.unity @@ -165,3 +165,10 @@ MonoBehaviour: dimensionMode: 1 viewMode: 0 fishCount: 300 + fishMaterial: {fileID: 2100000, guid: 48d562f3b265c9d4a803f967cf69c6f0, type: 2} + fishMaxSpeed: 2.4 + baitDemoMaxSpeed: 4.2 + speedMultiplier: 1 + timeScale: 1 + hookDropHeight: 10 + hookDropDuration: 1.5 diff --git a/FishROV/Assets/Scripts/Benchmark/AvoidanceBenchmarkTypes.cs b/FishROV/Assets/Scripts/Benchmark/AvoidanceBenchmarkTypes.cs index 7c9bdd7..b8d23e9 100644 --- a/FishROV/Assets/Scripts/Benchmark/AvoidanceBenchmarkTypes.cs +++ b/FishROV/Assets/Scripts/Benchmark/AvoidanceBenchmarkTypes.cs @@ -7,7 +7,8 @@ namespace FishROV.AvoidanceBenchmark { NoAvoidance = 0, Rvo2 = 1, - SamplingLocal = 2 + AstarProRvo = 2, + AstarProRvoVelocityLike = 3 } public enum AvoidanceScenarioKind @@ -15,7 +16,8 @@ namespace FishROV.AvoidanceBenchmark FreeSwim = 0, CrossFlow = 1, NarrowPassage = 2, - DenseCircleStress = 3 + DenseCircleStress = 3, + BaitScramble = 4 } public enum AvoidanceDimensionMode diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs new file mode 100644 index 0000000..3665ae7 --- /dev/null +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs @@ -0,0 +1,167 @@ +using System.Collections.Generic; +using Pathfinding.RVO; +using Pathfinding.Util; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; + +namespace FishROV.AvoidanceBenchmark +{ + public sealed class AstarProRvoAdapter : IAvoidanceAdapter + { + private const float TimeHorizon = 2.5f; + private const float ObstacleTimeHorizon = 2.5f; + private const float TargetLookAheadDistanceMultiplier = 4f; + private const float BoundaryPadding = 0.15f; + + private readonly Dictionary agents = new Dictionary(512); + private readonly Dictionary verticalVelocities = new Dictionary(512); + private SimulatorBurst simulator; + private AvoidanceBenchmarkConfig config; + + public string Name => "A* Pro RVO"; + public bool IsAvailable => simulator != null; + public string Status => config != null && config.DimensionMode == AvoidanceDimensionMode.XYZ3D + ? $"A* Pathfinding Project Pro RVO 已接入,当前 {agents.Count} 个对象;RVO 按 XZ 平面计算,3D 压测会投影为水平避障。" + : $"A* Pathfinding Project Pro RVO 已接入,当前 {agents.Count} 个对象。"; + + public void Initialize(AvoidanceBenchmarkConfig config) + { + this.config = config.Clone(); + agents.Clear(); + verticalVelocities.Clear(); + simulator = new SimulatorBurst(MovementPlane.XZ) + { + HardCollisions = true, + SymmetryBreakingBias = 0.1f, + UseNavmeshAsObstacle = false + }; + } + + public BenchmarkAgent CreateAgent(BenchmarkAgentSpawnInfo spawnInfo, Transform parent) + { + var agent = BenchmarkAgent.CreatePrimitive(spawnInfo, parent); + if (simulator == null) + { + return agent; + } + + var rvoAgent = simulator.AddAgent(spawnInfo.Position); + rvoAgent.MovementPlane = SimpleMovementPlane.XZPlane; + rvoAgent.Radius = Mathf.Max(0.01f, spawnInfo.Radius); + rvoAgent.Height = Mathf.Max(0.01f, spawnInfo.Height); + rvoAgent.AgentTimeHorizon = TimeHorizon; + rvoAgent.ObstacleTimeHorizon = ObstacleTimeHorizon; + rvoAgent.MaxNeighbours = Mathf.Max(1, config.MaxNeighbours); + rvoAgent.Priority = Mathf.Clamp01(spawnInfo.Priority <= 0f ? 0.5f : spawnInfo.Priority); + rvoAgent.Layer = RVOLayer.DefaultAgent; + rvoAgent.CollidesWith = (RVOLayer)(-1); + rvoAgent.Position = spawnInfo.Position; + rvoAgent.SetTarget(spawnInfo.Position, 0f, agent.MaxSpeed, NoEndOfPath()); + agents[agent] = rvoAgent; + verticalVelocities[agent] = 0f; + return agent; + } + + public void SetPreferredVelocity(BenchmarkAgent agent, Vector3 preferredVelocity) + { + if (simulator == null || !agents.TryGetValue(agent, out var rvoAgent)) + { + agent.ApplyVelocity(preferredVelocity); + return; + } + + var clamped = Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed); + var horizontal = new Vector3(clamped.x, 0f, clamped.z); + var speed = Mathf.Min(agent.MaxSpeed, horizontal.magnitude); + var position = agent.transform.position; + verticalVelocities[agent] = config.DimensionMode == AvoidanceDimensionMode.XYZ3D ? clamped.y : 0f; + rvoAgent.Position = position; + + if (speed <= 0.001f) + { + rvoAgent.SetTarget(position, 0f, agent.MaxSpeed, NoEndOfPath()); + return; + } + + var target = position + horizontal.normalized * Mathf.Max(agent.Radius * 2f, config.ArenaRadius * TargetLookAheadDistanceMultiplier); + rvoAgent.SetTarget(target, speed, agent.MaxSpeed, NoEndOfPath()); + } + + public void SetTarget(BenchmarkAgent agent, Vector3 target) + { + agent.Target = target; + } + + public void Tick(float deltaTime) + { + if (simulator == null || deltaTime <= 0f) + { + return; + } + + simulator.Update(default(JobHandle), Mathf.Max(0.001f, deltaTime), false, Allocator.TempJob).Complete(); + + foreach (var pair in agents) + { + var agent = pair.Key; + var rvoAgent = pair.Value; + var direction = rvoAgent.CalculatedTargetPoint - agent.transform.position; + direction.y = 0f; + + var speed = Mathf.Min(agent.MaxSpeed, rvoAgent.CalculatedSpeed); + var velocity = direction.sqrMagnitude > 0.0001f + ? direction.normalized * speed + : Vector3.zero; + velocity = KeepVelocityInsideArena(agent.transform.position, velocity); + if (verticalVelocities.TryGetValue(agent, out var verticalVelocity)) + { + velocity.y = verticalVelocity; + } + agent.ApplyVelocity(velocity); + } + } + + public void Dispose() + { + agents.Clear(); + verticalVelocities.Clear(); + simulator?.OnDestroy(); + simulator = null; + config = null; + } + + private static Vector3 NoEndOfPath() + { + return new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); + } + + private Vector3 KeepVelocityInsideArena(Vector3 position, Vector3 velocity) + { + if (config == null) + { + return velocity; + } + + var flatPosition = new Vector2(position.x, position.z); + var flatVelocity = new Vector2(velocity.x, velocity.z); + var radius = Mathf.Max(0.01f, config.ArenaRadius - BoundaryPadding); + if (flatPosition.magnitude < radius || flatVelocity.sqrMagnitude <= 0.0001f) + { + return velocity; + } + + var outward = flatPosition.normalized; + var outwardSpeed = Vector2.Dot(flatVelocity, outward); + if (outwardSpeed <= 0f) + { + return velocity; + } + + flatVelocity -= outward * outwardSpeed; + velocity.x = flatVelocity.x; + velocity.z = flatVelocity.y; + return velocity; + } + } +} diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs.meta b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs.meta new file mode 100644 index 0000000..1f6d4c5 --- /dev/null +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoAdapter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c15d8b6404f05fb49bbe215a0d853b90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs new file mode 100644 index 0000000..40cf1ec --- /dev/null +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs @@ -0,0 +1,166 @@ +using System.Collections.Generic; +using Pathfinding.RVO; +using Pathfinding.Util; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; + +namespace FishROV.AvoidanceBenchmark +{ + public sealed class AstarProRvoVelocityLikeAdapter : IAvoidanceAdapter + { + private const float TimeHorizon = 2.5f; + private const float ObstacleTimeHorizon = 2.5f; + private const float BoundaryPadding = 0.15f; + + private readonly Dictionary agents = new Dictionary(512); + private readonly Dictionary verticalVelocities = new Dictionary(512); + private SimulatorBurst simulator; + private AvoidanceBenchmarkConfig config; + + public string Name => "A* Pro RVO VelocityLike"; + public bool IsAvailable => simulator != null; + public string Status => config != null && config.DimensionMode == AvoidanceDimensionMode.XYZ3D + ? $"A* Pathfinding Project Pro RVO velocity-like adapter active, {agents.Count} agents; RVO still solves on XZ plane." + : $"A* Pathfinding Project Pro RVO velocity-like adapter active, {agents.Count} agents."; + + public void Initialize(AvoidanceBenchmarkConfig config) + { + this.config = config.Clone(); + agents.Clear(); + verticalVelocities.Clear(); + simulator = new SimulatorBurst(MovementPlane.XZ) + { + HardCollisions = true, + SymmetryBreakingBias = 0.1f, + UseNavmeshAsObstacle = false + }; + } + + public BenchmarkAgent CreateAgent(BenchmarkAgentSpawnInfo spawnInfo, Transform parent) + { + var agent = BenchmarkAgent.CreatePrimitive(spawnInfo, parent); + if (simulator == null) + { + return agent; + } + + var rvoAgent = simulator.AddAgent(spawnInfo.Position); + rvoAgent.MovementPlane = SimpleMovementPlane.XZPlane; + rvoAgent.Radius = Mathf.Max(0.01f, spawnInfo.Radius); + rvoAgent.Height = Mathf.Max(0.01f, spawnInfo.Height); + rvoAgent.AgentTimeHorizon = TimeHorizon; + rvoAgent.ObstacleTimeHorizon = ObstacleTimeHorizon; + rvoAgent.MaxNeighbours = Mathf.Max(1, config.MaxNeighbours); + rvoAgent.Priority = Mathf.Clamp01(spawnInfo.Priority <= 0f ? 0.5f : spawnInfo.Priority); + rvoAgent.Layer = RVOLayer.DefaultAgent; + rvoAgent.CollidesWith = (RVOLayer)(-1); + rvoAgent.Position = spawnInfo.Position; + rvoAgent.SetTarget(spawnInfo.Position, 0f, agent.MaxSpeed, NoEndOfPath()); + agents[agent] = rvoAgent; + verticalVelocities[agent] = 0f; + return agent; + } + + public void SetPreferredVelocity(BenchmarkAgent agent, Vector3 preferredVelocity) + { + if (simulator == null || !agents.TryGetValue(agent, out var rvoAgent)) + { + agent.ApplyVelocity(preferredVelocity); + return; + } + + var clamped = Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed); + var horizontal = new Vector3(clamped.x, 0f, clamped.z); + var speed = Mathf.Min(agent.MaxSpeed, horizontal.magnitude); + var position = agent.transform.position; + verticalVelocities[agent] = config.DimensionMode == AvoidanceDimensionMode.XYZ3D ? clamped.y : 0f; + rvoAgent.Position = position; + + if (speed <= 0.001f) + { + rvoAgent.SetTarget(position, 0f, agent.MaxSpeed, NoEndOfPath()); + return; + } + + var target = position + horizontal; + rvoAgent.SetTarget(target, speed, speed, NoEndOfPath()); + } + + public void SetTarget(BenchmarkAgent agent, Vector3 target) + { + agent.Target = target; + } + + public void Tick(float deltaTime) + { + if (simulator == null || deltaTime <= 0f) + { + return; + } + + simulator.Update(default(JobHandle), Mathf.Max(0.001f, deltaTime), false, Allocator.TempJob).Complete(); + + foreach (var pair in agents) + { + var agent = pair.Key; + var rvoAgent = pair.Value; + var direction = rvoAgent.CalculatedTargetPoint - agent.transform.position; + direction.y = 0f; + + var speed = Mathf.Min(agent.MaxSpeed, rvoAgent.CalculatedSpeed); + var velocity = direction.sqrMagnitude > 0.0001f + ? direction.normalized * speed + : Vector3.zero; + velocity = KeepVelocityInsideArena(agent.transform.position, velocity); + if (verticalVelocities.TryGetValue(agent, out var verticalVelocity)) + { + velocity.y = verticalVelocity; + } + agent.ApplyVelocity(velocity); + } + } + + public void Dispose() + { + agents.Clear(); + verticalVelocities.Clear(); + simulator?.OnDestroy(); + simulator = null; + config = null; + } + + private static Vector3 NoEndOfPath() + { + return new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); + } + + private Vector3 KeepVelocityInsideArena(Vector3 position, Vector3 velocity) + { + if (config == null) + { + return velocity; + } + + var flatPosition = new Vector2(position.x, position.z); + var flatVelocity = new Vector2(velocity.x, velocity.z); + var radius = Mathf.Max(0.01f, config.ArenaRadius - BoundaryPadding); + if (flatPosition.magnitude < radius || flatVelocity.sqrMagnitude <= 0.0001f) + { + return velocity; + } + + var outward = flatPosition.normalized; + var outwardSpeed = Vector2.Dot(flatVelocity, outward); + if (outwardSpeed <= 0f) + { + return velocity; + } + + flatVelocity -= outward * outwardSpeed; + velocity.x = flatVelocity.x; + velocity.z = flatVelocity.y; + return velocity; + } + } +} diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs.meta b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs.meta new file mode 100644 index 0000000..4f2e0b2 --- /dev/null +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AstarProRvoVelocityLikeAdapter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc0b8d77778b4af6bfd3e9632ff02c48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AvoidanceAdapterRegistry.cs b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AvoidanceAdapterRegistry.cs index 1db5ef8..15c3ce5 100644 --- a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AvoidanceAdapterRegistry.cs +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/AvoidanceAdapterRegistry.cs @@ -10,8 +10,10 @@ namespace FishROV.AvoidanceBenchmark return new NoAvoidanceAdapter(); case AvoidanceFrameworkKind.Rvo2: return new Rvo2Adapter(); - case AvoidanceFrameworkKind.SamplingLocal: - return new SamplingLocalAvoidanceAdapter(); + case AvoidanceFrameworkKind.AstarProRvo: + return new AstarProRvoAdapter(); + case AvoidanceFrameworkKind.AstarProRvoVelocityLike: + return new AstarProRvoVelocityLikeAdapter(); default: return new UnavailableAvoidanceAdapter(kind); } diff --git a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/Rvo2Adapter.cs b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/Rvo2Adapter.cs index a3db57f..1d7e998 100644 --- a/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/Rvo2Adapter.cs +++ b/FishROV/Assets/Scripts/Benchmark/FrameworkAdapters/Rvo2Adapter.cs @@ -66,6 +66,7 @@ namespace FishROV.AvoidanceBenchmark } simulator.SetAgentPosition(id, ToRvoVector(agent.transform.position)); + simulator.SetAgentMaxSpeed(id, Mathf.Max(0.01f, agent.MaxSpeed)); simulator.SetAgentPrefVelocity(id, ToRvoVector(Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed))); } diff --git a/FishROV/Assets/Settings.meta b/FishROV/Assets/Settings.meta new file mode 100644 index 0000000..0886809 --- /dev/null +++ b/FishROV/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b6e9d462e8dff84bb55e413c65abd73 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Assets/Settings/Resources.meta b/FishROV/Assets/Settings/Resources.meta new file mode 100644 index 0000000..1f623e6 --- /dev/null +++ b/FishROV/Assets/Settings/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ae2ae52201ae7e4cb93944bcf40ed31 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Assets/Settings/Resources/AstarGizmos.asset b/FishROV/Assets/Settings/Resources/AstarGizmos.asset new file mode 100644 index 0000000..2db24cc --- /dev/null +++ b/FishROV/Assets/Settings/Resources/AstarGizmos.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98e3089fbc7bff2b78412546c703c554, type: 3} + m_Name: AstarGizmos + m_EditorClassIdentifier: + version: 0 + settings: + lineOpacity: 1 + solidOpacity: 0.55 + textOpacity: 1 + lineOpacityBehindObjects: 0.12 + solidOpacityBehindObjects: 0.45 + textOpacityBehindObjects: 0.9 + curveResolution: 1 diff --git a/FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta b/FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta new file mode 100644 index 0000000..ed0b82e --- /dev/null +++ b/FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7535552aa4143bd41b4196e5eeb2e5ba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Assets/test.mat b/FishROV/Assets/test.mat new file mode 100644 index 0000000..001e015 --- /dev/null +++ b/FishROV/Assets/test.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: test + m_Shader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/FishROV/Assets/test.mat.meta b/FishROV/Assets/test.mat.meta new file mode 100644 index 0000000..2c344ed --- /dev/null +++ b/FishROV/Assets/test.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48d562f3b265c9d4a803f967cf69c6f0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/FishROV/Packages/manifest.json b/FishROV/Packages/manifest.json index bf7b59e..849c56f 100644 --- a/FishROV/Packages/manifest.json +++ b/FishROV/Packages/manifest.json @@ -1,5 +1,8 @@ { "dependencies": { + "com.unity.burst": "1.8.7", + "com.unity.collections": "1.5.1", + "com.unity.mathematics": "1.2.6", "com.unity.test-framework": "1.1.33", "com.unity.textmeshpro": "3.0.7", "com.unity.timeline": "1.7.7", diff --git a/FishROV/Packages/packages-lock.json b/FishROV/Packages/packages-lock.json index 84de86d..696f91a 100644 --- a/FishROV/Packages/packages-lock.json +++ b/FishROV/Packages/packages-lock.json @@ -1,5 +1,25 @@ { "dependencies": { + "com.unity.burst": { + "version": "1.8.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.collections": { + "version": "1.5.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.6", + "com.unity.nuget.mono-cecil": "1.11.4", + "com.unity.test-framework": "1.1.31" + }, + "url": "https://packages.unity.cn" + }, "com.unity.ext.nunit": { "version": "1.0.6", "depth": 1, @@ -7,6 +27,20 @@ "dependencies": {}, "url": "https://packages.unity.cn" }, + "com.unity.mathematics": { + "version": "1.2.6", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, "com.unity.test-framework": { "version": "1.1.33", "depth": 0, diff --git a/FishROV/ProjectSettings/BurstAotSettings_Android.json b/FishROV/ProjectSettings/BurstAotSettings_Android.json new file mode 100644 index 0000000..ce2d8aa --- /dev/null +++ b/FishROV/ProjectSettings/BurstAotSettings_Android.json @@ -0,0 +1,17 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "DebugDataKind": 1, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "CpuTargetsArm64": 512, + "OptimizeFor": 0 + } +} diff --git a/FishROV/ProjectSettings/BurstAotSettings_StandaloneWindows.json b/FishROV/ProjectSettings/BurstAotSettings_StandaloneWindows.json new file mode 100644 index 0000000..58cf25f --- /dev/null +++ b/FishROV/ProjectSettings/BurstAotSettings_StandaloneWindows.json @@ -0,0 +1,18 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "DebugDataKind": 1, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "CpuTargetsX32": 6, + "CpuTargetsX64": 72, + "OptimizeFor": 0 + } +} diff --git a/FishROV/ProjectSettings/BurstAotSettings_iOS.json b/FishROV/ProjectSettings/BurstAotSettings_iOS.json new file mode 100644 index 0000000..eed54c3 --- /dev/null +++ b/FishROV/ProjectSettings/BurstAotSettings_iOS.json @@ -0,0 +1,16 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "DebugDataKind": 1, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "OptimizeFor": 0 + } +} diff --git a/FishROV/ProjectSettings/CommonBurstAotSettings.json b/FishROV/ProjectSettings/CommonBurstAotSettings.json new file mode 100644 index 0000000..0293daf --- /dev/null +++ b/FishROV/ProjectSettings/CommonBurstAotSettings.json @@ -0,0 +1,6 @@ +{ + "MonoBehaviour": { + "Version": 4, + "DisabledWarnings": "" + } +} diff --git a/FishROV/ProjectSettings/EditorBuildSettings.asset b/FishROV/ProjectSettings/EditorBuildSettings.asset index 3ca6da9..1845822 100644 --- a/FishROV/ProjectSettings/EditorBuildSettings.asset +++ b/FishROV/ProjectSettings/EditorBuildSettings.asset @@ -8,7 +8,7 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/AvoidancePerfDemo.unity guid: 5a4ed09540a94b80bca1c7d7be0bbf31 - - enabled: 1 + - enabled: 0 path: Assets/Scenes/SampleScene.unity guid: 9fc0d4010bbf28b4594072e72b8655ab m_configObjects: {} diff --git a/FishROV/ProjectSettings/QualitySettings.asset b/FishROV/ProjectSettings/QualitySettings.asset index 36c0dad..35c3439 100644 --- a/FishROV/ProjectSettings/QualitySettings.asset +++ b/FishROV/ProjectSettings/QualitySettings.asset @@ -6,7 +6,7 @@ QualitySettings: serializedVersion: 5 m_CurrentQuality: 5 m_QualitySettings: - - serializedVersion: 2 + - serializedVersion: 3 name: Very Low pixelLightCount: 0 shadows: 0 @@ -18,17 +18,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 - blendWeights: 1 - textureQuality: 1 + skinWeights: 1 + globalTextureMipmapLimit: 1 + textureMipmapLimitSettings: [] anisotropicTextures: 0 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 + useLegacyDetailDistribution: 1 vSyncCount: 0 + realtimeGICPUUsage: 25 lodBias: 0.3 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -40,8 +44,18 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 2 + - serializedVersion: 3 name: Low pixelLightCount: 0 shadows: 0 @@ -53,17 +67,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 + skinWeights: 2 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] anisotropicTextures: 0 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 + useLegacyDetailDistribution: 1 vSyncCount: 0 + realtimeGICPUUsage: 25 lodBias: 0.4 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -75,8 +93,18 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 2 + - serializedVersion: 3 name: Medium pixelLightCount: 1 shadows: 1 @@ -88,17 +116,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 + skinWeights: 2 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 0 realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 + useLegacyDetailDistribution: 1 vSyncCount: 1 + realtimeGICPUUsage: 25 lodBias: 0.7 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -110,8 +142,18 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 2 + - serializedVersion: 3 name: High pixelLightCount: 2 shadows: 2 @@ -123,17 +165,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 - blendWeights: 2 - textureQuality: 0 + skinWeights: 2 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] anisotropicTextures: 1 antiAliasing: 0 softParticles: 0 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 + useLegacyDetailDistribution: 1 vSyncCount: 1 + realtimeGICPUUsage: 50 lodBias: 1 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -145,8 +191,18 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 2 + - serializedVersion: 3 name: Very High pixelLightCount: 3 shadows: 2 @@ -158,17 +214,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 + skinWeights: 4 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] anisotropicTextures: 2 antiAliasing: 2 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 + useLegacyDetailDistribution: 1 vSyncCount: 1 + realtimeGICPUUsage: 50 lodBias: 1.5 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -180,8 +240,18 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] - - serializedVersion: 2 + - serializedVersion: 3 name: Ultra pixelLightCount: 4 shadows: 2 @@ -193,17 +263,21 @@ QualitySettings: shadowCascade2Split: 0.33333334 shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 + skinWeights: 4 + globalTextureMipmapLimit: 0 + textureMipmapLimitSettings: [] anisotropicTextures: 2 antiAliasing: 2 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 billboardsFaceCameraPosition: 1 + useLegacyDetailDistribution: 1 vSyncCount: 1 + realtimeGICPUUsage: 100 lodBias: 2 maximumLODLevel: 0 + enableLODCrossFade: 1 streamingMipmapsActive: 0 streamingMipmapsAddAllCameras: 1 streamingMipmapsMemoryBudget: 512 @@ -215,16 +289,28 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + terrainQualityOverrides: 0 + terrainPixelError: 1 + terrainDetailDensityScale: 1 + terrainBasemapDistance: 1000 + terrainDetailDistance: 80 + terrainTreeDistance: 5000 + terrainBillboardStart: 50 + terrainFadeLength: 5 + terrainMaxTrees: 50 excludedTargetPlatforms: [] + m_TextureMipmapLimitGroupNames: [] m_PerPlatformDefaultQuality: Android: 2 - Lumin: 5 GameCoreScarlett: 5 GameCoreXboxOne: 5 + Lumin: 5 Nintendo 3DS: 5 Nintendo Switch: 5 PS4: 5 PS5: 5 + Server: 0 Stadia: 5 Standalone: 5 WebGL: 3 diff --git a/FishROV/ProjectSettings/TimelineSettings.asset b/FishROV/ProjectSettings/TimelineSettings.asset new file mode 100644 index 0000000..b21943a --- /dev/null +++ b/FishROV/ProjectSettings/TimelineSettings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 53 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3} + m_Name: + m_EditorClassIdentifier: + assetDefaultFramerate: 60 + m_DefaultFrameRate: 60 diff --git a/FishROV/ProjectSettings/com.arongranberg.astar/settings.asset b/FishROV/ProjectSettings/com.arongranberg.astar/settings.asset new file mode 100644 index 0000000..3494b9c --- /dev/null +++ b/FishROV/ProjectSettings/com.arongranberg.astar/settings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 53 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21f007d651ef4ab42b597f1da9ad75cf, type: 3} + m_Name: + m_EditorClassIdentifier: + hasShownWelcomeScreen: 1