transform.InverseTransformDirection,没有得到正确的输出

2024-01-07

我有一个球体作为玩家,我希望它相对于相机移动 而不是世界。

当我沿 Y 轴旋转相机 90 或 270 度并给出输入时,它给出与预期相反的输出。

这是我附加到球体的脚本:

using System.Collections;
using UnityEngine;

public class mover : MonoBehaviour {

    public Rigidbody sphere;

    public GameObject cameraa;


    void Start () 
    {
        sphere = GetComponent<Rigidbody> ();
    }


    void Update () 
    {
        // getting input in controlVector
        Vector3 controlVector = new Vector3 (Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        // transforming direction from world space to local space[to camera]
        Vector3 localVectToCam = cameraa.transform.InverseTransformDirection (controlVector);

        //applying inputs   
        sphere.AddForce (localVectToCam * 10);
    }
}

当相机的方向与世界相同并且相机沿Y轴旋转180度时,它工作正常。

但沿 Y 轴旋转相机 90 度和 270 度会给出相反的输出。

example:

相机沿 Y 轴旋转 = 90 度 [ 即 (0,90,0) ]

给定输入 = (0,0,1)

输出得到 = (-1,0,0)

预期输出 = (1,0,0)

你能帮我理解并纠正它吗?


我想你实际上想反过来!

Transform.InverseTransformDirection https://docs.unity3d.com/ScriptReference/Transform.InverseTransformDirection.html将向量从世界空间转换为局部空间。

然而,你得到的输入是localXZ 平面上的向量和Rigidbody.AddForce https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html期望一个世界空间向量。

您希望根据玩家对象的方向应用此方向,例如按右(您的输入是1,0,0)物体应朝其方向移动transform.right vector.

因此,您宁愿以相反的方向转换到世界空间,以在 Unity 世界空间中移动对象。

你应该使用Transform.TransformDirection https://docs.unity3d.com/ScriptReference/Transform.TransformDirection!

var worldMove = transform.TransformDirection(controlVector);
sphere.AddForce(worldMove * 10);

或者你也可以只乘以旋转,例如

var worldMove = transform.rotation * controlVector;
sphere.AddForce(worldMove * 10);

但是,由于您使用的是 Rigidbody,因此还存在Rigidbody.AddForceRelative https://docs.unity3d.com/ScriptReference/Rigidbody.AddRelativeForce.html它基本上以相同的方式工作,并期望一个局部空间矢量,然后在内部转换为世界空间力。

sphere.AddRelativeForce (controlVector * 10);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

transform.InverseTransformDirection,没有得到正确的输出 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 从网站内容 PHP 中过滤 javascript

    因此 我正在制作一个脚本来根据用户提交的 URL 检查页面的关键字密度 并且我一直在使用 strip tags 但它似乎并没有完全过滤来自实际单词内容的 JavaScript 和其他代码地点 有没有更好的方法来过滤页面上的代码内容和实际的单
  • 使用批处理文件打开任务管理器

    基本上我想使用批处理文件来打开任务管理器 我所需要做的就是打开任务管理器 简单 只需输入TaskMgr在记事本中然后另存为批处理文件
  • getSession() 总是创建一个新会话

    我们通过实现 Filter 在我们的应用程序中拥有 SecurityFilter 类 我们的 doFilter 方法如下所示 public void doFilter ServletRequest sres ServletResponse
  • 将用户 1 的位置发送给用户 2 并将用户 2 的位置发送给用户 1 是否困难?

    我有一个代码 将用户 1 的位置发送给用户 2 将用户 2 的位置发送给用户 1 用户 1 的位置已完美发送给用户 2 用户 2 甚至向用户 1 发送消息 但发送的位置是用户 1 的位置 而不是他 用户 2 的位置 这是我的代码 packa
  • 使用 PySide2 在 QML 中注册类型

    我正在尝试使用 Python 创建新的 QML 类型 但在注册 QML 类型时遇到问题 但是 我收到错误 TypeError PySide2 QtQml qmlRegisterType called with wrong argument
  • Visual Studio Code PHP 验证错误:无法验证,因为 /usr/bin/php 不是有效的 php 可执行文件

    我正在尝试在 Linux Mint 19 中运行的 Visual Studio Code 中设置 PHP 验证 我按照描述添加了 PHP 可执行路径here https code visualstudio com 我究竟做错了什么 sett
  • 将 Backbone 模型重置为初始默认值的最简单方法?

    我的模型已经有一个defaults哈希 当部分视图 页面被重置时 我希望将模型重置回原始默认值 目前 我明确地将每个属性设置为其默认值 是否有任何内置功能或 JavaScript Underscore js Backbone js jQue
  • 在Silverlight项目中放置clientaccesspolicy.xml的位置

    我在客户端上有一个 Silverlight 应用程序 通过 WCF 与服务器端进行通信 我偶尔会收到 CommunicationException 特别是在将大量数据传递给服务的某些参数时 有人告诉我 如果我希望 Silverlight 应
  • spring batch:没有 ItemWriter 的 Tasklet

    我在没有 ItemWriter 的情况下定义了我的 tasklet 如下所示
  • facebook v2.2 登录 C#

    我想为在 Microsoft Visual Studio 2010 Ultimate 中用 C 编写的 FacebookLoginDialog cs 进行编码 你可能知道 Facebook已经将其API升级到了v2 2 我在网上找到的大部分
  • ElementRef 未定义

    我正在使用 Angular 6 应用程序 我有一个文本区域 我想在页面加载后立即将焦点放在该文本区域上 我做不到 页面如下所示 div div
  • 使用泛型对整数数组进行排序 (Java)

    我是一名计算机科学专业二年级学生 目前正在使用 Java 我们最近开始使用泛型 我有一个作业 其中给了我一个使用泛型的排序算法列表 并负责使用它们对整数 不是原始整数 列表进行排序 由于排序类使用扩展 Comparable 的泛型 我认为简
  • 如何比较golang中html/template中列表的长度?

    我正在尝试比较 golang html template 中列表的长度 但它在 html 中永远加载 length len SearchData if eq length 0 Sorry No matching results found
  • 如何在reveal.js中放置背景图片?

    我希望在 Reveal js 演示文稿中的一张幻灯片的右侧有一个背景图像 我将图像添加到幻灯片中 如下所示 section content section 如何添加 css 样式以使其显示在屏幕的右边缘 这篇文章帮助找到了解决方案 http
  • 在 Linux 上用 Java 截屏?

    我希望能够使用 Java 截取部分或全部屏幕的屏幕截图 普遍接受的方法是使用 Robot 类 但在这种情况下不起作用 我的屏幕上有多个透明的 JavaFX 阶段 使用 Robot 类拍摄的任何屏幕截图似乎都将它们视为完全不透明 我还尝试过让
  • 无法在 Android 中将位图转换为完美的 Base64 字符串?

    我正在开发一个需要从相机捕获图像的应用程序 捕获后 我必须将位图转换为 Base64 转换为 Base64 后 我必须将该字符串发送到 SERVER 我正在使用以下代码来完成此任务 ByteArrayOutputStream baos ne
  • R 中的温度曲线

    我想在一张图中创建两条温度曲线 我的数据框如下所示 temp lt read table text Time Temp1 Temp2 1 00 00 18 62800 18 54458 2 00 10 18 60025 18 48283 3
  • setInterval() 中的函数立即执行

    我正在制作一个 jquery 应用程序 通过使用 setInterval 在指定的时间间隔后隐藏图像 问题是隐藏图像函数立即执行 没有延迟 document ready function setInterval change 9999999
  • jQuery 检查是否被点击

    element click function 如何检查元素是否被点击 我就是这样做的 function element element click function return 0 if element 0 alert yes else
  • transform.InverseTransformDirection,没有得到正确的输出

    我有一个球体作为玩家 我希望它相对于相机移动 而不是世界 当我沿 Y 轴旋转相机 90 或 270 度并给出输入时 它给出与预期相反的输出 这是我附加到球体的脚本 using System Collections using UnityEn