diff options
-rw-r--r-- | marching/Assets/Bundle/images/factory.png | bin | 0 -> 5528 bytes | |||
-rw-r--r-- | marching/Assets/Bundle/images/factory.png.meta | 146 | ||||
-rw-r--r-- | marching/Assets/Scenes/Test.unity | 144 | ||||
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsManager.cs | 4 | ||||
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs | 81 | ||||
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs | 86 | ||||
-rw-r--r-- | marching/Assets/Scripts/Physics/PhysicsQuadtree.cs | 18 | ||||
-rw-r--r-- | marching/Assets/Scripts/Physics/Quadtree.cs | 12 | ||||
-rw-r--r-- | marching/Assets/Scripts/TestAABB.cs | 32 | ||||
-rw-r--r-- | marching/Assets/Scripts/TestAABB.cs.meta | 11 | ||||
-rw-r--r-- | marching/Assets/Scripts/Utils/MathUtils.cs | 6 | ||||
-rw-r--r-- | marching/Assets/Scripts/Utils/Vector2Extension.cs | 4 |
12 files changed, 527 insertions, 17 deletions
diff --git a/marching/Assets/Bundle/images/factory.png b/marching/Assets/Bundle/images/factory.png Binary files differnew file mode 100644 index 0000000..115fe5f --- /dev/null +++ b/marching/Assets/Bundle/images/factory.png diff --git a/marching/Assets/Bundle/images/factory.png.meta b/marching/Assets/Bundle/images/factory.png.meta new file mode 100644 index 0000000..22b57dc --- /dev/null +++ b/marching/Assets/Bundle/images/factory.png.meta @@ -0,0 +1,146 @@ +fileFormatVersion: 2 +guid: 38fa5e7847a4b7e45821e304023774f0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.49999994, y: 0.00080512406} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scenes/Test.unity b/marching/Assets/Scenes/Test.unity index 68969f3..abdb71c 100644 --- a/marching/Assets/Scenes/Test.unity +++ b/marching/Assets/Scenes/Test.unity @@ -6297,6 +6297,104 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 43 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &905162455 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 905162457} + - component: {fileID: 905162456} + - component: {fileID: 905162458} + m_Layer: 0 + m_Name: factory + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &905162456 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905162455} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 38fa5e7847a4b7e45821e304023774f0, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.9375, y: 1.71875} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &905162457 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905162455} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.36, y: 3.31, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 67 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &905162458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 905162455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbf68306c31144f44a34335479353692, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Shadow: {fileID: 0} --- !u!1 &908670523 GameObject: m_ObjectHideFlags: 0 @@ -11041,6 +11139,52 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1731899510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1731899512} + - component: {fileID: 1731899511} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1731899511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731899510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4ddedc9aac270da4eb59670351403718, type: 3} + m_Name: + m_EditorClassIdentifier: + ray: {x: 0, y: 0, z: 1, w: 1} + size: {x: 1, y: 1} +--- !u!4 &1731899512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731899510} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.849, y: 0.33, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 68 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1738161037 GameObject: m_ObjectHideFlags: 0 diff --git a/marching/Assets/Scripts/Physics/PhysicsManager.cs b/marching/Assets/Scripts/Physics/PhysicsManager.cs index 164d62b..1663410 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager.cs @@ -6,14 +6,14 @@ using UnityEngine; public enum ColliderType { - Collider, + Collider, Hurtbox, Hitbox, } public partial class PhysicsManager : Singleton<PhysicsManager> { - + // 四叉树筛选结果 public List<IQuadTreeObject> sharedRetriveResults => m_SharedRetriveResults; private List<IQuadTreeObject> m_SharedRetriveResults = new List<IQuadTreeObject>(); diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs index 7b4aa1c..4710b2e 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager_Collide.cs @@ -3,34 +3,50 @@ using System.Collections; using System.Collections.Generic; using Unity.VisualScripting.Antlr3.Runtime.Tree; using UnityEngine; +using UnityEngine.UIElements; +/// <summary> +/// 物理查询 +/// </summary> public partial class PhysicsManager : Singleton<PhysicsManager> { + // 碰撞检测结果 private List<IQuadTreeObject> m_SharedCollideResults = new List<IQuadTreeObject>(); - public Vector4 GetCircleBound(Vector3 circle) + public static Vector4 GetCircleBound(Vector3 circle) { float size = circle.z * 2; return new Vector4(circle.x, circle.y, size, size); } - public Vector4 GetBoxBound(Vector4 box) + public static Vector4 GetBoxBound(Vector4 box) { return box; } - public Vector4 GetRayBound(Vector4 line, float maxLen=20f) + public static Vector4 GetRayBound(Vector4 ray) { - Vector2 tr = line.xy() + maxLen * line.zw().normalized; + Vector2 tr = ray.xy() + ray.zw(); Vector4 bound = new Vector4(); - bound.x = (tr.x + line.x) / 2; - bound.y = (tr.y + line.y) / 2; - bound.z = Mathf.Abs(tr.x - line.x); - bound.w = Mathf.Abs(tr.y - line.y); + bound.x = (tr.x + ray.x) / 2; + bound.y = (tr.y + ray.y) / 2; + bound.z = Mathf.Max(Mathf.Abs(tr.x - ray.x), 1); + bound.w = Mathf.Max(Mathf.Abs(tr.y - ray.y), 1); return bound; } - public Vector4 GetPointBound(Vector2 point) + public static Vector4 GetRaySegment(Vector4 ray) + { + Vector2 tr = ray.xy() + ray.zw(); + Vector4 seg = new Vector4(); + seg.x = ray.x; + seg.y = ray.y; + seg.z = tr.x; + seg.w = tr.y; + return seg; + } + + public static Vector4 GetPointBound(Vector2 point) { Vector4 bound = new Vector4(); bound.x = point.x; @@ -40,6 +56,20 @@ public partial class PhysicsManager : Singleton<PhysicsManager> return bound; } + /// <summary> + /// 把x,y,w,h的box转换为lowerx,higherx,lowery,highery + /// </summary> + /// <returns></returns> + public static Vector4 GetBoxRange(Vector4 box) + { + Vector4 Range = new(); + Range.x = box.x - box.z / 2; + Range.y = box.x + box.z / 2; + Range.z = box.y - box.w / 2; + Range.w = box.y + box.w / 2; + return Range; + } + public ref readonly List<IQuadTreeObject> CircleCast(ColliderType target, Vector3 circle) { m_SharedCollideResults.Clear(); @@ -109,13 +139,42 @@ public partial class PhysicsManager : Singleton<PhysicsManager> } /// <summary> - /// x,y dir.x dir.y + /// x,y dir.x dir.y(dir带长度) /// </summary> /// <param name="target"></param> /// <param name="line"></param> /// <returns></returns> - public ref readonly List<IQuadTreeObject> RayCast(ColliderType target, Vector4 ray, float maxLength = 20f) + public ref readonly List<IQuadTreeObject> RayCast(ColliderType target, Vector4 ray) { + m_SharedCollideResults.Clear(); + var retriver = GetRetriverByType(target); + if(retriver != null) + { + if(retriver(GetRayBound(ray))) + { + for (int i = 0; i < m_SharedRetriveResults.Count; ++i) + { + var collider = m_SharedRetriveResults[i]; + if (collider != null) + { + if (collider is FastCircleCollider) + { + if (RayVsCircle(ray, (collider as FastCircleCollider).circle)) + { + m_SharedCollideResults.Add(collider); + } + } + else if (collider is FastBoxCollider) + { + if (RayVsBox(ray, (collider as FastBoxCollider).box)) + { + m_SharedCollideResults.Add(collider); + } + } + } + } + } + } return ref m_SharedCollideResults; } diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs index a0dcc97..5210767 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs @@ -1,7 +1,11 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using static UnityEditor.Rendering.CameraUI; +/// <summary> +/// 碰撞检测 +/// </summary> public partial class PhysicsManager : Singleton<PhysicsManager> { @@ -70,6 +74,88 @@ public partial class PhysicsManager : Singleton<PhysicsManager> return Vector2.Dot(u, u) < radius * radius; } + public static bool RayVsCircle(Vector4 ray, Vector3 circle) + { + Vector4 seg = GetRaySegment(ray); + Vector2 dir = ray.zw().normalized; + Vector2 center = circle.xy(); + float u = Vector2.Dot(center - seg.xy(), dir); + Vector2 near = new Vector2(); + if(u <= 0) + { + near = seg.xy(); + } + else if(u >= ray.zw().magnitude) + { + near = seg.zw(); + } + else + { + near = seg.xy() + dir * u; + } + return (near - center).sqrMagnitude <= circle.z * circle.z; + } + + + // From Real-time Collision Detection, p179 + // box2d + public static bool RayVsBox(Vector4 ray, Vector4 box) + { + float tmin = float.MinValue; + float tmax = float.MaxValue; + Vector2 dir = ray.zw().normalized; + Vector4 range = GetBoxRange(box); //lowerx,higherx,lowery,highery + Vector2 lowerBound = new Vector2(range.x, range.z); + Vector2 upperBound = new Vector2(range.y, range.w); + //Vector2 normal = new Vector2(); + Vector2 p = ray.xy(); + + for (int i = 0; i < 2; ++i) + { + + if (dir[i] < float.Epsilon) // 和x-slab平行 + { + if (p[i] < lowerBound[i] || p[i] > upperBound[i]) + { + return false; + } + } + else + { + float inv_d = 1f / dir[i]; + float t1 = (lowerBound[i] - p[i]) * inv_d; + float t2 = (upperBound[i] - p[i]) * inv_d; + float s = -1f; + if (t1 > t2) + { + MathUtils.Swap(ref t1, ref t2); + s = 1f; + } + if (t1 > tmin) + { + //normal = Vector2.zero; + //normal[i] = s; + tmin = t1; + } + + tmax = Mathf.Min(tmax, t2); + + if (tmin > tmax) + { + return false; + } + } + } + + if (tmin < 0 || ray.zw().magnitude < tmin) + return false; + //// Intersection. + //output->fraction = tmin; + //output->normal = normal; + + return true; + } + /// <summary> /// box x,y,w,h circle x,y,raduis /// </summary> diff --git a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs index f4bad27..5cd374e 100644 --- a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs +++ b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs @@ -8,9 +8,20 @@ using UnityEngine; /// </summary> class PhysicsQuadtree { + /// <summary> + /// 杈圭晫 + /// </summary> public Vector4 quadtreeRange { set { m_QuadtreeRange = value; } } private Vector4 m_QuadtreeRange; + + /// <summary> + /// 鏍硅妭鐐 + /// </summary> private Quadtree m_Quadtree; + + /// <summary> + /// 鎵樼鐨勫叏閮ㄥ璞★紝浣嗕笉涓瀹氫細鍔犲叆鍒版爲閲岄潰锛堜腑蹇冪偣鍦ㄨ竟鐣屽鐨勪笉鍔犲叆鏍戯級 + /// </summary> private List<IQuadTreeObject> m_Objects = new List<IQuadTreeObject>(); public PhysicsQuadtree(Vector4 range) @@ -33,12 +44,17 @@ class PhysicsQuadtree { m_Quadtree.Clear(false); m_Quadtree.Rebound(m_QuadtreeRange); + InsertAllObjects(); + } + + private void InsertAllObjects() + { Vector4 bound = m_Quadtree.bound; for (int i = 0; i < m_Objects.Count; i++) { IQuadTreeObject obj = m_Objects[i]; // 绠鍗曠殑蹇界暐涓績鍦ㄨ竟鐣屽鐨刼bject - if(PhysicsManager.IsPointInsideBox(bound, obj.bound.xy())) + if (PhysicsManager.IsPointInsideBox(bound, obj.bound.xy())) { m_Quadtree.Insert(obj); } diff --git a/marching/Assets/Scripts/Physics/Quadtree.cs b/marching/Assets/Scripts/Physics/Quadtree.cs index 9f8ecba..a012d26 100644 --- a/marching/Assets/Scripts/Physics/Quadtree.cs +++ b/marching/Assets/Scripts/Physics/Quadtree.cs @@ -29,7 +29,7 @@ namespace mh private int m_Level; private Vector4 m_Bounds; // x,y,z,w => posx,posy,width,height private Quadtree[] m_SubTrees; // 从右上角开始逆时针索引 - private List<IQuadTreeObject> m_Objects; // 当前层能容纳,但任何一个子树都无法容纳的对象 + private List<IQuadTreeObject> m_Objects; // 非叶节点的为0 private bool m_IsRoot; public Vector4 bound { get { return m_Bounds; } } @@ -47,7 +47,6 @@ namespace mh public bool isRoot { get { return m_IsRoot; } } private static Queue<List<IQuadTreeObject>> m_QuadtreeObjPool = new Queue<List<IQuadTreeObject>>(); - private static Queue<Quadtree> m_QuadtreePool = new Queue<Quadtree>(); private Quadtree QueryQuadtree(int level, Vector4 bounds) @@ -97,8 +96,17 @@ namespace mh m_IsRoot = isRoot; } + /// <summary> + /// 更改边界,只适用于最外层的tree + /// </summary> + /// <param name="bounds"></param> public void Rebound(Vector4 bounds) { + if(!m_IsRoot) + { + Debug.LogError("Quadtree.Rebound()只能运用于最外层"); + return; + } m_Bounds = bounds; } diff --git a/marching/Assets/Scripts/TestAABB.cs b/marching/Assets/Scripts/TestAABB.cs new file mode 100644 index 0000000..ed33ab3 --- /dev/null +++ b/marching/Assets/Scripts/TestAABB.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.VisualScripting; +using UnityEngine; + +public class TestAABB : MonoBehaviour +{ + + public Vector4 ray; + + public Vector2 size; + + private void Awake() + { + + } + + private void OnDrawGizmos() + { + if(PhysicsManager.RayVsBox(ray, new Vector4(transform.position.x, transform.position.y, size.x, size.y))) + { + Gizmos.color = Color.red; + } + else + { + Gizmos.color = Color.white; + } + Gizmos.DrawLine(ray.xy().ToVector3(), ray.xy().ToVector3() + ray.zw().ToVector3()); + Gizmos.DrawCube(transform.position, size.ToVector3()); + } + +} diff --git a/marching/Assets/Scripts/TestAABB.cs.meta b/marching/Assets/Scripts/TestAABB.cs.meta new file mode 100644 index 0000000..042e981 --- /dev/null +++ b/marching/Assets/Scripts/TestAABB.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ddedc9aac270da4eb59670351403718 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Utils/MathUtils.cs b/marching/Assets/Scripts/Utils/MathUtils.cs index a25f5e5..c997495 100644 --- a/marching/Assets/Scripts/Utils/MathUtils.cs +++ b/marching/Assets/Scripts/Utils/MathUtils.cs @@ -15,5 +15,11 @@ public static class MathUtils return new Vector2(Mathf.Max(src.x, v), Mathf.Max(src.y, v)); } + public static void Swap(ref float f1, ref float f2) + { + float t = f1; + f1 = f2; + f2 = t; + } }
\ No newline at end of file diff --git a/marching/Assets/Scripts/Utils/Vector2Extension.cs b/marching/Assets/Scripts/Utils/Vector2Extension.cs index 2fcaf60..aa96509 100644 --- a/marching/Assets/Scripts/Utils/Vector2Extension.cs +++ b/marching/Assets/Scripts/Utils/Vector2Extension.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using Unity.VisualScripting; using UnityEditor; using UnityEngine; @@ -17,6 +18,7 @@ public static class Vector2Extension public static Vector3 ToVector3(this Vector2 src) { - return ConvertToVector3( src); + return ConvertToVector3(src); } + } |