Unity 鼠标点击跟随移动
代码内容
public class Mouse : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
AGF();
}
/// <summary>
/// 跟随鼠标移动并旋转
/// </summary>
public void AGF()
{
//点击鼠标右键获取信息
if (Input.GetMouseButton(1))
{
//1获得鼠标点击屏幕的二维坐标
Vector3 mouse = Input.mousePosition;
//2创建一个射线 从相机位置到鼠标点击的位置的方向上
Ray ray = Camera.main.ScreenPointToRay(mouse);
//定义一个射线检测的保存对象
RaycastHit hit;//hit保存射线发射后碰撞的信息
//开始碰撞检测,射线检测返回一个bool类型,true:有碰撞,false:无碰撞
if (Physics.Raycast(ray, out hit, 100f)) //碰撞检测(射线,碰撞结果给hit,射线的长度100米)
{
//获取坐标信息
print(hit.point);
target= new Vector3(hit.point.x, 2f, hit.point.z);
//获取旋转信息
Vector3 dir = target - rotatepos.transform.position;
Quaternion lookRotation = Quaternion.LookRotation(dir);
rotation = Quaternion.Lerp(rotatepos.transform.rotation, lookRotation, 2).eulerAngles;
}
}
//判断是否有信息 有就执行
else if (target!=null)
{
//判断目标旋转值和自己旋转值是否一致 不一致就执行
if (rotation.y != rotatepos.transform.localEulerAngles.y)
{
float value = Mathf.MoveTowards(rotatepos.transform.localEulerAngles.y, rotation.y, 3);
rotatepos.transform.rotation = Quaternion.Euler(Zvalue, value, 0f);
}
print(rotation.y);
print(rotatepos.transform.localEulerAngles.y);
//移动自己向目标点移动
transform.position = Vector3.MoveTowards(transform.position, target, 0.2f);
}
}
public float Zvalue = 90;
public Vector3 target;
public GameObject rotatepos;
private Vector3 rotation;
}
鼠标跟随的步骤
获取鼠标屏幕上的坐标
转换屏幕坐标成世界坐标
获取3D坐标
获取3D旋转
判断是否执行信息
执行移动到目标点
执行朝向目标点
其他的就是一些代码执行顺序产生的效果
效果图
移动目标点
朝向目标点