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第一 ...
随机推荐
- wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法
wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...
- 3097: Hash Killer I
3097: Hash Killer I Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 425 Solved: 15 ...
- netflix zuul 学习
netflix zuul 是netflix开发的一个EDGE SERVICE. 主要是作为一个API Gateway 服务器,可以实现安全,流量控制等功能. 我看的是1.x的版本,Zuul1.x的实现 ...
- webStorm Linux Ubuntu 中文搜狗输入问题
1 打开安装路径下bin/webstorm.sh vim ~/WebStorm-145.597.6/bin/webstorm.sh 2.在打开文件的最前面加入如下代码: export XMODIFIE ...
- Maven项目搭建(一):Maven初体验
今天给大家介绍一个项目管理和综合工具:Maven. Maven: maven读作 ['meivin],本意是指可以被信任的领域专家,致力于传播知识(来自于http://en.wikipedia.org ...
- MySQL 5.6 从库开启 crash-safe 功能
原文:Enabling crash-safe slaves with MySQL 5.6 可以对从库进行配置 crash-safe 功能是 MySQL 5.6 关于复制的一个重大改进.然而,我们注意到 ...
- 分享自己使用CSS的public
body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select,td,figure{marg ...
- Python中的元祖Tuple
Python中的元祖和list基本上一样 tuple = () # 表示一个空的元祖 tuple = (50, ) # 元组中只有一个元素的时候,必须在后面加上逗号 无关闭分隔符 任意无符号的对象,以 ...
- 解决MVC中JsonResult返回 弹出文件下载对话框
设置一下返回类型为HTML TEXT就可以了 JsonResult json = Json(xxx, JsonRequestBehavior.DenyGet); json.ContentType = ...
- windows phone 8.1开发:磁铁|Tile更新
原文出自:http://www.bcmeng.com/tile/ 上一篇给大家分享了toast通知操作的方法,这一篇文章我们就来看windows phone 8.1开发中的磁铁更新.磁铁是window ...