Lua
C++
Edit

CreateNavMesh

This function creates a new navigation mesh for pathfinding.

Syntax

Parameter Description
world world to create the navmesh in
height width of the navmesh volume
tilesx number of tiles along the X axis
tilesz number of tiles along the Z axis
tileres number of voxels per tile
voxelsize resolution of voxel grid
agentradius radius of the characters that will use this navmesh
agentheight height of the characters that will use this navmesh
stepheight maximum height that can be stepped up
maxslope maximum slope that can be traversed, in degrees

Returns

Returns a new Navmesh object.

Example

#include "UltraEngine.h"

using namespace UltraEngine;

int main(int argc, const char* argv[])
{
    //Get the displays
    auto displays = GetDisplays();

    //Create a window
    auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);

    //Create a framebuffer
    auto framebuffer = CreateFramebuffer(window);

    //Create a world
    auto world = CreateWorld();

    //Create a camera    
    auto camera = CreateCamera(world);
    camera->SetFov(70);
    camera->SetClearColor(0.125);
    camera->SetPosition(0, 3, -6);
    camera->SetRotation(35, 0, 0);

    //Create light
    auto light = CreateBoxLight(world);
    light->SetRange(-20, 20);
    light->SetArea(20, 20);
    light->SetRotation(35, 35, 0);
    light->SetColor(2);

    //Create scene
    auto ground = CreateBox(world, 10, 1, 10);
    ground->SetPosition(0, -0.5, 0);
    ground->SetColor(0, 1, 0);
    auto wall = CreateBox(world, 1, 2, 4);

    //Create navmesh
    auto navmesh = CreateNavMesh(world, 5, 4, 4);
    navmesh->Build();

    //Create player
    auto player = CreateCylinder(world, 0.4, 1.8);
    player->SetNavObstacle(false);
    player->SetColor(0, 0, 1);
    auto agent = CreateNavAgent(navmesh);
    player->Attach(agent);
    agent->SetPosition(-2, 1, 0);

    //Main loop
    while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false)
    {
        navmesh->SetDebugging(window->KeyDown(KEY_D));

        if (window->KeyDown(KEY_RIGHT)) wall->Move(0.1, 0, 0);
        if (window->KeyDown(KEY_LEFT)) wall->Move(-0.1, 0, 0);

        if (window->MouseHit(MOUSE_LEFT))
        {
            auto mousepos = window->GetMousePosition();
            auto rayinfo = camera->Pick(framebuffer, mousepos.x, mousepos.y);
            if (rayinfo.success)
            {
                agent->Navigate(rayinfo.position);
            }
        }
        if (window->KeyHit(KEY_SPACE)) agent->Stop();

        world->Update();
        world->Render(framebuffer);
    }
    return 0;
}
Copyright © 2024 Ultra Software.
All rights reserved.