我如何像通过门户一样通过一条线镜像(旋转)一个对象?

时间:2019-04-15 08:11:43

标签: unity3d rotation quaternions portal mirroring

我想创建2D门户效果。因此,离开出口门户的物体应该在位置/旋转上与穿过入口门户的物体相对应。直到原始对象的一半都通过门户。

我制作了一个sprite多维数据集,该多维数据集应在一条线(门户)上进行镜像。退出门户的多维数据集只是原始内容的副本。如果我们旋转门户,则与门户相比,“反射”立方体应与原始立方体的位置一起旋转。如果我们旋转原始多维数据集本身,则“反射”也应相对于门户进行镜像。我只是不知道要进行哪些旋转以及在哪个空间进行旋转。我已经尝试了许多使用局部变换的方法。

我使用Vector2.Reflect来获取反射的正确位置:

Vector2.Reflect(
  (line.transform.position - cube.transform.position), line.transform.up
);

Image 1

要镜像立方体作为反射,请添加此旋转:

reflection.transform.localRotation = Quaternion.Euler(0, 180, 0)
  * cube.transform.localRotation;

但是现在如果旋转门户,反射的旋转方式应与原始立方体在门户空间中的旋转方式相同,就像此处绘制得很差一样:

Image 2

有人知道哪一个正确的转换/旋转可以完成此操作,例如localRotation / localTransform计算吗?我已经做了很多尝试,但是一直以来我对正确数学的理解都消失了。

对不起,还不能发布图片:)

1 个答案:

答案 0 :(得分:0)

我建议简单地反映cube.transform.forward:

reflection.transform.forward = Vector2.Reflect(cube.transform.forward, line.transform.up);