最近使用cesium for unity做一个3d地图项目,目前cesium官方提供的unity版本的相机操控并没有js版本那样的旋转平移倾斜等功能,因此自己琢磨了一下,整了个勉强能用的东西,在此记录一下。
原理就是根据鼠标点击在地球上的位置进行操控
1、点击拖拽的核心代码
{Vector3 vPre = GetScreenPosition(mouseStartPosition, out tempDis);
mouseEndPosition = Input.mousePosition
if (mouseEndPosition == mouseStartPosition)
{
return;
}
Vector3 vCur = GetScreenPosition(mouseEndPosition, out tempDis);
vPre.Normalize();
vCur.Normalize();
Quaternion qOut = new Quaternion();
Vector3 vOut = new Vector3();
Quaternion qCameraQuat = m_transform.rotation;
Vector3 camPosition = cameraCurPos;
CallLocationAndRotation(vPre, vCur, camPosition, qCameraQuat, ref vOut, ref qOut);
m_transform.rotation = qOut;
cameraCurPos = vOut;
UpdateCamPos();
mouseStartPosition = mouseEndPosition;
}
void CallLocationAndRotation(Vector3 _start, Vector3 _end, Vector3 _vloction, Quaternion _qCameraQuat, ref Vector3 _vOut, ref Quaternion _qOut)
{
Vector3 relativePosition = _vloction - centerPos;
Vector3 move = Quaternion.Inverse(_qCameraQuat) * relativePosition;
float angle = Vector3.Angle(_start, _end);
Vector3 vecRotateAxis =