unity2D敌人在x轴和y轴移动追踪玩家不可斜角追踪自动躲避障碍物并且输出朝向
时间: 2023-06-19 22:07:07 浏览: 51
你可以采用以下方式来实现这个功能:
1. 获取玩家位置和敌人位置,计算它们之间的距离。
2. 如果玩家在敌人的视野范围内(可以通过射线检测实现),则敌人开始追踪玩家。
3. 敌人沿着 x 轴或 y 轴移动,根据玩家的位置判断应该沿哪个轴追踪。
4. 如果敌人遇到障碍物,可以使用射线检测来自动躲避障碍物。
5. 根据敌人的移动方向,设置敌人的朝向。可以通过设置敌人的 SpriteRenderer 组件的 flipX 和 flipY 属性来实现。
以下是示例代码(假设敌人和玩家在同一平面上):
```csharp
public class EnemyController : MonoBehaviour {
public float speed;
public float detectionRange;
public LayerMask obstacleMask;
private Transform player;
private Rigidbody2D rb;
private SpriteRenderer spriteRenderer;
void Start() {
player = GameObject.FindGameObjectWithTag("Player").transform;
rb = GetComponent<Rigidbody2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
void Update() {
// 计算玩家和敌人之间的距离
float distance = Vector2.Distance(transform.position, player.position);
// 如果玩家在视野范围内
if (distance <= detectionRange) {
// 计算玩家相对于敌人的位置
Vector2 direction = player.position - transform.position;
// 沿着 x 轴或 y 轴移动
if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) {
rb.velocity = new Vector2(Mathf.Sign(direction.x) * speed, 0);
spriteRenderer.flipX = direction.x < 0;
} else {
rb.velocity = new Vector2(0, Mathf.Sign(direction.y) * speed);
spriteRenderer.flipY = direction.y < 0;
}
} else {
// 如果玩家不在视野范围内,则停止移动
rb.velocity = Vector2.zero;
}
// 自动躲避障碍物
RaycastHit2D hit = Physics2D.Raycast(transform.position, rb.velocity.normalized, 1, obstacleMask);
if (hit.collider != null) {
// 如果遇到障碍物,则向垂直方向移动
rb.velocity = new Vector2(0, Mathf.Sign(rb.velocity.y) * speed);
}
}
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)