旋转敌人角色以查看玩家角色

时间:2020-11-04 08:27:02

标签: c# unity3d

我正在使敌人角色跟随玩家角色。

FixedUpdate方法中,敌方角色移向玩家角色, 然后在Update方法中,角色旋转为玩家角色。

但是,使用此脚本,敌人的性格只是被小睡而被卡住了。

哪里出问题了,哪里出了问题?

public class enemy : MonoBehaviour
{
    GameObject tObj;
    private Vector3 latestPos; 
    public string targetObjectName;
    public float speed = (float)1.0;
    void Start()
    {
        tObj = GameObject.Find("player");
        latestPos = transform.position;
    }

    void Update()
    {
        Vector3 diff = transform.position - latestPos;  
        latestPos = transform.position;

        if (diff.magnitude > 0.01f)
        {
            transform.rotation = Quaternion.LookRotation(diff); 
        }
    }
    void FixedUpdate(){
     
        
        Vector3 dir = (tObj.transform.position - this.transform.position).normalized;
        float vx = dir.x * speed;
        float vz = dir.z * speed;
        this.transform.Translate((float)(vx / 50.0),0,(float)(vz / 50.0));
    }
}

1 个答案:

答案 0 :(得分:0)

使用软件包管理器“标准资产”,在Unity内部放入两个FPSController,一个应该是Player,另一个应该是敌人。

我知道这不能回答您的问题,但可以更快地宣传敌人。

AI Settings

只需像图中一样删除摄像头,音频源和第一人称控制器脚本。

人工智能规范:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowAI : MonoBehaviour
{

    public  CharacterController _controller;
    public Transform target;
    public GameObject Player; 

    [SerializeField]
    float _moveSpeed = 2.0f;


    // Use this for initialization
    void Start()
    {
  

    }

    // Update is called once per frame
    void Update()  {

        Vector3 direction = target.position - transform.position;

        direction = direction.normalized;

        Vector3 velocity = direction * _moveSpeed;

        _controller.Move(velocity * Time.deltaTime);

        Vector3 lookVector = Player.transform.position - transform.position;
        lookVector.y = transform.position.y;
        Quaternion rot = Quaternion.LookRotation(lookVector);
        transform.rotation = Quaternion.Slerp(transform.rotation, rot, 1);


    }
}