【问题标题】:How to make enemies turn and move towards player when near? Unity3D靠近时如何让敌人转向并朝玩家移动? Unity3D
【发布时间】:2021-01-10 22:07:28
【问题描述】:

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

对于转弯,我一直在测试 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;
            }
        }
    }
}

【问题讨论】:

标签: c# unity3d


【解决方案1】:

改变目标的外观:

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

这样,目标的视线将与您的对象处于相同的高度。

【讨论】:

    【解决方案2】:
        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
            }
    
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多