Chase AI的Raycast问题

时间:2019-04-11 15:23:47

标签: c# unity3d

在我的脚本中,我有一个巡逻方法和一个追逐方法。我使用ray cast的跟踪代码无法正常工作。唯一有效的方法是我的AI巡检代码。当我击中指定的射线投射时,它不会追赶我。但是,当我删除脚本中的巡检代码时,我的追逐代码可以正常工作。有什么问题吗?我希望我的AI进行巡逻和追逐。如果发生任何碰撞,并且玩家在碰撞之外,则AI将再次开始巡逻

public class LineTrigger : MonoBehaviour {

    private Transform targett;
    public Transform sightStart, sightEnd;
    public bool spotted = false;
    public GameObject arrow;
    public GameObject target;
    public bool facingRight = false;

    public float speed = 8;

    [SerializeField]
    float moveSpeed = 3f;
    Rigidbody2D rb;
    Vector3 localScale;
    float dirX;
    Vector3 directionToTarget;

    void Start()
    {
        localScale = transform.localScale;
        rb = GetComponent<Rigidbody2D> ();
        dirX = -1f;
        target = GameObject.Find ("Girl");

    }

    void Update()
    {
        if (transform.position.x < 1f)
            dirX = 1f;
        else if (transform.position.x > 20f)
            dirX = -1f;


        Raycasting ();
        Behaviours ();
    }

    void Raycasting ()
    {
        Debug.DrawLine (sightStart.position, sightEnd.position);
        spotted = Physics2D.Linecast (sightStart.position, sightEnd.position, 1 << LayerMask.NameToLayer ("Girl"));
    }

    void Behaviours()
    {
        if (spotted == true) {
            arrow.SetActive (true);
            directionToTarget = (target.transform.position - transform.position).normalized;
            rb.velocity = new Vector2 (directionToTarget.x * moveSpeed, directionToTarget.y * moveSpeed);
        } 
        else 
        {
            arrow.SetActive (false);
        }

    }

    void FixedUpdate()
    {
        rb.velocity = new Vector2 (dirX * moveSpeed, rb.velocity.y);
    }

    void LateUpdate()
    {
        CheckWhereToFace ();
    }

    void CheckWhereToFace()
    {
        if (dirX > 0)
            facingRight = false;
        else if (dirX < 0)
            facingRight = true;

        if (((facingRight) && (localScale.x < 0)) || ((!facingRight) && (localScale.x > 0)))
            localScale.x *= -1;

        transform.localScale = localScale;
    } 

}

1 个答案:

答案 0 :(得分:0)

我认为您在FixedUpdate中缺少if(!spotted)