2d来回巡逻

遇到坑会自动转向

可配置单次方向行走的时间,转向等待时间等

using System;

using System.Collections;

using System.Collections.Generic;

using System.Threading.Tasks;

using UnityEngine;

using UnityEngine.Serialization;

[RequireComponent(typeof(Rigidbody2D))]

public class AI2dPatrol : MonoBehaviour

{

public Rigidbody2D body2D;

public Transform rayPoint;//射线发射点

public float rayLength = 3;//射线长度

public float speed = 4;//怪物速度

public int turnWaitTime;//转向时间

public float oneTime;//走一个方向的时间

public bool autoTurn = true;//遇坑自动转向

private float nowTime = 0;

private int moveDir = 1;//移动方向 1为左

public Vector3 curSpeed;

private bool isPause = false;

private void FixedUpdate()

{

if (isPause)

{

return;

}

Move();

if (oneTime > 0)

{

if (nowTime >= oneTime)

{

nowTime = 0;

TurnFace();

}

nowTime += Time.deltaTime;

}

if (autoTurn)

{

RaycastHit2D groundInfo = Physics2D.Raycast(rayPoint.position, Vector2.down, rayLength);

if (groundInfo.collider == false)

{

TurnFace();

}

//scene模式下显示射线

Debug.DrawRay(rayPoint.position, Vector2.down * rayLength, Color.blue);

}

}

//转向

async void TurnFace()

{

isPause = true;

await Task.Delay(turnWaitTime * 1000);

moveDir = -moveDir;

var origin = transform.localScale;

transform.localScale = new Vector3(-origin.x, origin.y, origin.z);

isPause = false;

}

//移动

void Move()

{

//transform.Translate(Vector2.left * speed * Time.deltaTime * moveDir);

Vector3 targetVelocity = new Vector2(-moveDir * speed, body2D.velocity.y);

body2D.velocity = Vector3.SmoothDamp(body2D.velocity, targetVelocity, ref curSpeed, 0.1f);

}

}

 

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。