- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个刚体节点(3D),我想得到,在全局坐标中 ,“目标”的位置,给定:
target = global_transform.translated(5 * Vector3.FORWARD).origin
但是如果我想要 B 到 C,它会失败:它看起来像围绕世界原点旋转
最佳答案
我们将通过 XZ 平面上的极坐标(即“旋转”角度和距离,我称之为“d”)定义相对于您的刚体(3D)的位置。
为了清楚起见,我们将在 RigidBody(3D) 的局部空间中定义它,然后将其移动到全局坐标。
我们可以做到使用转换 .如果您需要保留旋转,您会怎么做。虽然它需要更多的工作。或者,您可以这样做 仅使用向量 .哪个更容易。
以下是执行此操作的不同方法。
使用变换
局部变换
我们像这样定义组合旋转和平移变换:
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var t = Transform.IDENTITY.rotated(Vector3.UP, rot) * Transform.IDENTITY.translated(d * Vector3.FORWARD)
这给出了在给定距离处围绕原点的旋转。但是,如果您这样做:
var t = Transform.IDENTITY.translated(d * Vector3.FORWARD) * Transform.IDENTITY.rotated(Vector3.UP, rot)
你会得到一个向前位移的变换,然后在适当的位置旋转。
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var global_t = global_transform * t
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var global_t = Transform.IDENTITY.translated(global_transform.origin) * t
不,
t.translated(global_transform.origin)
不是一回事。当您使用
translated
它位于您调用它的变换的本地坐标中。
origin
变换的:
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var v = t.origin
to_global
:
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var v = t.origin
var global_v = to_global(v)
或者我们可以带
origin
从全局变换:
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var global_t = global_transform * t
var global_v = global_t.origin
global_transform.origin
:
var t = Transform.IDENTITY.rotated(Vector3.UP, rot).translated(d * Vector3.FORWARD)
var v = t.origin
var global_v = global_transform.origin + v
var v = (d * Vector3.FORWARD).rotated(Vector3.UP, rot)
to_global
:
var v = (d * Vector3.FORWARD).rotated(Vector3.UP, rot)
var global_v = to_global(v)
global_transform.origin
:
var v = (d * Vector3.FORWARD).rotated(Vector3.UP, rot)
var global_v = global_transform.origing + v
关于transform - Godot/Gdscript 旋转 + 从本地空间到世界空间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68564181/
我正在尝试根据以下教程构建一个具有简单表单提交系统的 Android 应用程序; https://www.crazycodersclub.com/android/how-to-use-google-s
GDScript 中是否有等效的 C# 结构/类? 例如。 struct Player { string Name; int Level; } 最佳答案 戈多 3.1.1 gdsc
我知道可以通过数组 [2:4] 在 python 中对数组进行切片。我解决这个问题的方法是循环遍历我想要的索引并将它们附加到 new_list 中。这种方式需要更多的工作,是否有一种简单的方法可以像在
我想在 GDSCript 中的几个变量名称的末尾附加一个整数。 我正在开发一款 roguelike 游戏,我决定组织主题图 block 和 NPC,并按编号将它们分组到文件夹中(即,主题 1 可能是充
我正在使用 GDscript 在 Godot 中编写一个程序,旨在改变骨架中多个骨骼的位置。骨骼通过我希望骨骼移动到的点减去骨骼的当前位置计算得出的值进行转换。 translateValue = en
我有一个刚体节点(3D),我想得到,在全局坐标中 ,“目标”的位置,给定: 角度“旋转”(向上是 Y) 向量 = 5 * Vector.FORWARD 看起来很简单....先平移,然后旋转,或者如果它
我正在为我的游戏开发一个开发者控制台系统,我目前正在研究实现变量的工作方式。起初,我以为我只是使用变量指针来更改属于其他对象的变量,但 GDScript 似乎不支持它们。有什么办法可以做到这一点,如果
我想知道如何创建一个脚本,其中包含我想在多个脚本中使用的方法。我不认为我想为它创建一个全局单例,因为我没有存储任何将在多个场景中保存的全局数据。我收集了一些有用的功能,别无他物。 最佳答案 创建自己的
在 gdscript 上,很容易获得高度: CollisionShape.shape.height 但我不知道如何在 C# 上获得碰撞形状的高度。在 C# 上,它缺少引用“高度” CollisionS
我正在创建关于坦克战的游戏。我已经编写了脚本,它是所有坦克 Node.js 的构造函数。这个脚本的一部分导出坦克的纹理,然后制作节点。这看起来像这样: export (Texture) var cha
让我们定义两个类 A.gd class_name A var v = null func _init(v_): v = v_ B.gd class_name B var v = null 现在
我正在构建一个城市 build 游戏原型(prototype),让村民同时执行许多不同的任务,例如搬运东西、 build 、收割,为此我创建了一个带有任务积压数组和事件任务数组的 TaskManage
我是一名优秀的程序员,十分优秀!