CritterAI官方文档翻译【Creating the Navigation Mesh】

Creating the Navigation Mesh
翻译:kun 2014.12.4


The final step in the NMGen build process is to create the navigation mesh. As a minimum you must have PolyMesh data. PolyMeshDetail and ConnectionSet data are optional.
NMGen生成流程的最终步骤就是创建一个NavigationMesh(导航网格).你至少得有PolyMesh数据才可以完成这一步骤.PolyMeshDetail和ConnectionSet是可选项.


See the The Navigation Mesh topic for the general creation process. This topic will cover two helpful extensions.
The Navigation Mesh章节介绍了一般性的流程。本章则介绍了两个有用的扩展知识。


Creating Tile Data
创建Tile数据.


Before you can create a navigation mesh you need to convert your source data into tile data. There are various ways of doing this.
在能创建一个NavigationMesh之前,需要将原始数据转换成Tile数据。有多种办法可以做到这点。


One method is to use the GetBuildData(BuildContext, Int32, Int32, PolyMeshData, PolyMeshDetailData, ConnectionSet, Boolean) utility method.
一个办法是使用工具函数 GetBuildData(BuildContext, Int32, Int32, PolyMeshData, PolyMeshDetailData, ConnectionSet, Boolean).


CopyC#
// Example: Using the tile build data utility method.
// 例子:使用工具函数创建Tile数据。
BuildContext logger = new BuildContext();


NavmeshTileBuildData tbd = NMBuild.GetBuildData(
            logger
            tileX, tileZ    // The tile location.  (0, 0) for single tile meshes. // Tile坐标,如果只有一个Tile,传入(0,0)即可;
            , polyData      // A PolyMeshData object.                             // PolyMesh;
            , detailData  // Optional PolyMeshDetailData object.                  // PolyMeshDetail,可选项;
            , connections // Optional ConnectionSet object.                       // ConnectionSet,可选项;
            , true);


if (tbd == null)
{
    // Perform error handling.
    // The build context will contain error messages.
    // 执行错误处理;
    // build context里包含了错误信息;
}


// Use the build data to create the navigation mesh...
// 使用build数据来创建Navmesh.




Another method is to use the the TileBuildTask class to create the tile data. This method is especially useful if you are building a multi-tile navigation mesh or performing background builds.
另外一种方法是使用TileBuildTask类来创建Tile数据.这个方法在你处理多tile或者搞多线程处理时特别有用(异步呗)。


CopyC#
// Example: Using the tile build task.
// 例子: 使用TileBuildTask创建数据.


TileBuildTask task = TileBuildTask.Create(
        tileX, tileZ    // The tile location.  (0, 0) for single tile meshes.    // Tile坐标,如果只有一个Tile,传入(0,0)即可;
        , polyData      // A PolyMeshData object.                                // PolyMesh;
        , detailData  // Optional PolyMeshDetailData object.                     // PolyMeshDetail,可选项;
        , connections // Optional ConnectionSet object.                          // ConnectionSet,可选项;
        , false       // Is the task tread-safe?  Not applicable in this case.   // 任务是否是否线程安全的?在生成TileData这种应用下没法改。
        , 0);                    // Task priority.  Not applicable in this case. // 任务的优先级。在生成TileData这种应用下没法改。


task.Run();


if (task.TaskState == BuildTaskState.Aborted)
{
    // Perform error handling.
    // Check task messages for details.
    // 执行错误处理;
    // task的messages里包含了错误信息;
}


// Get the tile assets.
// 获取tile结果。
TileBuildAssets tassets = task.Result;


// Use the tile data to build the navigation mesh...
// 使用tile数据创建Navmesh.
Creating the Navigation Mesh


Once you have the tile data you can use one of two methods to create the final navigation mesh.
一旦你获得了Tile数据,你就可以使用两种方法中的任意一种来最终创建navmesh.


CopyC#
// Example: Create a single tile mesh.
// 例子:创建只有一个tile的Navmesh.


// Where 'buildData' is a NavmeshTileBuildData object.
// 'buildData'是一个NavmeshTileBuildData对象。


Navmesh navmesh;
NavStatus status = Navmesh.Create(buildData, out nm)));


if ((status & NavStatus.Success) == 0)
{
    // Perform error handling.
    // 执行错误处理;
}


// Use the navitgation mesh...
// 使用Navmesh...






CopyC#
// Example: Create an empty mesh, then add tiles.
// 例子:创建一个空的Navmesh,然后往其中添加tile.


// Where 'tiles' is a list containing NavmeshTileData objects.
// 'tiles'是一个包含多个NavmeshTileData的列表.


NavmeshParams nconfig = new NavmeshParams(meshOrigin
        , tileSetWidth, tileSetDepth
        , tiles.Count
        , maxPolysPerTile);


Navmesh navmesh;


NavStatus status = Navmesh.Create(nconfig, out navmesh)


if ((status & NavStatus.Success) == 0)
{
        // Perform error handling.
        // 执行错误处理;
}


// Add the tiles to the navigation mesh.
// 将Tile数据添加到Navmesh.
foreach (NavmeshTileData tile in tiles)
{
        // Note: Allowing the navigation mesh to assign the tile reference.
// 注意: Navmesh会持有Tile对象的引用,因此确保在此前提下不会发生问题。
        uint trash;
        navmesh.AddTile(tile, Navmesh.NullTile, out trash);
}


// Use the navigation mesh.
// 使用Navmesh...
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值