Unity相机旋转和人物朝向
最近在做一个自己想做的东西,里面涉及到摄像机的旋转,人物朝着摄像机旋转后的方向行走等等,还要固定摄像机和人物的相对距离不变,并跟随人物移动。
首先需要定义一个Vecto3 relCameraPos,在Start方法中为它赋初值,这就是摄像机和人物的相对朝向吧应该。。。向量的加减法吧,包含朝向和大小
relCameraPos = cameraObject.transform.position - transform.position; //相对朝向和大小的向量
再在输入中定义一个摄像机旋转的输入。
因为摄像机移动的时候人物也需要跟着移动(这个脚本是在人物身上的),而且摄像机需要根据输入绕着人物旋转,并且还需要更新相对距离。
float cam_h = Input.GetAxis("CamRotate"); //摄像机旋转与否//先更新摄像机的位置和转动,在更新这两个的距离 改朝向
cam_transform.position = relCameraPos + transform.position;
cam_transform.RotateAround(transform.position, Vector3.up, cam_h);
relCameraPos = cameraObject.transform.position - transform.position;
这顺序不能出错,要不得不到想要的结果
然后就是人物的朝向了,因为摄像机是绕着Y轴旋转的,然后人物的朝向在有输入的时候需要朝着摄像机的forward为自身的forward,所以首先获得输入,然后将输入旋转,就是应该的朝向
/*****获得当前方向输入*****/float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");velocity = new Vector3(h, 0, v);//利用四元数左乘向量来得到目标应该的朝向float cam_y = cam_transform.rotation.eulerAngles.y;velocity = Quaternion.Euler(0, cam_y, 0) * velocity;
还有一个是鼠标控制旋转摄像机(也是绕着物体旋转),不过竖直方向旋转有一个限制,两边都不超过80度
/******摄像机视角******/
//获得水平和竖直的鼠标旋转
float cam_h = Input.GetAxis("MouseHorizontal");
float cam_v = Input.GetAxis("MouseVertical");cam_transform.position = relCameraPos + transform.position;
//视角旋转
//水平旋转
cam_transform.RotateAround(transform.position, Vector3.up, cam_h * 0.5f);
//竖直旋转 ,两边旋转不超过80度
float angleX = cam_transform.rotation.eulerAngles.x;
float nextAngleX = cam_v*0.5f + angleX;
if (nextAngleX >= 360f)
{nextAngleX -= 360f;
}
if ((nextAngleX < 80f) || (nextAngleX <= 360f && nextAngleX >= 280f) )
cam_transform.RotateAround(transform.position, cam_transform.right, cam_v * 0.5f);relCameraPos = cameraObject.transform.position - transform.position;
基本就是键盘 或者鼠标控制视角旋转的脚本吧
Unity相机旋转和人物朝向相关推荐
- 【Unity步步升】各类旋转逻辑的区别,如欧拉旋转、插值旋转、矢量朝向等...及游戏视角案例
在 Unity 中为物体旋转提供了各种 API ,例如 Rotate.RotateAround.LookAt 等方法.但为了避免万向节死锁的问题,一般使用四元数来表示物体的旋转. 而接下来的旋转方法我 ...
- Unity 相机围绕目标旋转、缩放功能实现
Unity 相机围绕目标旋转.缩放功能实现 //************************************************相机围绕物体旋转.相机缩放*************** ...
- Unity Window触摸屏电脑和移动端Input触控,控制相机旋转缩放
Unity Window触摸屏电脑和移动端Input触控,控制相机旋转缩放 原理就是获取手指滑动的偏移量,来计算 代码帖出来 using UnityEngine; using System; usin ...
- Unity 在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小
在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小 鼠标和触屏的操作 下面展示一些 内联代码片. using System; using System.Colle ...
- unity,如何让人物随着鼠标滑动而转向?
介绍 unity,如何让人物随着鼠标滑动而转向? 方法 using System.Collections; using System.Collections.Generic; using UnityE ...
- Unity相机自由移动脚本
实现WSAD移动方向,鼠标右键旋转角度,滚轮实现缩放 在此之前,我们先讲清楚几个比较容易混淆的点: 1:Transform.forward是Transform组件的一个Vector3类型的属性,代表游 ...
- Unity 相机固定角度平移至指定物体
前言:这个也是我得一个朋友怎么做,朋友跟我说的方法,然后我就想记录下来,当个学习. 需求:相机固定视角(相机的高是15.x轴选转30.y轴旋转15),地图上有很多物体,点击后相机移动到指定物体(物体居 ...
- unity相机围绕模型转_围绕我们的业务模型和风险进行安全测试
unity相机围绕模型转 When we create an environment and consider our security testing from development to pro ...
- 【Unity】旋转Vector3和Quaternion
[Unity]旋转Vector3和Quaternion 旋转Vector3 计算一个Vector3绕指定轴旋转指定角度后所得到的向量. /// <summary> /// 计算一个Vect ...
最新文章
- matplotlib如何把坐标轴一横一竖给绘制出来
- thinkphp5.1+ 使用 Redis 缓存
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- java 倒计时_java倒计时器
- VC6.0蕉HOOK_timeGetTime 达到变速效果
- 软件测试系列之四 单元测试(Junit)
- 005 Aspectj的引入
- Mysql常见的引擎
- ascii码01100001_【多选题】计算机中字符a的ASCII码值是(01100001)2,那么字符c的ASCII码值是( )。...
- background-color:transparent
- 无刷直流电机四象限matlab pudn,一种无刷直流电机四象限运行的PWM控制方法与流程...
- 国家发改委发布《“互联网+”高效物流实施意见》
- Unity3D休闲射击类游戏《Survival Shooter》完整源码
- 如何在Windows 10上压缩(和解压缩)文件
- (一) Marlin-2.1.x 源码解析:G-Code指令的接收、解析与执行
- 9 摄像头视频实时传输
- 豆瓣8.9,《数学之美》第三版,让你10分钟爱上数学
- 高通骁龙820A凭什么能赢得众多车厂的芳心
- 揭秘NSA秘密黑客组织方程式
- mysql连接数据了的dep_MySQL数据库基础
热门文章
- 如何进行团队建设以保持团队稳定?
- 面试28k职位,老乡面试官从HashCode到HashMap给我讲了一下午!「回家赶忙整理出1.6万字的面试材料」
- 中国陷入超低生育率陷阱
- 程序员请照顾好自己,周末病魔差点一套带走我。
- 免费截屏神器 Snipaste
- meso-四(4-吡啶)卟啉TPyrP/四(1-吡啶-羟乙基)卟啉T(4-HEPy)P;紫红色晶体状ZnTPP-Py/5-(4-炔丙氧基苯基)-10,15,20-三苯基锌卟啉
- 搭建DHCP服务和NTP网络时间同步
- 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文
- 寻求真心话大冒险之猜数游戏的最佳策略
- Android自定义键盘(KeyboardView)