如何移动变换以使子变换位于另一个变换的位置? (统一)

问题描述 投票:0回答:1

摘要: 例如,变换 A 是变换 B 的父级。目标是移动变换 A,以便变换 B 的位置是变换 C 的位置。但是,这些都需要在另一个父级的本地空间中工作,因为父级将是移动和旋转

实际问题: 我目前正在开发一款 FPS 游戏,并尝试制作一个瞄准系统。我有一个枪变换以及作为该枪的子级瞄准时相机应该移动的位置。当我瞄准时,目标是移动枪,使相机应该所在的位置就是相机实际所在的位置。我不想移动相机,因为在后期的开发中这会很困难。我遇到的问题是我不知道如何正确移动枪。之后枪还需要返回到原来的位置,但我已经做到了。我只是将原始的 localPosition 保存在脚本的

Start
中,如果你没有瞄准,就返回到它。

当前层级:

Player
      CameraPositon
          Cameras (Local pos of 0,0,0)
             Main Camera (One being used)
          Guns
             Gun1 (One trying to move)
                Iron Sights (Local pos of 0,0,0)
                   Camera Aim Pos (Reference moving point)

我已经尝试过

Vector3 offset = camera.transform.position - adsPos.positon
,并将其添加到枪中。这有效,但前提是我将它添加到枪的全局位置,并且我需要将它添加到本地位置,因为我还有其他父母要移动。我摆弄了一些
transform.InverseTransformPoint
的东西,并将其与
offset
一起使用,但如果我旋转播放器,它只会绕圈旋转(由于偏移中的位置是全局的)。

如果有人知道这样做的好方法,将不胜感激

c# unity-game-engine position
1个回答
0
投票

那么你是说你尝试过类似的方法但它不起作用?

Vector3 offset = transformA.parent.InverseTransformVector(transformC.position - transformB.position);

transformA.localPosition += offset; 

简单计算从 B->C 的距离/偏移,并将其添加到 A 的本地位置

© www.soinside.com 2019 - 2024. All rights reserved.