c# - 如何更改此统一 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);
}
}
它使用平铺贴图,我有一组不同的平铺贴图,称为敌人检查,它作为图层蒙版放置,它也使用光线投射。
解决方案
您可以使用“obstacleLayer”而不是地面层来检查您认为是障碍物的所有图层蒙版,如墙壁、立方体等。当然,您需要更改固定更新中的逻辑,并翻转实际遇到障碍物的角色。您可以保留您的 gourndcheck 以查看角色是否能够移动(假设避免地图上的洞)。您可能还需要考虑您的移动逻辑,因为目前角色仅水平移动。
推荐阅读
- apache-nifi - Jolt 转换为具有父属性的数组
- java - 对多于两列的组合的唯一约束
- angular - core.js:9110 错误类型错误:无法读取未定义的属性“帖子”
- apache-kafka - Kafka Connect 配置和“消费者”。字首
- python - 如何解决 Python 中 `len` 函数的限制?
- php - 如何在同一个 Symfony v2.8 项目的不同控制器中调用所需文件中的函数?
- gcc - 使用 arm-none-eabi-gcc 的 isprint() 的奇怪错误消息
- google-maps - google_maps_flutter 出现问题,标记 onTap(){} 不起作用
- c++ - 如何使框架图案宽度行、列和厚度输入?
- django - 将主页视图链接到其他视图