怪物追击玩家的功能

创建玩家和小怪

球为玩家,
cube为小怪
为了 方便测试小怪的角度就给小怪添加了一副眼镜,
capsule是空物体,是用来计算小怪和玩家的角度,放在小怪正前方一点
在这里插入图片描述
在这里插入图片描述

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

public class Text : MonoBehaviour
{
    //  获取目标点的坐标
    public Transform _targectPoint;
    //定义个Vector3  用来获取开始旋转的向量
    Vector3 _dir;
   //用来获取返回时候旋转的向量
    Vector3 _orgin;
    //用来储存小怪的初始坐标
    Vector3 _orginPoint;
    //用来储存初始的旋转角度
    Quaternion _orginRotate;
    //用来获取  小怪与玩家的角度
    public Transform _capusePoint;
    // Start is called before the first frame update
    void Start()
    {
        //储存小怪的初始目标点坐标 和  旋转角度
        _orginPoint = transform.position;
        _orginRotate = transform.rotation;
    }

    // Update is called once per frame
    void Update()
    {
        //通过四元数  对物体进行旋转  
        //_dir = _targectPoint.position - transform.position;
        //Quaternion q = Quaternion.identity;
        //q = Quaternion.LookRotation(_dir);
        //transform.rotation = Quaternion.Lerp(transform.rotation, q, 6 * Time.deltaTime);
        //欧拉角
        //transform.eulerAngles +=new Vector3(0,45,0);
        
        //判断小怪是否移动追击玩家
        //获取小怪和玩家的角度
        float _angle = Vector3.Angle(_capusePoint.position,_targectPoint.position);
        //通过小怪与玩家的角度 和  距离判断人物是否在小怪的视野里边
        if (_angle>= -45  && _angle <= 45 &&
            Vector3.Distance(_targectPoint.position,transform.position)<=5)
        {
            // transform.Translate(Vector3.Lerp(transform.position, _targectPoint.position, 8 * Time.deltaTime),Space.World);
            // 获取初始点指向目标点的向量
            _dir = _targectPoint.position - transform.position;
            //定义一个四元数
            Quaternion q = Quaternion.identity;
            //转换为四元数
            q = Quaternion.LookRotation(_dir);
            //旋转小怪的角度   让小怪面向玩家
            transform.rotation = 
                Quaternion.Lerp(transform.rotation, q,1 );
            //使小怪追击玩家
            transform.position  = 
            Vector3.MoveTowards(transform.position,_targectPoint.position,5 * Time.deltaTime);

        }
        //当小怪 移动一定的位置  或者是玩家移动出小怪的视野当中,小怪自动返回初始 的位置
        if (Vector3.Distance(transform.position, _orginPoint) >= 20
            || Vector3.Distance(_targectPoint.position, transform.position) >= 5
            || _angle <= -45 || _angle >= 45)
        {
         
           //用来记录小怪移动后的位置指向初始位置的向量
            _orgin = _orginPoint - transform.position;
            //转换为四元数
            Quaternion o = Quaternion.LookRotation(_orgin);
            //小怪返回时候旋转
            transform.rotation =
                Quaternion.Lerp(transform.rotation, o, 1);
            // 小怪移动回去
            transform.position =
               Vector3.MoveTowards(transform.position, _orginPoint, 4 * Time.deltaTime);
            //当小怪移动到初始的目标点的时候,旋转角度和初始角度一样
            if (Vector3.Distance(transform.position, _orginPoint) ==0)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation,_orginRotate,2f);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆子lazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值