public class L4 : MonoBehaviour
{
public Transform target;
private Vector3 startPos;
private float time;
private Vector3 nowTarget;
// Start is called before the first frame update
void Start()
{
startPos = transform.position;
//Vector3
//位置 - 代表一个点
//向量 - 代表一个方向
//向量模长
Vector3 A= new Vector3(1,1,1);
print(A.magnitude);
//单位向量(x/模长,y/模长,z/模长)
print(A.normalized);
//向量相加首位相连
//位置+向量=位置 位置和向量相加=平移位置
//向量相减 头连头,尾连尾 A-B=B头指A头
//向量点乘=标量
//AB=(XA*XB+YA*YB+ZA*ZB) A点乘B得到B在A上的投影长度
//AB>0 两个向量的夹角为锐角
//AB=0 两个向量夹角为为直角
//AB<0 两个向量的夹角为钝角
//用这个规律判断敌方大致方位
//向量夹角
//Cos C = 单位向量A 点乘 单位向量B
//C = Acos(单位向量A 点乘 单位向量B)
//向量叉乘=向量
Vector3.Cross(target.position, transform.position);
//叉乘几何意义 得到平面法向量
//A x B = -(B x A)
//A x B = C
//C.y > 0 代表B在A的右侧
//C.y < 0 代表B在A的左侧
}
// Update is called once per frame
void Update()
{
//调试画线
//起始点,结束点,颜色
Debug.DrawLine(this.transform.position, transform.forward + transform.position, Color.cyan);
//起始点,方向,颜色
Debug.DrawRay(transform.position,transform.forward, Color.magenta);
//通过点乘判断对象方位
float dotResult = Vector2.Dot(transform.forward, target.position - transform.position);
if (dotResult > 0)
{
print("在前方");
}
//通过点乘算出夹角
dotResult = Vector3.Dot(transform.forward, (target.position - transform.position).normalized);
print(Mathf.Acos(dotResult)*Mathf.Rad2Deg);
//Vector3中提供了计算两个向量之间夹角的方法
print(Vector3.Angle(transform.forward,(target.position-transform.position)));
//向量插值运算
//线性插值
//先快后慢 每帧改变start的位置
transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime);
//匀速 每帧改变t 当t>=1时 得到结果
//因为time一直在累加,所以不清零的话就会直接移动到目标位置
if(nowTarget!=target.position)
{
nowTarget = target.position;
time = 0;
startPos = transform.position;
}
time += Time.deltaTime;
transform.position = Vector3.Lerp(startPos, nowTarget,time);
//球形插值
transform.position = Vector3.Slerp(Vector3.right*10,Vector3.forward*10,time);
}
}