unity 角度限制_Unity3D实现摄像机镜头移动并限制角度
本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下
摄像机镜头跟随鼠标移动,并限制上下左右的移动角度
public class ViewFromCream : MonoBehaviour
{
public int speed=5;
public Vector3 vect;
private float xcream;
private float ycream;
public void Update()
{
CreamView();
}
private void CreamView()
{
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
if (x!=0||y!=0)
{
LimitAngle(60);
LimitAngleUandD(60);
this.transform.Rotate(-y * speed, 0, 0);
this.transform.Rotate(0, x * speed, 0, Space.World);
}
}
///
/// 限制相机左右视角的角度
///
/// 角度
private void LimitAngle(float angle)
{
vect = this.transform.eulerAngles;
//当前相机x轴旋转的角度(0~360)
xcream = IsPosNum(vect.x);
if (xcream > angle)
this.transform.rotation = Quaternion.Euler(angle,vect.y,0);
else if (xcream < -angle)
this.transform.rotation = Quaternion.Euler(-angle, vect.y, 0);
}
///
/// 限制相机上下视角的角度
///
///
private void LimitAngleUandD(float angle)
{
vect = this.transform.eulerAngles;
//当前相机y轴旋转的角度(0~360)
ycream = IsPosNum(vect.y);
if (ycream > angle)
this.transform.rotation = Quaternion.Euler(vect.x, angle, 0);
else if (ycream < -angle)
this.transform.rotation = Quaternion.Euler(vect.x, -angle, 0);
}
///
/// 将角度转换为-180~180的角度
///
///
///
private float IsPosNum(float x)
{
x -= 180;
if (x < 0)
return x + 180;
else return x - 180;
}
}
对IsPosNum方法进行说明
之所以要将获取的欧拉角转换为-180°-180°之间,是因为在获取eulerAngle中,x轴和y轴的值只有0-360,而没有负数,那么这将会复杂化我们角度的判断,如限制左右角度为-60-60之间,那么我们就要判断角度是否超过300度或是超过60度, 显然超过300度的角度必定超过60度,那么就需要另外加条件进行判断;因此对获取的值进行转化更为方便!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
unity 角度限制_Unity3D实现摄像机镜头移动并限制角度相关推荐
- Unity 3D第三人称视角、用途广泛限定角度(视角不能360度翻转)
Unity第三人称相机视角控制 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心 ...
- Unity使用LineRenderer组件画出菱形,长度,角度可任意调节
首先说下我的思路: 开始想的比较简单,就是先建两个空物体分别挂上脚本,一个在X轴画直线,一个与X轴成angle夹角,通过计算得出坐标,这样就能画出一个菱形的角度,下面是实例图: 最后再写个脚本通过循环 ...
- unity 可滚动文本_Unity3d如何实现滚动文本框?
展开全部 Unity3D是由Unity Technologies开发的一个让玩家轻松创62616964757a686964616fe58685e5aeb931333365653330建诸如三维视频游戏 ...
- 代码 控制unity 暂停 编辑器_Unity3D 报错解决方案及常用功能收集
1.在Dictionary迭代器进行修改: var _key = index2factionDic.Keys.GetEnumerator(); stringitem; while(_key.MoveN ...
- tolua unity 报错_Unity3D热更新之LuaFramework篇[01]--从零开始
解压刚刚下载好的压缩包,发现里面是一个Unity工程(如图2-1),于是用 unity打开此工程. 图2-1 我使用的Unity版本为5.5.5f1,会提示需要升级,是否备份,点"Go He ...
- unity 平移图片_Unity3D研究院之脚本实现模型的平移与旋转(六)
123 说: 雨松大大,有个问题想请教一下,我用UNET构建了个小场景,在电脑上可以客户端可以连接到服务器,Windows和Linux都可以,发布到安卓缺连不了,这是问什么呢 说: 求教一下,刚刚接触 ...
- unity 解决乱码_unity3d 中文乱码解决方法——cs代码文件格式批量转化UTF8
在Unity3d中经常会碰到中文乱码的问题,比如代码中的[AddComponentMenu("GameDef/AI/战机AI")],注释,中文文本等等 其原因在于,unity本身是 ...
- unity三维云图_unity3d 温度云图shader
项目中用到关于温度云图效果,但是本人对shader还没入门,在网上找的一个牛人的shader .起初直接copy下来shader 编译报错,经过排错我把它修改编译通过了(编译版本unity 4.3), ...
- unity 编辑器存档_unity3d editor sprite 分割后的结果保存
之前有人留言说想我介绍一下sprite packer的用法.那么我也顺便的介绍一下unity3d editor sprite 分割后的结果保存吧. 我们用来做sprite 的图片,通常会留有很多空白的 ...
- unity 解决乱码_Unity3D脚本中文字符乱码的解决方案
用Unity这么久,一直就听别人说遇到在脚本里面用中文字符会乱码的问题.这些问题在Visual Studio比较少,通常都是在MonoDevelop上会出现,甚至在Monodevelop编辑器,写了中 ...
最新文章
- Memcached深度分析【转载】
- centos7安装golang
- java web的动静分离_Apache结合Tomcat实现动静分离的方法
- JavaScript中的嵌套事件处理(在鼠标移动事件上)
- 软件测试方法之白盒测试与黑盒测试
- vimium插件_chrome插件神奇的vimium人性化设置
- 第一批“绿牌”汽车终于要换电池了,看到价格后,你还要买吗?
- 蓝桥杯 2018年蓝桥杯C语言大学C组 C/C++
- 字符串在JVM中如何存放 及常量池技术
- 一、annotation
- python怎么重新运行,如何让python程序重新运行其
- win8更改计算机锁屏时间,在win8系统中设置自动锁屏功能的方法
- initializing of server in progress as process 4656
- Java中IO的快速复习(代码+注释)
- 论文笔记22:QRNN3D: 3D Quasi-Recurrent Neural Network for Hyperspectral Image Denoising
- android studio迁移,AndroidStudio 一键迁移至 AndroidX
- 少儿学编程系列---如何使用turtle画鸡蛋
- svg文件解析(python)
- Python3一篇学会“图像处理”的基本操作
- 典型的多层神经网络模型,多层变量神经网络分析
热门文章
- 手写Promise 封装Promise resolve reject then catch Promise.resolve Promise.reject
- 创龙28377d历程_双核dsp28377d
- Linux中scp报 not a regular file错误解决方案
- 关于echarts中饼图设置颜色的方法
- UE5实现HTC Vive VR功能
- SSL证书以及其验证过程
- 【RNNoise】用深度学习抑制噪声
- ctl文件去空格,word文档段落如何空格去掉 word文档段落前空格
- Tensorflow之softmax应用实例
- 空时编码的理论与实践(3)空时编码设计准则