unity3d Unity 2D -在空白背景上无移动

xyhw6mcr  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(198)

我正在做一个2D的游戏,游戏会产生类似地下城的房间,房间的墙壁有对撞机,所以玩家无法逃离房间,但是仍然有一些方法可以逃离房间。
所以我的问题是:你能让玩家只能在它生成的房间里移动而不能在空的背景上移动吗?2就像对撞机一样在空的背景上阻止移动吗?
谢谢

o8x7eapl

o8x7eapl1#

为可移动位置创建一个层。

为创建的房间,把碰撞器2d如下,并指定他们的层。

然后,像下面的代码一样,确定角色只能在定义的位置移动。

[SerializeField] private LayerMask movableLayer;
void Update()
{
    if (Physics2D.OverlapPoint(transform.position, movableLayer))
    {
        Debug.Log("<color=#51FF56>Character can move here..</color>");
    }
    else
    {
        Debug.Log("<color=#FF3854>Character can't move here </color>");
    }
}

限于房间框

为了解决限制角色边界的问题,在移动轴上增加碰撞器检查点,让它检查得更远一点就足够了,这里,根据角色的维度,我考虑了系数.5f。

[SerializeField] private LayerMask movableLayer;

private Vector3 inputVector;

void Update()
{
    inputVector.x = Input.GetAxisRaw("Horizontal");
    inputVector.y = Input.GetAxisRaw("Vertical");
    
    Debug.DrawLine(transform.position+inputVector*.5f, transform.position, Color.cyan);
    
    if (Physics2D.OverlapPoint(transform.position+inputVector*.5f, movableLayer.value))
    {
        transform.position += inputVector * Time.deltaTime;

    }
}

相关问题