在Unity中自定义NaveMesh移动和旋转

时间:2018-08-26 07:44:11

标签: c# unity3d path-finding navmesh

我发现没有什么有用的东西可以在Unity中为NavMesh实现自定义移动和旋转。我不想使用Nav Mesh Agent组件的导向部分,但是我想使用NavMesh避障和寻路。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则希望使用NavMesh而不是使用对撞机来限制角色移动。

例如,我在山上有一个机器人,我可以使用箭头按钮控制它,但我不希望它从悬崖上掉下来。

就我而言,我的角色具有Character Controller组件。我要做的就是将Nav Mesh Agent组件添加到我的角色{strong>沿 Character Controller组件中。

重要!!您的角色站立的地面上仍然应该有任何类型的Collider,例如Box Collider,因为当我禁用附着在地面上的Box Collider时,我的角色无法移动,但您无需将对撞机附加到障碍物上。使它们Navigation Static并烘烤NavMesh可以解决问题。

我没有实现有关Nav Mesh Agent组件的任何额外代码。我的RobotController.cs很好。

Nav Mesh Agent Steering 部分下的变量(如SpeedAngular SpeedAcceleration)不会覆盖我在我的变量上实现的变量RobotController脚本。

摘要

我的角色有以下组成部分:

  • Character Controller
  • RobotController.cs
  • Nav Mesh Agent

按此顺序,RobotController.cs就是这样简单:

if (Input.GetKey (KeyCode.UpArrow)) {
  if(speed < maxVelocity)
    speed += acceleration * Time.fixedDeltaTime;
  else
    speed = maxVelocity; 
}

velocity.x = (transform.forward * speed).x;
velocity.z = (transform.forward * speed).z;