为什么Unity3D中相机绕z轴旋转?

2023-12-13

我有一个主摄像头在 Unity3D 中,我想根据鼠标输入进行旋转,因此它可以作为第一人称视频游戏,您可以根据要查看的位置移动鼠标。

相机的起始值(Unity 中“检查器”选项卡中的“变换”选项卡)为:

  1. Position:X = -1,Y = 1,Z = -11。
  2. Rotation:X = 0,Y = 0,Z = 0。
  3. Scale:X = 1,Y = 1,Z = 1。

我为主相机添加了一个脚本组件。它是以下类:

using UnityEngine;
using System.Collections;

public class CameraMove : MonoBehaviour {

     float deltaRotation = 50f;

     // Use this for initialization
     void Start () {

     }

     // Update is called once per frame
     void Update () {

          if(Input.GetAxis("Mouse X") < 0){
          //Code for action on mouse moving left
               transform.Rotate (new Vector3 (0f, -deltaRotation, 0f) * Time.deltaTime);
          }
          else if(Input.GetAxis("Mouse X") > 0){
          //Code for action on mouse moving right
               transform.Rotate (new Vector3 (0f, deltaRotation, 0f) * Time.deltaTime);
          }

          if(Input.GetAxis("Mouse Y") < 0){
          //Code for action on mouse moving left
               transform.Rotate (new Vector3 (deltaRotation, 0f, 0f) * Time.deltaTime);
          }
          else if(Input.GetAxis("Mouse Y") > 0){
          //Code for action on mouse moving right
               transform.Rotate (new Vector3 (-deltaRotation, 0f, 0f) * Time.deltaTime);
          }
     }
}

但是,当我播放场景时,相机没有按应有的方式旋转。的价值观rotationx 轴、y 轴的变化,甚至z-axis.

我究竟做错了什么?


这是一个如何做的问题Quaternion被计算。当修改多个轴时会发生这种情况。如果您注释所有 x 旋转或 y 旋转,并且一次仅在一个轴上旋转,您将意识到这个问题将会消失。

要通过鼠标输入正确旋转相机,请使用eulerAngles or localEulerAngles变量。这两者之间的选择取决于您正在做什么。

public float xMoveThreshold = 1000.0f;
public float yMoveThreshold = 1000.0f;

public float yMaxLimit = 45.0f;
public float yMinLimit = -45.0f;


float yRotCounter = 0.0f;
float xRotCounter = 0.0f;


// Update is called once per frame
void Update()
{
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime;
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime;
    yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit);
    transform.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Unity3D中相机绕z轴旋转? 的相关文章

  • Unity3D StartCoroutine 调用一个函数,该函数什么时候返回?

    我知道Unity3D StartCoroutine调用了一个与StartCoroutine在同一线程上运行的函数 但是被调用的函数什么时候返回到原始调用者 我在互联网上查找了一个很好的 Unity3D Coroutine 示例 但找不到完整
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows

随机推荐

  • Python BeautifulSoup 返回空列表

    我正在尝试创建一个 Python 脚本来使用 BeautifulSoup 从 tcgplayer com 获取 Yugioh 卡的价格 当您在此网站上搜索卡片时 它会返回一页搜索结果 其中包含来自不同卖家的多个价格 我的目标是拉低所有这些价
  • mapViewDidLoad方法未加载

    目标c的新手 我正在使用ArcGIS作为地图部分 我的方法有问题mapViewDidLoad没有被调用 加载 这是代码的一部分 h file interface ViewController UIViewController
  • 从 SPARK 中的另一个 RDD 返回最大 N 值的 RDD

    我正在尝试过滤元组 RDD 以根据键值返回最大的 N 个元组 我需要返回格式为 RDD 所以RDD 4 a 12 e 2 u 49 y 6 p 过滤最大的 3 个键应该返回 RDD 6 p 12 e 49 y Doing a sortByK
  • C 3d 字符数组

    char monsternivel1 3 4 Rat Bat Spider Goblin Orc Drawf Dragon Lich Banshee Demon Hydra Giant Spider 它说 gt E Dungeon Craw
  • 从 JSON 输出中选择字段

    使用Python 我如何提取字段id到一个变量 基本上 我要改变这个 accountWide true criteria description some description id 7553 max 1 orderIndex 0 类似的
  • GORM:不可知地映射大文本字段数据库

    我有一个 Grails 应用程序 它将针对 SQL Server 或 Oracle 后端运行 我使用 GORM 作为 ORM 我想以支持两种数据库类型的方式映射大型文本字段 在我的 Grails 域类中 我有类似的内容 class Note
  • 如何将 python 模块从源安装到虚拟环境中

    据我了解 您可以使用 pip install e my module 从源安装模块 当我执行此操作时 pip show f my module grep 位置 给出 my module 作为位置 而不是我的虚拟环境的站点包 安装模块时我激活
  • Opencv检测不同时间拍摄的两张照片之间的变化

    我们有该商品的一张原始图片 照片 即雕塑 我们不时地为该物品拍摄新照片 照片始终与物品成 90 度相同角度拍摄 但 会有一些轻微的上下 左右移动 同一物体的不同长度 我们用线取 相机和在其前面移动的物体因此不时的速度 对象发生变化 因此最终
  • 从远程服务器拉取某个分支

    假设有人创建了一个分支xyz 如何拉动分支xyz从远程服务器 例如GitHub 并将其合并到现有分支中xyz在我的本地仓库中 答案是将分支推送到 Git给我错误 拒绝 并提到 非快进 但我收到错误 拒绝 以及有关 非快进 的信息 这是因为
  • 如何使用 Google Apps 脚本通过 for 循环将值添加到二维数组

    有人可以向我展示一些简单的示例 以使用 for 循环将值添加到二维数组吗 我完全错误的测试脚本如下 预期行为 整体值 0 0 0 整体值 0 1 1 整体值 0 2 2 整体值 1 0 0 整体值 1 1 1 整体值 1 2 2 funct
  • 使用 C#:如何使用 Newtonsoft.JSON 迭代嵌套 JSON?

    我正在提取大量项目的 JSON 数据 每个项目都有一组我想要抓取并放置在列表中的特定数据 以下是 JSON 数据中包含的 700 多个项目中的两个示例 我需要能够使用 Newtonsoft JSON 迭代 JSON 数据 并在 fieldN
  • 尝试将大 Excel 文件读入 DataTable 时出现 OutOfMemoryException

    我正在使用 SSIS 包清理 Xlsx 文件中的数据并将其加载到 SQL Server 表中 我还必须突出显示 Xlsx 文件中包含错误数据的单元格 为此我必须根据列名称和行 ID 我在数据电子表格中拥有 获取列和行索引 为此 我比较第一个
  • 数据库细化 - F 的最小覆盖(无关属性)

    模式 R A B C D E F FD F ABC gt D CD gt B BCF gt D CDF gt BE BCDF gt E 找到 Fc F 的最小覆盖 又名规范覆盖 这是我书中使用的方法 示例 abc gt xyz a 是冗余的
  • 无法在 Mac 上创建开发者证书

    这件事发生在一夜之间 昨天我能够处理我的 NET Core 应用程序 现在每次我尝试做一个dotnet run我在 cmd 行中收到以下错误 如您所见 我尝试运行建议的命令来创建开发人员证书 其中dotnet dev certs https
  • 如何在 Visual Basic 中使用 while 循环从 StreamReader 中读取数据?

    考虑 Dim line As String Using readFile As New StreamReader SalesUpdateFile While line readFile ReadLine IsNot Nothing 我是 V
  • 没有可行的从 std::function 到 bool 的转换

    C 11std function应该执行operator bool const 那么为什么 clang 告诉我没有可行的转换呢 include
  • R-向 PDF 添加页码

    我在向 PDF 添加页码时遇到问题 这是我插入页面 绘图的方法 pdf file pdfFilePath width 11 height 8 5 for grid newpage pushViewport viewport layout g
  • 从 Google 表格调用时 getOAuthToken 返回 null

    我正在研究一种方法 通过 oAuth 规范和 AWS API 网关调用来限制特定用户的某些 Google 表格 但我遇到了一个问题ScriptApp getOAuthToken 功能 当我使用 Google Apps 脚本调试器运行代码时
  • 动态背景(在 LinearLayout 上)-我的错误是什么?

    我有一个问题 我试图让我的应用程序背景根据计时器每十秒改变一次 我已经做了我能做的 但无法解决它 因为我是 java 和编程的初学者 我如果有人可以纠正我的代码 我会很高兴 我可以将它打包到手机等中 Eclipse不会显示错误 但当计时器开
  • 为什么Unity3D中相机绕z轴旋转?

    我有一个主摄像头在 Unity3D 中 我想根据鼠标输入进行旋转 因此它可以作为第一人称视频游戏 您可以根据要查看的位置移动鼠标 相机的起始值 Unity 中 检查器 选项卡中的 变换 选项卡 为 Position X 1 Y 1 Z 11