unity2D敌人在x轴和y轴移动追踪玩家不可斜角追踪自动躲避障碍物并且输出方向
时间: 2023-06-19 19:07:31 浏览: 101
你可以通过以下步骤实现这个功能:
1. 获取玩家的位置和敌人的位置。
2. 计算出敌人需要向哪个方向移动才能朝向玩家,可以使用 Vector2.MoveTowards 或者 Vector2.Lerp 进行计算。
3. 判断敌人是否会撞到障碍物,如果会,则需要根据敌人和障碍物的位置关系来计算敌人需要躲避障碍物的方向。
4. 根据计算出的方向,对敌人进行移动,并记录敌人的当前朝向,可以使用 transform.up 或者 transform.right 来获取朝向。
下面是一个简单的示例代码:
```csharp
public class EnemyController : MonoBehaviour
{
public Transform player;
public float speed = 5f;
public float avoidanceDistance = 1f;
public LayerMask obstacleMask;
private Vector2 direction;
void Update()
{
// 计算敌人需要向哪个方向移动才能朝向玩家
direction = (player.position - transform.position).normalized;
// 判断敌人是否会撞到障碍物
RaycastHit2D hit = Physics2D.Raycast(transform.position, direction, avoidanceDistance, obstacleMask);
if (hit.collider != null)
{
// 计算敌人需要躲避障碍物的方向
Vector2 avoidanceDirection = Vector2.Perpendicular(hit.normal) * Mathf.Sign(Vector2.Dot(direction, Vector2.Perpendicular(hit.normal)));
direction = avoidanceDirection;
}
// 对敌人进行移动,并记录敌人的当前朝向
transform.position += (Vector3)direction * speed * Time.deltaTime;
if (direction.x > 0.1f) transform.right = direction;
else if (direction.x < -0.1f) transform.right = -direction;
else if (direction.y > 0.1f) transform.up = direction;
else if (direction.y < -0.1f) transform.up = -direction;
// 输出敌人的方向
Debug.Log("Enemy Direction: " + direction);
}
}
```
阅读全文