请问Unity3D如何实现两个相机标定实现高频的切换?

当前位置: >>
Unity3D游戏开发之键盘、操纵杆和游戏手柄输入实现详解
Unity3D 游戏开发之键盘、操纵杆和游戏手柄输入实现详解输入桌面Unity 支持键盘、操纵杆和游戏手柄输入。 可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,终端用户可以在简洁美观 的配置对话框中配置键盘。您可以设置操纵杆、手柄、键盘和鼠标,然后通过简单的脚本界面访问所有设置。 在脚本中,所有虚拟轴都按照名称访问。 在创建之时,所有工程都有以下默认的输入轴: 1、 水平线 (Horizontal) 和垂直线 (Vertical) 映射至 w、a、s、d 和方向键。 2、Fire1、Fire2、Fire3 分别映射至 Control、Option (Alt) 和 Command 键。 3、 Mouse X 和 Mouse Y 映射至鼠标移动增量。 4、 Window Shake X 和 Window Shake Y 对应窗口的移动。 添加新的输入轴如需添加新的虚拟轴,转到编辑 (Edit)-&工程设置 (Project Settings)-&输入 (Input) 菜单。也可在这里更改每个轴的设置。每个轴可以对应操纵杆、鼠标的两个按钮或两个键盘按键。 名称 (Name)用来在脚本中检查该轴的字符串名称。描述名称 (Descriptive Name) 配置 (Configuration) 对话框输入选项卡中显示的正名称,用于独立构建。描述负名称 (Descriptive Negative Name)配置 (Configuration) 对话框输入选项卡中显示的负名称,用于独立构建。负按钮 (Negative Button)用于在负方向移动轴。正按钮 (Positive Button)用于在正方向移动轴。备选负按钮 (Negative Button)用来在负方向移动轴的备选按钮。备选正按钮 (Alt Positive Button)用来在正方向移动轴的备选按钮。重力 (Gravity)在没有按任何按钮时,轴下降到 0 的每秒单位速度。死亡 (Dead)模拟死区的大小。所有在这个范围内的模拟设备值将映射为 0。灵敏度 (Sensitivity)轴向目标值移动的每秒单位速度。该功能仅用于数码设备。捕捉 (Snap)如果启用,按下相反方向的按钮时,轴值将自动归零。反向 (Invert)如果启用,按下负按钮 (Negative Button) 将提供正值,反之亦然。类型 (Type)控制此轴的输入类型。轴 (Axis)连接设备的轴将控制这个轴。操纵杆 (Joy Num)连接操纵杆将控制这个轴。这些设置可用来微调输入的外观和感觉。他们在编辑器均带有工具提示。 使用脚本中的输入轴从像这样的脚本,可以查询当前状态,如下所示: value = Input.GetAxis (“Horizontal”); 轴值在 -1 到 1 之间。中间位置为 0。 这是在操纵杆输入和键盘输入的情况下。 但是,鼠标增量和 Window Shake 增量是指鼠标或视窗在最后一帧移动的距离。这意 味着,当用户快速移动鼠标时,它可能大于 1 或小于 -1。 您可以创建多个名称相同的轴。在获得输入轴时,绝对值最大的轴将被返回。这使得 为一种以上输入设备指定同一个轴名称成为可能。例如,为键盘输入创建 一个轴,并且为 操纵杆创建另一根名称相同的轴。如果用户使用操纵杆,输入将来自操纵杆,否则,输入 将来自键盘。有了这种方法,在编写脚本时,您无需再考虑 输入的来源。文章出处【狗刨 学习网】 按钮名称要映射一个键到一个轴,您必须在检视器中的正按钮 (Positive Button) 或负按钮 (Negative Button) 属性中输入按键名称。 按键名称遵循以下惯例: 1、 标准键: “a”、”b”、”c”、? 2、 数字键:”1″、”2″、”3″、 ? 3、 方向键:“上 (up)”、“下 (down)”、“左 (left)”、“右 (right)” 4、小键盘键:”[1]”、”[2]”、”[3]”、”[+]”、”[=]” 5、修改键:”right shift”、”left shift”、”right ctrl”、”left ctrl”、”right alt”、”left alt”、”right cmd”、”left cmd” 6、鼠标按钮:”mouse 0″、”mouse 1″、”mouse 2″, ? 7、 操纵杆按钮(从任意操纵杆):”joystick button 0″、”joystick button 1″、”joystick button 2″、 ? 8、操纵杆按钮(从指定操纵杆):”joystick 1 button 0″、”joystick 1 button 1″、”joystick 2 button 0″、? 9、 特殊 键:”backspace”、”tab”、”return”、”escape”、”space”、”delete”、”en ter”、”insert”、”home”、”end”、”page up”、”page down” 10、 功能键:”f1″、”f2″、”f3″、? 在脚本界面和检视器中,用来识别按键的名称是一样的。 value = Input.GetKey (“a”); 移动输入在 iOS 和 Android 平台,输入类别可以让您访问触摸屏、加速度计及地理/位置输入。 通过 iOS 键盘可提供移动设备键盘访问。 多点触控屏幕iPhone 和 iPod Touch 设备最多可同时追踪屏幕的五个触点。您可以访问 Input.touches 属性数组,检索最后一帧每个触点的状态。 Android 设备对于追踪的触点数量没有统一限制。相反,它根据设备的而有所不同, 某些老旧设备可能是两点,而最新的设备可以到五点。 每个触点都以一个 Input.Touch 数据结构表示:手指索引 (fingerI 每次触摸的唯一指数。 d)位置 (positio 触摸在屏幕中的位置。 n)增量位置 最后一帧以来的屏幕位置变化。 (deltaPo sition)增量时间 (deltaTi 最后一次状态变化以来的经过的时间。 me)点击数 iPhone/iPad 屏幕可以分辨用户的快速触摸。这个计数器可以让您知道用户在不移动手指的情况下触摸屏幕的次数 (tapCoun Android 设备不会计算触摸的次数,因此,这个字段始终为 1。 t)阶段 (phase)描述所谓的触摸“阶段 (phase)” 或状态。它有助于确定用户是否刚开始触摸,是否用户移动手指,是否用户刚刚 指。阶段主要分为以下几个部分: 开始 (Began) 手指刚刚接触屏幕。移动 (Moved) 手指在屏幕上移动。静止 手指触摸屏幕,但自最后一帧以来并未移动。 (Stationary)结束 (Ended) 手指离开屏幕,是触控的最后一个阶段。取消 (Canceled)系统已取消触控跟踪,例如,用户将设备接触面部或同时超过 5 个触摸点。这是触控的最后一个阶段。下面是一个用户轻触屏幕即射出光线的脚本示例: 1. var particle : GameO 2. function Update () { 3. 4. 5. 6. 7. 8. 9. for (var touch : Touch in Input.touches) { if (touch.phase == TouchPhase.Began) { // Construct a ray from the current touch coordinates var ray = Camera.main.ScreenPointToRay (touch.position); if (Physics.Raycast (ray)) { // Create a particle if hit Instantiate (particle, transform.position, transform.rotation); 10. 11. 12. 13. } } } }鼠标模拟除原生的触摸支持以外,Unity iOS/Android 还提供鼠标模拟。您可以使用标准输入 类中的鼠标功能。 加速度计在移动设备移动的过程中,内置的加速度计报告在三维空间三个主要轴上的线性加速 度改变。硬件将直接报告每根轴的加速度作为重力值。值为 1.0 代表所给出的轴的负载约 为 +1g,而 -1.0 则代表 -1g。如果设备垂直放置(Home 键位于下方)于身体正前方,那 么 X 轴在右边是正值,Y 轴在上方是正值,Z 轴则在指向您本人的一方为正值。 可以访问 Input.acceleration 属性,检索加速度计值。 以下是使用加速度计移动对象的脚本示例:1. var speed = 10.0; 2. function Update () { 3. 4. var dir : Vector3 = Vector3. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.// we assume that the device is held parallel to the ground // and the Home button is in the right hand// remap the device acceleration axis to game coordinates: // // 1) XY plane of the device is mapped onto XZ plane 2) rotated 90 degrees around Y axisdir.x = -Input.acceleration.y; dir.z = Input.acceleration.x;// clamp acceleration vector to the unit sphere if (dir.sqrMagnitude & 1) dir.Normalize();// Make it move 10 meters per second instead of 10 meters per frame...19. 20. 21. 22. 23. }dir *= Time.deltaT// Move object transform.Translate (dir * speed);低通过滤器加速度计读数可能被颠簸和噪音影响。在信号中应用低通滤波器有助于使其更平滑, 并去除高频噪音。 以下脚本展示了如何将低通滤波器应用到加速度计读数:1. var AccelerometerUpdateInterval : float = 1.0 / 60.0; 2. var LowPassKernelWidthInSeconds : float = 1.0; 3. 4. private var LowPassFilterFactor : float = AccelerometerUpdateInterval / LowPassKernelWidthInS // tweakable 5. private var lowPassValue : Vector3 = Vector3. 6. function Start () { 7. 8. } 9. 10. function LowPassFilterAccelerometer() : Vector3 { 11. lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor); 12. 13. } return lowPassV lowPassValue = Input.LowPassKernelWidthInSeconds 的值越大,过滤值在当前输入样本中汇集的速度越慢 (反之亦然)。 在获取加速度计读数时,我希望它能尽可能精确,我该怎么做?读取 Input.acceleration 变量并不等于采样硬件。简而言之,Unity 以 60Hz 的频率 采样硬件,并将结果储存到变量中。事实上,事情并非如此简单 ―― 在大量 CPU 负荷的 情况下,加速度计采样不 会以相同的时间间隔发生。因此,系统可能一帧报告两个样本, 而下一帧又只有一个样本。 您可以访问加速度计在每帧执行的所有测量。以下代码将举例说明最后一帧收集的所有 加速度计事件的简单平均数:1. var period : float = 0.0; 2. var acc : Vector3 = Vector3. 3. for (var evnt : iPhoneAccelerationEvent iPhoneInput.accelerationEvents) { 4. 5. 6. } 7. if (period & 0) 8. acc *= 1.0/ acc += evnt.acceleration * evnt.deltaT period += evnt.deltaT in9.
更多搜索:
赞助商链接
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。unity3d学习(40)
public Camera cam_0;
public Camera cam_1;
void Strat()
void Update()
if (Input.GetKeyDown(KeyCode.Alpha1))
cam_1.enabled =
cam_0.enabled =
if (Input.GetKeyDown(KeyCode.Alpha2))
cam_1.enabled =
cam_0.enabled =
void OnGUI()
GUI.Box(new
Rect(10, 10, 100, 90), &Camera Switch&);
if (GUI.Button(new Rect(20, 40, 80, 20), &Camera 1&))
cam_1.enabled =
cam_0.enabled =
if (GUI.Button(new Rect(20,70,80,20),&Camera 2&))
cam_1.enabled =
cam_0.enabled =
访问:14670次
排名:千里之外
转载:36篇
(1)(1)(2)(2)(17)(15)(4)(1)请完成以下验证码
您当前的位置: &
UNITY3D下不用插件自己设置OCULUS(side-by-side)的立体显示方法
查看: 1384|
大家在unity下开发oculus应用和htc vive应用,往往 借助于集成好的第三方插件来做,自己并不清楚 集成的来龙去脉,有时候 需求稍微有点特殊,就不知道如何修改了,obuil就很烦在unreal中控制相机的位置,因为相机已经被htc定位控制了。 其实这个方法也使用在其他引擎中设置 头盔的显示方法。 大家学习下,看看有无借鉴意义 设置SIDE-BY-SIDE的立体显示方法步骤如下:&&&& 1.& 在场景里放置两个摄像机分别设置为left_camera right_camera并把这两个相机的X轴偏移一定的距离,一般为0.06-0.10 具体视情况设置,这个距离是表示两眼的视差距离,太小了会导致立体不明显, 太大会导致无法聚焦,或者对眼,眼睛会酸胀。当目标离相机非常近时,这个值要求也非常小, 例如本例中设置了0.001。& 2. 建立2个render_texture& 并分别取名render_left,render_right& 3.分别设置2个摄像机的渲染到纹理属性,&
4.建立2个plane, 并把PLANE 拉到前面设置的两个摄像机范围外 5.&把上面建立的2个render_texure分别拖到这2个plane上面 6.&建立一个主相机,方向刚才建立的2个plane&并设置好角度,和平行投影方式。& 7.&&这时就可以看到左右眼的立体按照side-by-side方式排列, 程序打包后按照全屏方式运行,就可以在满屏幕上看到右眼的图像在屏幕左半边,左眼的图像在屏幕右半边。 输入头盔显示器后, 设置头盔显示器的立体模式就可以看到立体效果。 8.&如果立体效果不好, 可以按照步骤1的方法设置左右两个相机的X轴距离,直到满意为止。
52VR.COM微信扫一扫
专注于VR的学习、开发和人才交流
&津ICP备号> Unity3D基础―Camera
Unity3D基础―Camera
时间:     来源:移动互联网学院
相机(Camera)是向玩家捕获和显示世界的设备。通过自定义和操纵摄像机,你可以使你的游戏表现得真正独特。您在场景中摄像机的数量不受限制。他们可以以任何顺序设定放置在屏幕上的任何地方,或在屏幕的某些部分。
相机(Cameras)是显示你的游戏玩家必不可少的。他们可以进行定制,可以为之编写脚本,或者parented,达到任何所可以想象到的效果。对于一个拼图游戏,你可以让摄像机静止地看见整个拼图。对于一个第一人称射击游戏,你会相机作为玩家角色的父物体,把它放在人物的眼睛的高度。对于一个赛车游戏,你可能更希望把相机跟随您的玩家的车辆。
我们在Unity的Game视图中所看到的景象都是Camera进行渲染的。
1.1. Camera各个参数介绍
1.1.1. Clear Flags
确定了屏幕哪些部分将被清除。这是为了方便使用多个摄像机画不同的游戏元素。
每个摄像机在渲染场景时会存储颜色和深度的信息。不绘制在屏幕的部分是空的,并且默认情况下会显示天空盒。当您使用多台摄像机,在各自缓冲区存储它自己的颜色和深度信息,更多的数据会被各摄像机渲染。由于在你的场景任何特定相机渲染它的视野,你可以设置清除标志,清除不同的缓冲区信息。这是通过选择四个选项之一来完成的
这是默认设置。屏幕上的任何空的部分将显示当前相机的天空盒。如果当前的相机没有设置天空盒,它会默认在渲染设置(Render Settings )选择天空盒(在 Edit-&Render Settings可以找到)。它将会变回背景色。另外天空盒组件可以添加到相机上。
Solid Color
任何空部分,屏幕显示为当前相机的背景色。
Depth Only
如果你想绘制一个玩家的枪,又不让它内部环境被裁剪,你会设置深度为0的相机绘制环境,和另一个深度为1的相机单独绘制武器。武器相机的清除标志(Clear Flags )应设置 为depth only。
Don't Clear
此模式不清除颜色或深度缓存。每一帧在下一帧结束后绘制,看上去像是涂抹(smear-looking)的效果。这在游戏中不常用,最好是在自定义着色器(custom shader)上使用。
1.1.2. Background
应用于视图中的所有元素绘制后,和没有天空盒的情况下,剩余屏幕的颜色
1.1.3. Culling Mask
包含层或忽略层将被相机(Camera)渲染。在Inspector窗口向对象分配层。
1.1.4. Projection
切换相机的能力,以模拟透视。
Perspective
Camera将使物体和透视完好无损。
Orthographic
相机会均匀地渲染物体,没有透视感。
View Port Rect
标明这台相机视图将会在屏幕上绘制的屏幕坐标(值0 - 1) 的4个值。
X,Y,W,H分别表示相机视图的开始水平位置,垂直位置,摄像机输出在屏幕上的宽度,摄像机输出在屏幕上的高度。
Viewport Rect是专门为定义一个当前照相机将会绘制到的屏幕一个特定部分 。你可以在屏幕右下角的放置地图视图,或在左上角放置导弹提示视图。你可以使用视口矩形创造一些独特的行为。
Viewport Rect可以很容易地创建双玩家(two-player)的分割画面效果。创建了两个摄像头后,改变两个相机的H值为0.5然后设置玩家1的Y值至0.5,玩家2的Y值设置为0。那么玩家1的摄像机就会从屏幕的中间到顶部显示,玩家2的摄像机就会从屏幕底部到屏幕中间显示(把屏幕按上下分成2半,上半部分是玩家1的,下半部分是玩家2的)
1.1.6. Depth
相机在渲染顺序上的位置。具有较低深度的相机将在较高深度的相机之前渲染。
【推荐阅读】 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
unity3d游戏开发之相机切换
下载积分:1200
内容提示:unity3d游戏开发之相机切换
文档格式:DOC|
浏览次数:353|
上传日期: 02:42:30|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1200 积分
下载此文档
该用户还上传了这些文档
unity3d游戏开发之相机切换
关注微信公众号

我要回帖

更多关于 相机增益自动调节实现 的文章

 

随机推荐