Unity 类似FingerGestures 的相机跟随功能
本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6555188.html
最近在做一款VR项目,有一个查看功能,分为自由查看和跟随查看。
自由查看:
第一人称自由控制查看。使用firstPersonControl即可。
跟随查看:
摄像机可自由旋转并跟随查看的物体移动(摄像机不可为子物体)。
刚开始使用固定坐标的方法,但摄像机无法自由旋转。后来换用rotatearound,可以自由旋转,可一旦物体移动,旋转半径会拉大。
最后,模仿手势插件写了一个方法,代码如下:
public Transform target; public float minDistance = 1.5f;
public float maxDistance = 10.0f; public float yawSensitivity =30f;
public float pinchSensitivity = 5.0f; public float smoothZoomSpeed = 30.0f;
public float smoothOrbitSpeed = 10.0f; float distance = 5.0f;
float yaw = ;
float pitch = ; float idealDistance = ; bool rotate; public float IdealDistance
{
get { return idealDistance; }
set { idealDistance = Mathf.Clamp( value, minDistance, maxDistance ); }
} public float Yaw
{
get { return yaw; }
} void Start()
{
Vector3 angles = transform.eulerAngles; distance = IdealDistance = 5f;
yaw = angles.y;
pitch = ; UpdateCamera();
} void Update()
{
if (Input.GetMouseButtonDown ())
rotate = true;
if (Input.GetMouseButtonUp ())
rotate = false; if( rotate )
{
yaw += Input.GetAxis ("Mouse X") * yawSensitivity;
pitch -= Input.GetAxis ("Mouse Y") *pinchSensitivity;
} IdealDistance -= Mathf.Lerp (, Input.GetAxis ("Mouse ScrollWheel") * smoothZoomSpeed, Time.deltaTime);
IdealDistance = Mathf.Clamp (IdealDistance, minDistance, maxDistance);
} void LateUpdate()
{
UpdateCamera ();
} void UpdateCamera()
{
distance = Mathf.Lerp (distance, IdealDistance, Time.deltaTime * smoothZoomSpeed); Vector3 lookAtPos = target.position;
Quaternion rotaetAngle = Quaternion.Euler (pitch, yaw, ); Vector3 desiredPos = lookAtPos - rotaetAngle * new Vector3 (, , distance); transform.position = desiredPos;
transform.rotation = rotaetAngle; transform.LookAt (target);
} static float ClampAngle( float angle, float min, float max )
{
if( angle < - )
angle += ; if( angle > )
angle -= ; return Mathf.Clamp( angle, min, max );
}
以上,完美实现摄像机跟随,并可以右键旋转,滚轮拉近功能。
Unity 类似FingerGestures 的相机跟随功能的更多相关文章
- unity相机跟随Player常用方式
固定跟随,无效果(意义不大) public class FollowPlayer : MonoBehaviour { public Transform Player; private Vector3 ...
- Unity中几种简单的相机跟随
#unity中相机追随 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collectio ...
- unity 常用的几种相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- Unity相机跟随
固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...
- unity3D:游戏分解之角色移动和相机跟随
游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...
- 【Unity】2.8 相机(Camera)
分类:Unity.C#.VS2015 创建日期:2016-03-31 一.简介 Unity的相机用来向玩家呈现游戏世界.你在场景中始终至少有一个相机,但也可以有多个.多个相机可以带给您双人分屏效果或创 ...
- js 实现类似php函数number_format的功能
今天同事在做一个功能的时候需要使用js来实现类似php函数number_format的功能,最后就有了下面的方法,可以实现了: /** * number_format * @param number ...
- SharePoint 2010 类似人人网站内信功能实施
简介:用SharePoint代码加实施的方式,完成类似人人网站内信功能,当然,实现的比较简单,样式也比较难看,只为给大家一个实施的简单思路,如有谬误,还请见谅.当然,还有就是截图比较长,当然为了让大家 ...
- MVC实现类似QQ的网页聊天功能-ajax(下)
此篇文章主要是对MVC实现类似QQ的网页聊天功能(上)的部分代码的解释. 首先说一下显示框的滚动条置底的问题: 结构很简单一个大的div(高度一定.overflow:auto)包含着两个小的div第一 ...
随机推荐
- Linux下,Nginx的安装、升级及动态添加模块
系统基于ubuntu server 14.04.4 amd64 安装 第一步 下载并解压Nginx压缩包 从Nginx官网下载Nginx,或者在Linux上执行wget http://nginx.or ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 用GDB调试程序
转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...
- Web平台安装及检测程序
软件名称:microsoft web platform installer 上图: 可以看做是一个App Store, 你再也不用东奔西跑去找什么开发软件,CMS等等了,直接打开这个,勾选上就安装吧, ...
- Html +++++css总结
一. Html部分 Html定义 Hyper Text Markup Language 超文本标记语言 html 1.0 -> html 2.0 -> ... -> ht ...
- Unity3D Shader Stencil模版测试学习
官方文档地址: https://docs.unity3d.com/Manual/SL-Stencil.html 参考博客: http://blog.csdn.net/onafioo/article/d ...
- 梳理下Cordova的热更新
公司的大部分都是Hybrid 产品,也就是混合开发,所以比较重要的一个核心功能就是热更新了. 做这个功能的时候中间碰到不少坑,记录一下,比较简单,大致思想就是从服务器拉取JS文件替换掉本地对应文件 之 ...
- Android开发遇到短信备份失败
今天做了一个有关ContentProvider的短信备份的小案例,遇到短信备份失败,费了一番周折后终于找到了问题所在 该案例是将短信写到一个xml文件然后保存在手机存储中实现短信的备份功能,关键实现代 ...
- 记一次解析XML转对象的笔记
项目中调用第三方API,返回格式是XML字符串,需要将XML反序列化为对象,格式如下: <?xml version="1.0"?> <Response xmlns ...
- Windows 10 IoT Serials 8 – 如何改变UWP应用的目标平台
Windows Insider计划直接加速了Windows系统的迭代,缩短了系统发布的周期.就Windows 10 IoT Core而言,迭代的速度和Windows 10 for PC.Windows ...