如何在2.5d Unity游戏中进行避障?

问题描述 投票:0回答:1

我正在 Unity 中制作 2.5d 游戏。场景中的地面是用矩形图块地图制作的。地面本身在 Z 轴上处于同一水平面。有些标高是使用 OrderInLayer 和碰撞器实现的。事实上,场景中有3个标高(图中标有数字)。每个关卡都包含有碰撞器的区域(这样从下层您就无法踩到上层)和没有碰撞器的区域(例如,这样玩家就可以从岩石后面穿过)。当经过梯子(图中的L)时会发生关卡之间的过渡,梯子上有碰撞器,因此实体的orderInLayer和layer发生变化。在LayerCollisionMatrix中,所有内容都经过配置,以便实体不会与自己级别上的碰撞器交互,而是与其他级别上的碰撞器交互 我的图层碰撞蒙版 我的场景

我想添加会跟随玩家并避开障碍物的敌人。我该怎么做?通过使用导航网格?使用我自己的算法实现还是使用一些第三方库?我如何实现这个?

我尝试使用嵌入式 NavMesh 和 NavMeshPlus 插件。我创建了三个对象,每个对象上都有一个 NavMeshSurface,配置了包含的图层并烘焙它们。事实证明,NavMeshSurfaces 在楼梯上相交。自动地,敌人就会被困在楼梯上。内置的 NavMeshLink 没有帮助(我只是无法设置它的宽度)。所以我编写了自己的 NavMeshLink 实现。但这并没有多大帮助,因为敌人仍然宁愿被困在墙上而不是通过楼梯 敌人陷入困境 我的导航网格

我的导航网格链接:

public class ElevationEntry : MonoBehaviour
{
    [SerializeField] private int newOrderInLayer;
    [SerializeField] private int newLayer;
    [SerializeField] private GameObject endPos;
    private void OnTriggerEnter2D(Collider2D collision)
    {
        var stalkingMovement = collision.gameObject.GetComponent<StalkingMovement>();
        if(stalkingMovement != null) stalkingMovement.SetObjectToGoToPosition(endPos.transform.position);
        collision.gameObject.layer = newLayer;
        collision.gameObject.GetComponent<SpriteRenderer>().sortingOrder = newOrderInLayer;
    }
}
public void SetObjectToGoToPosition(Vector2 pos)
    {
        _navMeshAgent.enabled = false;
        isMovingByAI = false;
        moveToPos = pos;
    }
private void MoveToPosition(Vector2 position)
    {
        var pos = Vector2.MoveTowards(transform.position, position, speed * Time.fixedDeltaTime);
        _rigidbody2D.MovePosition(pos);
        if(Vector2.Distance(transform.position, position) < 0.01)
        {
            _navMeshAgent.enabled = true;
            isMovingByAI = true;
        }
    }

我尝试使用A*寻路项目。我创建了 3 个网格图并按层自定义它们。敌人不想只是在图表之间移动。内置的 Link 和 Link2 没有帮助。我没有写自己的 Link 实现,但我认为情况会类似于 NavMesh

c# unity-game-engine path-finding navmesh
1个回答
0
投票

我不是专家,但也许你可以使用导航网格,并创建一个名为目标的变量,让敌人跟随,当玩家进入另一个级别时,敌人的目标成为距离他们位置最近的楼梯,当他们到达并离开时到了玩家等级,他们的目标可以重新变成玩家吗? 由于您有多个级别,因此您可能需要跟踪玩家所在的级别以及敌人所在的级别。

© www.soinside.com 2019 - 2024. All rights reserved.