最近在做一个自己想做的东西,里面涉及到摄像机的旋转,人物朝着摄像机旋转后的方向行走等等,还要固定摄像机和人物的相对距离不变,并跟随人物移动。

首先需要定义一个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相机旋转和人物朝向相关推荐

  1. 【Unity步步升】各类旋转逻辑的区别,如欧拉旋转、插值旋转、矢量朝向等...及游戏视角案例

    在 Unity 中为物体旋转提供了各种 API ,例如 Rotate.RotateAround.LookAt 等方法.但为了避免万向节死锁的问题,一般使用四元数来表示物体的旋转. 而接下来的旋转方法我 ...

  2. Unity 相机围绕目标旋转、缩放功能实现

    Unity 相机围绕目标旋转.缩放功能实现 //************************************************相机围绕物体旋转.相机缩放*************** ...

  3. Unity Window触摸屏电脑和移动端Input触控,控制相机旋转缩放

    Unity Window触摸屏电脑和移动端Input触控,控制相机旋转缩放 原理就是获取手指滑动的偏移量,来计算 代码帖出来 using UnityEngine; using System; usin ...

  4. Unity 在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小

    在zSpace上使用鼠标控制相机旋转和鼠标指引式放大缩小,在触屏上手势位置为中心放大缩小 鼠标和触屏的操作 下面展示一些 内联代码片. using System; using System.Colle ...

  5. unity,如何让人物随着鼠标滑动而转向?

    介绍 unity,如何让人物随着鼠标滑动而转向? 方法 using System.Collections; using System.Collections.Generic; using UnityE ...

  6. Unity相机自由移动脚本

    实现WSAD移动方向,鼠标右键旋转角度,滚轮实现缩放 在此之前,我们先讲清楚几个比较容易混淆的点: 1:Transform.forward是Transform组件的一个Vector3类型的属性,代表游 ...

  7. Unity 相机固定角度平移至指定物体

    前言:这个也是我得一个朋友怎么做,朋友跟我说的方法,然后我就想记录下来,当个学习. 需求:相机固定视角(相机的高是15.x轴选转30.y轴旋转15),地图上有很多物体,点击后相机移动到指定物体(物体居 ...

  8. unity相机围绕模型转_围绕我们的业务模型和风险进行安全测试

    unity相机围绕模型转 When we create an environment and consider our security testing from development to pro ...

  9. 【Unity】旋转Vector3和Quaternion

    [Unity]旋转Vector3和Quaternion 旋转Vector3 计算一个Vector3绕指定轴旋转指定角度后所得到的向量. /// <summary> /// 计算一个Vect ...

最新文章

  1. matplotlib如何把坐标轴一横一竖给绘制出来
  2. thinkphp5.1+ 使用 Redis 缓存
  3. C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
  4. java 倒计时_java倒计时器
  5. VC6.0蕉HOOK_timeGetTime 达到变速效果
  6. 软件测试系列之四 单元测试(Junit)
  7. 005 Aspectj的引入
  8. Mysql常见的引擎
  9. ascii码01100001_【多选题】计算机中字符a的ASCII码值是(01100001)2,那么字符c的ASCII码值是( )。...
  10. background-color:transparent
  11. 无刷直流电机四象限matlab pudn,一种无刷直流电机四象限运行的PWM控制方法与流程...
  12. 国家发改委发布《“互联网+”高效物流实施意见》
  13. Unity3D休闲射击类游戏《Survival Shooter》完整源码
  14. 如何在Windows 10上压缩(和解压缩)文件
  15. (一) Marlin-2.1.x 源码解析:G-Code指令的接收、解析与执行
  16. 9 摄像头视频实时传输
  17. 豆瓣8.9,《数学之美》第三版,让你10分钟爱上数学
  18. 高通骁龙820A凭什么能赢得众多车厂的芳心
  19. 揭秘NSA秘密黑客组织方程式
  20. mysql连接数据了的dep_MySQL数据库基础

热门文章

  1. 如何进行团队建设以保持团队稳定?
  2. 面试28k职位,老乡面试官从HashCode到HashMap给我讲了一下午!「回家赶忙整理出1.6万字的面试材料」
  3. 中国陷入超低生育率陷阱
  4. 程序员请照顾好自己,周末病魔差点一套带走我。
  5. 免费截屏神器 Snipaste
  6. meso-四(4-吡啶)卟啉TPyrP/四(1-吡啶-羟乙基)卟啉T(4-HEPy)P;紫红色晶体状ZnTPP-Py/5-(4-炔丙氧基苯基)-10,15,20-三苯基锌卟啉
  7. 搭建DHCP服务和NTP网络时间同步
  8. 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文
  9. 寻求真心话大冒险之猜数游戏的最佳策略
  10. Android自定义键盘(KeyboardView)