//获得enemy到player的向量
Vector3 dir=playe.position - enemy.transform.position;
//y 高度保持不变
dir.y = 0;
//四元数插值运算
enemy.transform.rotation=Quaternion.Slerp(enemy.transform.rotation,Quaternion.LookRotation(dir),0.3f);

unity 敌人朝向主角_四元数

public class PlayerController : MonoBehaviour
{
private Camera mainCamera;
private Rigidbody rigidbody;
private Vector3 distance;
void Start()
{
rigidbody = this.GetComponent<Rigidbody>();
mainCamera = Camera.main;
distance =transform.position- mainCamera.transform.position;
Debug.Log(distance);
}

void Update()
{
float v = Input.GetAxis("Vertical");//垂直z轴
float h = Input.GetAxis("Horizontal");//水平x 轴
Vector3 dir = new Vector3(h, 0, v);
if (dir!=Vector3.zero)
{
//拟物体的物理状态,比如物体受重力影响,物体被碰撞后的击飞等等。对于运动学刚体
//它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动平台之上的情况
rigidbody.MovePosition(transform.position + dir * Time.deltaTime * 5);
//旋转
this.transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), Time.deltaTime * 15);

}
//播放动画

}

//相机跟随

public class CameraMove : MonoBehaviour 
{
public Transform player; // 主角位置
private float speed = 15f; // 相机速度
Vector3 distance; // 主角和摄像机之间的距离


void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
// 计算人物与摄像机之间的向量
// 用当前摄像机的坐标 - 玩家的坐标(可以画一张图来算一算)
distance = transform.position - player.position;
}


void FixedUpdate()
{
// 摄像机应该在的位置
// 不直接赋值给当前摄像机的原因是,需要这个参数来实现一个延迟功能
Vector3 targetCamPos = player.position + distance;
// 给摄像机移动到应该在的位置的过程中加上延迟效果
transform.position = Vector3.Lerp(transform.position, targetCamPos, speed * Time.deltaTime);
}