如何让敌人在靠近时转向并向玩家移动?统一3D



当玩家进入某个附近时,我试图让我的敌人对象转向并开始向我的玩家对象移动。

对于转弯,我一直在测试转换。LookAt() 函数虽然它没有返回所需的结果,因为当玩家离敌人对象太近时,敌人开始向后倾斜,我只希望我的敌人能够沿 y 轴旋转,提前感谢。

using UnityEngine;
using System.Collections;
public class EnemyController : MonoBehaviour {
    public Transform visionPoint;
    private PlayerController player;
    public Transform Player;
    public float visionAngle = 30f;
    public float visionDistance = 10f;
    public float moveSpeed = 2f;
    public float chaseDistance = 3f;
    private Vector3? lastKnownPlayerPosition;
    // Use this for initialization
    void Start () {
        player = GameObject.FindObjectOfType<PlayerController> ();
    }
    // Update is called once per frame
    void Update () {
        // Not giving the desired results
        transform.LookAt(Player);
    }
    void FixedUpdate () {
    }
    void Look () {
        Vector3 deltaToPlayer = player.transform.position - visionPoint.position;
        Vector3 directionToPlayer = deltaToPlayer.normalized;
        float dot = Vector3.Dot (transform.forward, directionToPlayer);
        if (dot < 0) {
            return;
        }
        float distanceToPlayer = directionToPlayer.magnitude;
        if (distanceToPlayer > visionDistance)
        {
            return;
        }
        float angle = Vector3.Angle (transform.forward, directionToPlayer);
        if(angle > visionAngle)
        {
            return;
        }
        RaycastHit hit;
        if(Physics.Raycast(transform.position, directionToPlayer, out hit, visionDistance))
        {
            if (hit.collider.gameObject == player.gameObject)
            {
                lastKnownPlayerPosition = player.transform.position;
            }
        }
    }
}

更改目标的外观:

void Update () {
    Vector3 lookAt = Player.position;
    lookAt.y = transform.position.y;
    transform.LookAt(lookAt);
}

这样,目标的视图将与对象处于同一高度。

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemyMovement : MonoBehaviour
{
    public Transform Player;
    public float MoveSpeed = 4;
    int MaxDist = 10;
    int MinDist = 5;


    void Update()
    {
        transform.LookAt(Player);
    if (Vector3.Distance(transform.position, Player.position) >= MinDist)
    {
        transform.position += transform.forward * MoveSpeed * Time.deltaTime;

        if (Vector3.Distance(transform.position, Player.position) <= MaxDist)
        {
           // Put what do you want to happen here
        }
    }
}

}

最新更新