热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

unity正交相机宽度_一种基于unity3D的拖动相机在场景中位移的方法与流程

本发明涉及一种基于unity3D的拖动相机在场景中位移的方法。背景技术:游戏中相机的视角是个锥形视角,从截面来看,就是一个等腰三角形。而相

本发明涉及一种基于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)插值位置)实现。

本发明通过精确计算出实际的位移,再利用插值方式实现拖动的平滑位移,提升用户体验;插值速度可以根据用户需要灵活调整;同时适用于正交相机与非正交相机两种模式。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。



推荐阅读
  • 本文旨在介绍在iOS平台进行直播技术开发前的准备工作,重点讲解AVFoundation框架的基本概念和使用方法。通过对AVFoundation的深入理解,开发者能够更好地掌握直播应用中的音视频处理技巧。 ... [详细]
  • 在 Android 应用开发中,Toast 是一种常见的信息提示方式,用于向用户显示短暂的消息。本文将详细介绍几种常用的 Toast 类型及其自定义方法,包括默认 Toast、位置定制、图文结合等。 ... [详细]
  • 本文详细介绍了在Windows 10操作系统中,如何通过设置本地账户来实现无需微软账户即可登录电脑的方法。 ... [详细]
  • 在J2EE开发领域,众多专业术语如PO、VO、BO、DTO、POJO及DAO常常令初学者感到困惑。本文旨在清晰解释这些术语及其相互间的关系,帮助开发者更好地理解和运用这些概念。 ... [详细]
  • 本文旨在深入探讨Java代理模式的基本概念与实际应用场景,通过实例分析如何利用代理模式在不修改原对象的前提下,实现功能的增强或限制。 ... [详细]
  • 如何在Android Studio中添加RecyclerView v7库
    为了在项目中使用RecyclerView v7库,开发者需要正确地将其依赖项添加到项目的构建文件中。本文将详细介绍如何手动导入RecyclerView v7库,并确保其在项目中的正常运行。 ... [详细]
  • 本文提供了手势解锁功能的详细实现方法和源码下载链接。通过分析手势解锁的界面和逻辑,详细介绍如何在iOS应用中实现这一功能。 ... [详细]
  • 本文详细介绍如何结合Django框架和DRF(Django REST Framework)来设计一套有效的全局异常处理系统。这套系统不仅能够妥善处理DRF引发的异常,还能兼容Django自带的admin界面异常处理逻辑。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • 面临考试压力,急需解决四个编程问题,包括实现乒乓球的动态效果、计算特定日期是一年的第几天、逆序输出数字以及创建弹出菜单。每个问题的解决都能在TC3.0环境中获得50分。 ... [详细]
  • iOS绘制就是采集点,贝塞尔曲线得到形状,绘图上下文去渲染出来AsanaDrawsana图形库,设计的挺好他可以画多种图形, ... [详细]
  • HTML与Android TextView中的文本样式调整方法及实践
    本文详细介绍了如何在HTML中调整下划线的粗细,并在Android的TextView中应用HTML样式,如设置下划线和加粗效果。通过具体的代码示例,展示了如何在不同版本的Android系统中正确使用Html.fromHtml方法来实现这些效果。 ... [详细]
  • Android开发技巧:实现带描边的圆角图片
    本文介绍了一种在Android应用中实现带描边的圆角图片的方法。通过使用BitmapShader类,开发者可以轻松地为图片添加圆角和描边效果,提升应用的视觉体验。 ... [详细]
  • 构建首个Spring MVC应用程序
    本指南将指导您如何从零开始创建一个简单的Spring MVC应用,涵盖项目模块创建、依赖管理、核心配置及控制器开发等关键步骤。 ... [详细]
  • 从Android 3.0 (API Level 11)起,Android的2D渲染管道得到了改进,以更好地支持硬件加速。本文介绍了如何启用和管理硬件加速,以及其对应用性能的影响。 ... [详细]
author-avatar
A-Alon_586
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有