コード例 #1
0
 /// <summary>
 /// 案例1:添加N个任意朝向的矩形区域,并开启寻路
 /// (拖动StartPos或EndPos对象开启寻路)
 /// </summary>
 void Case1()
 {
     _case     = 5;
     _quadTree = new NativeQuadTree(new float4(0, 0, MapSize, MapSize), Resolution, 1, Allocator.Persistent);
     for (var i = 0; i < ObjectCount; i++)
     {
         var size    = new float2(Random.Range(1, ObjectSize), Random.Range(1, ObjectSize));
         var pos     = new float2(Random.Range(-MapSize / 2, MapSize / 2), Random.Range(-MapSize / 2, MapSize / 2));
         var forward = math.normalizesafe(new float2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)));
         if (math.lengthsq(forward) < 0.1f)
         {
             forward = new float2(0, 1);
         }
         _quadTree.AddRectObject(in size, in pos, forward, 1, Offset);
         if (Debug)
         {
             var obj = Instantiate(Cube);
             obj.hideFlags            = HideFlags.HideInInspector | HideFlags.HideInHierarchy;
             obj.name                 = "Cube:" + i;
             obj.transform.position   = new Vector3(pos.x, 0, pos.y);
             obj.transform.localScale = new Vector3(size.x * 2, 1, size.y * 2);
             obj.transform.rotation   =
                 quaternion.LookRotation(new float3(forward.x, 0, forward.y), new float3(0, 1, 0));
         }
     }
     _quadTree.Output(1000);
     _startPos    = new GameObject("StartPos");
     _endPos      = new GameObject("EndPos");
     _player      = Instantiate(Cube);
     _player.name = "Player";
 }
コード例 #2
0
ファイル: QuadTreeTests.cs プロジェクト: jonigata/Beans
    public void InsertTriggerDivideNonBurstBulk()
    {
        var values = GetValues();

        var positions = new NativeArray <float2>(values.Length, Allocator.TempJob);
        var quadTree  = new NativeQuadTree <int>(Bounds);

        positions.CopyFrom(values);


        NativeArray <QuadElement <int> > elements = new NativeArray <QuadElement <int> >(positions.Length, Allocator.Temp);

        for (int i = 0; i < positions.Length; i++)
        {
            elements[i] = new QuadElement <int>
            {
                pos     = positions[i],
                element = i
            };
        }

        var s = Stopwatch.StartNew();

        quadTree.ClearAndBulkInsert(elements);

        s.Stop();
        Debug.Log(s.Elapsed.TotalMilliseconds);

        QuadTreeDrawer.Draw(quadTree);
        quadTree.Dispose();
        positions.Dispose();
    }
コード例 #3
0
ファイル: QuadTreeTests.cs プロジェクト: jonigata/Beans
    public void RangeQueryAfterBulk()
    {
        var values = GetValues();

        NativeArray <QuadElement <int> > elements = new NativeArray <QuadElement <int> >(values.Length, Allocator.TempJob);

        for (int i = 0; i < values.Length; i++)
        {
            elements[i] = new QuadElement <int>
            {
                pos     = values[i],
                element = i
            };
        }

        var quadTree = new NativeQuadTree <int>(Bounds);

        quadTree.ClearAndBulkInsert(elements);

        var queryJob = new QuadTreeJobs.RangeQueryJob <int>
        {
            QuadTree = quadTree,
            Bounds   = new AABB2D(100, 140),
            Results  = new NativeList <QuadElement <int> >(1000, Allocator.TempJob)
        };

        var s = Stopwatch.StartNew();

        queryJob.Run();
        s.Stop();
        Debug.Log(s.Elapsed.TotalMilliseconds + " result: " + queryJob.Results.Length);

        QuadTreeDrawer.DrawWithResults(queryJob);
        quadTree.Dispose();
        elements.Dispose();
        queryJob.Results.Dispose();
    }
コード例 #4
0
ファイル: QuadTreeDrawer.cs プロジェクト: jonigata/Beans
    public static void Draw <T>(NativeQuadTree <T> quadTree) where T : unmanaged
    {
        QuadTreeDrawer window = (QuadTreeDrawer)GetWindow(typeof(QuadTreeDrawer));

        window.DoDraw(quadTree, default, default);