本发明涉及一种基于unity3D的拖动相机在场景中位移的方法。
背景技术:
游戏中相机的视角是个锥形视角,从截面来看,就是一个等腰三角形。而相机就处于中间顶点的位置,相机的FOV(field ofview,摄像机的视角)就是顶点的内角。游戏中经常会需要用到在电脑上拖动鼠标、在移动设备上滑动手指等操作来完成场景移动,从而浏览其他区域的操作,但是相机与场景之间存在距离,在场景跟随手指拖动的过程,存在或多或少的误差,无法达到场景完全跟随手指拖动,拖动过程中如果没有进行平滑插值,整个操作就也会非常生硬。
技术实现要素:
本发明要解决的技术问题,在于提供一种基于unity3D的拖动相机在场景中位移的方法,实现场景的平滑移动,提升用户体验。
本发明是这样实现的:一种基于unity3D的拖动相机在场景中位移的方法,包括如下步骤:
步骤1、判断是否是正交相机,若是,则跳转至步骤4,否则,进入步骤2;
步骤2、获取相机到视野中心点的直线距离d和相机视角FOV;
步骤3、根据所述直线距离d和相机视角FOV计算出水平位移量X和垂直位移量Y:X=d×2×tan(FOV÷2),Y=X÷画面宽高比,其中,所述画面宽高比为unity3D引擎自带的屏幕宽高比,跳转至步骤5;
步骤4、根据相机尺寸size计算出水平位移量X和垂直位移量Y:X=2×size×画面宽高比,Y=2×size;其中,所述画面宽高比为unity3D引擎自带的屏幕宽高比,所述相机尺寸size为正交相机的视野宽度的一半;
步骤5、根据相机旋转角度α对水平位移量X和垂直位移量Y进行修正,得到修正后的水平位移量X1和修正后的垂直位移量Y1作为目标值,通过插值方式以一定速度跟随目标值位移,达到平滑移动效果。
进一步的,所述步骤2中“获取相机到视野中心点的直线距离d”具体为:判断视野内的地面是否为固定的平地,若是,则从相机往视野中央发射一条射线,得到射线与地面的碰撞点,计算出相机到碰撞点的距离作为直线距离d,否则,取相机到视野中心的距离作为直线距离d。
进一步的,所述步骤5中“根据相机旋转角度α对水平位移量X和垂直位移量Y进行修正”具体为:
X1=-X×(水平实际操作量×cosα+垂直实际操作量×sinα);
Y1=Y×(水平实际操作量×sinα-垂直实际操作量×sinα);
其中,相机旋转角度α为相机绕Z轴旋转的角度,即平行于地面的旋转角度,所述Z轴为垂直于场景地面的坐标轴,所述水平实际操作量和垂直实际操作量分别为单位时间内手指在屏幕上的水平移动向量和垂直移动向量。
进一步的,所述步骤5中的速度为当前时间减去开始插值时间,之后再除以插值需要的时间得到的,所述插值需要的时间由用户自定义。
本发明具有如下优点:先精确计算出实际的位移,再利用插值方式实现拖动的平滑位移,大大降低误差范围,改善拖动的模拟效果,提升用户体验;插值速度可以根据用户需要灵活调整;另外,本发明适用于正交相机与非正交相机两种模式,应用范围广。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明一种基于unity3D的拖动相机在场景中位移的方法执行流程图。
具体实施方式
如图1所示,一种基于unity3D的拖动相机在场景中位移的方法,包括如下步骤:
步骤1、判断是否是正交相机,若是,则跳转至步骤4,否则,进入步骤2;
步骤2、获取相机到视野中心点的直线距离d和相机视角FOV;
步骤3、根据所述直线距离d和相机视角FOV计算出水平位移量X和垂直位移量Y:X=d×2×tan(FOV÷2),Y=X÷画面宽高比,其中,所述画面宽高比为unity3D引擎自带的屏幕宽高比,跳转至步骤5;
步骤4、根据相机尺寸size计算出水平位移量X和垂直位移量Y:X=2×size×画面宽高比,Y=2×size;其中,所述画面宽高比为unity3D引擎自带的屏幕宽高比,所述相机尺寸size为正交相机的视野宽度的一半;
步骤5、根据相机旋转角度α对水平位移量X和垂直位移量Y进行修正,得到修正后的水平位移量X1和修正后的垂直位移量Y1作为目标值,通过插值方式以一定速度跟随目标值位移,达到平滑移动效果。
本发明中,所述步骤2中“获取相机到视野中心点的直线距离d”具体为:判断视野内的地面是否为固定的平地,若是,则从相机往视野中央发射一条射线,得到射线与地面的碰撞点,计算出相机到碰撞点的距离作为直线距离d,否则,取相机到视野中心的距离作为直线距离d。
本发明中,所述步骤5中“根据相机旋转角度α对水平位移量X和垂直位移量Y进行修正”具体为:
X1=-X×(水平实际操作量×cosα+垂直实际操作量×sinα);
Y1=Y×(水平实际操作量×sinα-垂直实际操作量×sinα);
其中,相机旋转角度α为相机绕Z轴旋转的角度,即平行于地面的旋转角度,所述Z轴为垂直于场景地面的坐标轴,所述水平实际操作量和垂直实际操作量分别为单位时间内手指在屏幕上的水平移动向量和垂直移动向量。
本发明中,所述步骤5中的速度为当前时间减去开始插值时间,之后再除以插值需要的时间得到的(一般为0~1的值),所述插值需要的时间由用户自定义(例如1s),例如插值方式可采用Mathf.Lerp(初始值,目标值,(0-1)插值位置)实现。
本发明通过精确计算出实际的位移,再利用插值方式实现拖动的平滑位移,提升用户体验;插值速度可以根据用户需要灵活调整;同时适用于正交相机与非正交相机两种模式。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。