コード例 #1
0
        public static BuildTerrainJob Create(float extents, float3 cameraPosition, NativeArray <float4> planes, NativeList <RenderNode> renderNodes)
        {
            float2 camPosition = new float2(cameraPosition.x, cameraPosition.z);

            float2 center = default;

            center.x = FloorToMultiple(camPosition.x, 32f);
            center.y = FloorToMultiple(camPosition.y, 32f);

            NodeBounds bounds = new NodeBounds
            {
                min = new float2(center.x - extents, center.y - extents),
                max = new float2(center.x + extents, center.y + extents)
            };

            BuildTerrainJob job = new BuildTerrainJob
            {
                CameraPosition = camPosition,
                Bounds         = bounds,
                Planes         = planes,
                RenderNodes    = renderNodes
            };

            return(job);
        }
コード例 #2
0
        private void Update()
        {
            if (BuildEveryFrame)
            {
                Camera cam = SceneCamera.Camera;
                if (cam.transform.rotation.Approximately(LastCameraRotation) && cam.transform.position.Approximately(LastCameraPosition))
                {
                    return;
                }
                LastCameraRotation = cam.transform.rotation;
                LastCameraPosition = cam.transform.position;

                FrustumPlanes2.FromCamera(cam, SourcePlanes, Planes);

                RenderNodes.Clear();
                BuildTerrainJob job = BuildTerrainJob.Create(Extents, cam.transform.position, Planes, RenderNodes);
                JobHandle = job.Schedule();
                BuildCount++;
            }
        }
コード例 #3
0
        public void Build()
        {
            Camera camera = SceneCamera.Camera;

            FrustumPlanes2.FromCamera(camera, SourcePlanes, Planes);

            RenderNodes.Clear();
            BuildTerrainJob job = BuildTerrainJob.Create(Extents, camera.transform.position, Planes, RenderNodes);


            var watch = System.Diagnostics.Stopwatch.StartNew();

            job.Run();

            watch.Stop();
            Debug.LogFormat("Construct: {0}", watch.ElapsedTicks);


            Debug.LogFormat("RenderNode count {0}", RenderNodes.Length);
        }