简体   繁体   English

如何让敌人在靠近时转向并向玩家移动? Unity3D

[英]How to make enemies turn and move towards player when near? Unity3D

I am trying to make my enemy object turn and start moving towards my player object when the player comes within a certain vicinity.当玩家进入某个附近时,我试图让我的敌人对象转向并开始向我的玩家对象移动。

For the turning I have been testing the transform.LookAt() function although it isn't returning the desired results as when the player is too close to the enemy object the enemy starts to tilt backwards and I only want my enemy to be able to rotate along the y axis, thanks in advance.对于转弯,我一直在测试 transform.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;
            }
        }
    }
}

change the look at target:改变对目标的看法:

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

this way the look at target will be on the same height as your object.这样,观察目标将与您的对象处于同一高度。

    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
        }

    }
}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM