三维人物跟随鼠标移动
//第一种写法 设置地板为Floor层
public float speed = 6f; private int floorMask;//layer层 void Awake() { floorMask = LayerMask.GetMask("Floor");
Turning();
} //人物跟随鼠标移动 void Turning() { //返回一条射线 这条射线从摄像机通过一个屏幕点(鼠标位置) Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit floorHit; //存储返回来的信息 if (Physics.Raycast(camRay, out floorHit, 100f, floorMask)) { //point 在世界空间中,射线碰到碰撞器(地板)的碰撞点 //playerToMouse 可理解为是一个轴线 物体围着这个轴线旋转 Vector3 playerToMouse = floorHit.point - transform.position; Quaternion newRotation = Quaternion.LookRotation(playerToMouse); transform.rotation = newRotation; }
1 //第二种方法 设置地板tag 2 private Vector3 targetPosition = Vector3.zero;//设置目标初始位置为0 3 4 void Update() 5 { 6 if (Input.GetMouseButton(0)) 7 { 8 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 9 RaycastHit hitInfo; 10 if (Physics.Raycast(ray, out hitInfo)) 11 { 12 if (hitInfo.collider.tag == Tags.ground) 13 { 14 targetPosition = hitInfo.point;//先把鼠标位置赋值给目标 15 targetPosition = new Vector3(targetPosition.x, transform.position.y, targetPosition.z); 16 transform.LookAt(targetPosition); 17 } 18 } 19 } 20 }
}
设置 地板为Floor层