创建玩家和小怪
球为玩家,
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);
}
}
}
}