首页 > 解决方案 > 如何更改此统一 2d 巡逻脚本?

问题描述

我有一个 2d unity 游戏,我有一个脚本可以在平台游戏中巡逻,但是现在我需要它在两堵墙之间巡逻,代码如下:

public float speed = 2f;

public Rigidbody2D rb;

public LayerMask groundLayers;

public TextMeshProUGUI m_Object;
public SpriteRenderer sp;
public Transform groundCheck;

bool isFacingRight = true;

RaycastHit2D hit;

private void Update()
{
    hit = Physics2D.Raycast(groundCheck.position, -transform.up, 1f, groundLayers);

    
}

private void FixedUpdate()
{
    if(hit.collider != false)
    {
        if (isFacingRight)
        {
            rb.velocity = new Vector2(speed, rb.velocity.y);
            
        }
        else
        {

           
            rb.velocity = new Vector2(-speed, rb.velocity.y);
        }
    }
    else
    {
        isFacingRight = !isFacingRight;
        sp.transform.localScale = new Vector3(-transform.localScale.x, 1f, 1f);
        
    }
}

它使用平铺贴图,我有一组不同的平铺贴图,称为敌人检查,它作为图层蒙版放置,它也使用光线投射。

标签: c#unity3d

解决方案


您可以使用“obstacleLayer”而不是地面层来检查您认为是障碍物的所有图层蒙版,如墙壁、立方体等。当然,您需要更改固定更新中的逻辑,并翻转实际遇到障碍物的角色。您可以保留您的 gourndcheck 以查看角色是否能够移动(假设避免地图上的洞)。您可能还需要考虑您的移动逻辑,因为目前角色仅水平移动。


推荐阅读